3つの要素
-
Templates (テンプレート)
リソースを定義したファイル。JSON(.json), YAML(,yaml), TXT(.txt)から選べる。 -
Stacks (スタック)
テンプレートで定義され、CloudFormationによって作成されたリソース群。テンプレートを変更しCloudFormationでデプロイすることでリソースの変更が可能。 -
Change sets (変更セット)
デプロイ済みのスタックに対してテンプレートを修正した際にCloudFormation側が差異を表示してくれる。
基本的な挙動
- テンプレートを作成し、ローカルかS3に保存
- AWSコンソールかAPIかCLIでテンプレートを指定して実行
- CloudFormationがテンプレートを読み込んでリソースを作成
- (テンプレートを変更した場合)作成中にエラーが起きればそれまで作成したものを削除して、変更実施前の状態にロールバック
注意点
- アカウントのサービス上限数(quota)や変更不可のサービス、権限の不足等はCloudFormationは考慮せずデプロイを実行する。エラーがあればエラーを吐き出す。
- 更新する際は既存のリソースの運用やリソースの存在そのものに影響がないか十分注意する。
他サービスとの連携
- Git
テンプレートファイル(CloudFormation template file)とスタックデプロイメントファイル(stack deployment file)を用意する。これらに変更があればCloudFormationは自動的にスタックを更新する。Gitを使えばプルリクエストやバージョン管理の集中管理ができるようになる。AWS公式ドキュメントではGit syncってのを使えばできると書いてあった。Git syncはCodeConnectionsでアクセスできると書いてあった。GitHub, GitHub Enterprise, GitLab, BitBucket, GitLab self-managedのリポジトリをサポートしてると書いてあった(2024年9月18日時点)。https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/git-sync.html
テンプレートの作成手段
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html
-
AWS Application Composer
AWSの物理設計図か論理図を作る感じで、視覚的に設計図を作れる。コンソールで見た感じだと、ビジュアルエディタでポチポチ作ったものはjsonやyamlで同期的に見れるようになってた。 -
AWS CloudFormation Designer
Application Composerがこれの改良版なので基本的にApplication Composerを使えばいいっぽい。 - テキストエディタ
jsonかyamlで、テキストエディタで作る。 - IaC generator
自分がやりたいこと
ネットワークはネットワークスタック、プロキシサーバとそのサブネットやルートテーブルはプロキシサービススタックみたいに、機能ごとに管理スタックを分けて変更管理しやすくしたい。ネストってのがあったからそれが使えるかも。
テンプレートについて
テンプレートのうちResources
セクションのみ必須項目。
テンプレートの保管場所
- S3バケット
スタック作成・変更時にS3URLを指定できる。コンソールやCLIでローカルのテンプレートを指定(CloudFormationにアップロード)した場合、自動的にS3バケットが作成されてそこに保管される。また、実行ユーザに権限があることが前提。 - Gitリポジトリ
Git syncを使う。本記事の他のサービスとの連携を参照。
テンプレートのバリデーション
CLIでvalidate-template
コマンドを使うかコンソールでテンプレートを指定すれば、テンプレートのJSON又はYAML構文バリデーションができる。
リンター(CloudFormation Linter (cfn-lint))やフォーマッター(CloudFormation Rain (rain fmt))がある。
テンプレート作成に役立つページ
-
Template formats
フォーマット概要ページ。 -
Template sections
テンプレートで設定するセクションの詳細が書いてあるページ。 -
Template snippets
テンプレのスニペット集。 -
Working with Microsoft Windows stack templates
SharepointサーバスタックなどMicrosoft関連で使えるテンプレ集。 -
AWS resource and property types reference
全AWSリソースのプロパティが載ってる。
まだ読んでないページ
Get values stored in other services using dynamic references
Get exported outputs from a deployed CloudFormation stack
Define parameter input with CloudFormation-supplied parameter types
Use CloudFormation-supplied resource types in stack templates
Managing AWS resources as a single unit with AWS CloudFormation stacks
Security in AWS cloudFormation
Monitoring CloudFormation and Git sync events with EventBridge