対象の読者
- 個人でサービスを作りたいけど、時間がない。でもちゃんとしたネットワークを作りたい人
- 既存のサービスを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
ネットワーク構成

※ 今回紹介するのは下記の図の左側と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
ただ、ちょっといただけないのが、一つのスタックが他のスタックに依存すると、そのスタック単体の更新ができないことがあります。
こんな感じです。
次回vpcの作成に実際に使用している定義ファイルを詳しくいていきます。