0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

0. AWS Cloudformationで環境構築~ディレクトリ設計/スタックの単位~

Last updated at Posted at 2019-03-04

対象の読者

  • 個人でサービスを作りたいけど、時間がない。でもちゃんとしたネットワークを作りたい人
  • 既存のサービスをcloudformationに乗せ変える為に勉強したい人
  • アプリケーションに集中したいのでネットワークは誰かのcloudformationを使って手っ取り早く使いたい人

使用しているサービス

  • api gateway
  • codebuild
  • codepipeline
  • alb
  • elasticbeanstalk
  • vpc
  • ec2(bastion-nat)
  • ecs
  • eip
  • sns
  • sam
  • route table
  • route53(public private)
  • lambda
  • cloudformation

Cloudformation化しているサービス

  • codebuild
  • codepipeline
  • alb
  • elasticbeanstalk
  • vpc
  • ec2(bastion-nat)
  • ecs
  • eip
  • route table
  • route53(public private)
  • lambda(sam)
  • cloudformation

ネットワーク構成

スクリーンショット 2019-03-04 23.16.10.png

※ 今回紹介するのは下記の図の左側とaws vpc常に構築されるecsのみ。

ディレクトリ構成

├── README.md
├── api
│   ├── deployment-pipeline.yml![Bad Request]()
![Bad Request]()

│   ├── eb.yml
│   ├── residential-map-template.yml
│   ├── route53.yml
│   └── main.yml
├── batch
│   ├── deployment-pipeline.yml
│   ├── eb.yml
│   ├── residential-map-template.yml
│   ├── route53.yml
│   └── main.yml
└── web
│   ├── deployment-pipeline.yml
│   ├── ecs-cluster.yml
│   ├── load-balancer.yml
│   ├── residential-map-template.yml
│   ├── route53.yml
│   ├── service.yml
│   └── main.yml
├── db.yml
├── delete.sh
├── route53.yml
├── run.sh
├── sg.yml
└── vpc.yml

実行順序は

vpc.yml
↓
sg.yml
↓
dns.yml
↓
db.yml
↓
batch/main.yml
↓
api/main.yml
↓
web/main.yml

Cloudformationはすべで一つのtemplateにして使用するべきが、部分的に使用するべきか

結論は、分けて管理する方がよかった。

全て一つのtemplateにして開発する場合のデメリット

  • stackの作成にはかなりの時間がかかるので原因の切り分けが難しい。
  • 一箇所で失敗すると全体がロールパックされてしまう。(かなり時間がかかってしまう。)
  • スコープが区切りにくい。一つのテンプレートで作成すると、重複を許さないように作る為にsg.ymlとかecs.ymlとかこだわってしまうと、どこに何が書いてあるのか見通しが悪くなる。(コレは個人的なものかも)

あるまとまりでスコープを区切って、あとはサービスごとにディレクトリを切って実行するのが良いのでは、というのが
このディレクトリ構成。

├── api/*
├── batch/*
└── web/*
├── db.yml
├── delete.sh
├── route53.yml
├── run.sh
├── sg.yml
└── vpc.yml

ただ、ちょっといただけないのが、一つのスタックが他のスタックに依存すると、そのスタック単体の更新ができないことがあります。
こんな感じです。
stack.png
次回vpcの作成に実際に使用している定義ファイルを詳しくいていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?