【くらうどふぉーめーしょん】

CloudFormation とは?

最終更新:
💡 AWSインフラの「設計図」をコードで書いて自動構築するサービス

AWSのインフラをテンプレートファイル(JSON/YAML)で定義し、その内容どおりにリソースを作成・更新・削除するIaCサービス。VPC・EC2・RDSなどのAWSリソースをコードでまとめて管理できる。

📌 このページのポイント
AWS CloudFormationの仕組み テンプレート (YAML / JSON) EC2: t3.micro RDS: MySQL S3: my-bucket 送信 Cloud Formation スタック作成 依存関係を自動解決 構築 AWSリソース EC2インスタンス RDSデータベース S3バケット Infrastructure as Code:コードでインフラを定義・管理
CloudFormation:テンプレートからAWSリソースを自動構築
ひよこ ひよこ
CloudFormationって何のために使うの?AWSコンソールでポチポチ作ればよくない?
ペンギン先生 ペンギン先生
手動で作ると「本番環境とステージング環境で設定が違う」「誰がいつ何を変更したかわからない」という問題が起きやすいんだ。CloudFormationのテンプレートはテキストファイルだから、Gitなどでバージョン管理して変更履歴を追えるし、同じテンプレートから同じ構成を繰り返し作れるんだよ。
ひよこ ひよこ
Terraformと何が違うの?
ペンギン先生 ペンギン先生
CloudFormationはAWSが提供するサービスで、スタックの状態はAWS側で管理される。TerraformはAWS以外のクラウドにも使えるツールで、実際のリソースと設定を対応づける「状態(state)」を自分たちで保管する必要があり、チームではリモートに置くことが勧められているよ。AWSだけを使うのか、複数のクラウドを同じ道具で管理したいのかが、選ぶときの目安の1つだね。
ひよこ ひよこ
スタックって何?
ペンギン先生 ペンギン先生
テンプレートから作ったリソースをまとめて管理する単位だよ。スタックを削除すると、既定では中のリソースも一緒に削除されるから、実験環境の後片付けが楽なんだ。ただし例外があって、DeletionPolicyにRetainを指定したリソースは残るし、RDSのDBインスタンス(クラスターに属さないもの)は既定でスナップショットを取ってから削除される。中身が残っているS3バケットは削除に失敗するよ。
ひよこ ひよこ
テンプレートを直して更新するとき、気をつけることはあるの?
ペンギン先生 ペンギン先生
変えるプロパティによって、更新のされ方が3種類あるんだ。止めずに更新、一時的な中断を伴う更新、そして「置き換え(Replacement)」。置き換えは新しいリソースを作って古いほうを削除するから、たとえばRDSのDBインスタンスでDBNameのように置き換えになるプロパティを変えると、先にスナップショットを取っていなければデータを失うよ。どれに当たるかはプロパティごとに公式リファレンスに書かれているし、変更セットを作れば、実行前に置き換えや削除が起きるかを確認できるんだ。
もっと詳しく知りたい人へ

変更セットで内容を確認すれば、スタックの更新は必ず成功するの?

必ずではありません。AWSの公式ドキュメントは、変更セットはスタックの更新が成功することを保証しないと明記しています。変更セットの作成時には、プロパティの書き方の誤り、リソース名の衝突、サービスクォータの上限などよくある失敗原因が検査されますが、カスタムリソースの処理や各サービス固有の制約のように、実行してみないとわからない原因で失敗することは残ります。変更セットは「何が変わるか」を確かめる道具として使い、失敗時のロールバックやデータのバックアップは別に準備しておきます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CloudFormation」って出てきたら「AWSのインフラをコードで定義して自動構築するサービスのことだな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cloud Formation」 = クラウドの構成・形成
💬 Cloud(クラウド)+ Formation(形成・編成)。雲の形を作るように、クラウドリソースの構成を定義するイメージだよ

参考資料

← 用語集にもどる