手動でポチポチAWSリソースを作るの、最初は楽しい。でも10、20と増えてくると地獄だ。「あれ、このEC2にアタッチしたセキュリティグループどれだっけ?」「本番とステージングで同じ構成なのに微妙に違う…」。これ、全部僕の実体験。
そこでCloudFormation。YAMLかJSONでインフラ構成を定義して、あとはAWSが自動で構築してくれる。「このVPCに、このサブネットで、このEC2を立てて、このセキュリティグループをアタッチして」っていう一連の手順をコード化できる。
CloudFormationに移行して変わったこと:
- 再現性が完全 — 同じ構成を東京リージョンでもバージニアでも一発再現。「あのときどうやったっけ」がなくなる。
- Git管理で安心 — テンプレートをGitで管理すれば、誰がいつ何を変えたか全部トレースできる。インフラの変更履歴がブラックボックスになるのを防げる。
- 失敗しても自動ロールバック — スタック作成に失敗したら、作成したリソースを全部自動で削除してくれる。安心して試行錯誤できる。
- Parametersで環境差分を吸収 — dev/stg/prodで変わる値(インスタンスサイズとか)をパラメータ化。テンプレートは共通、値だけ変える。
正直、YAMLが長くなりがちなのは欠点。深いネストと戦うことになる。最近はCDK(TypeScriptでインフラを書ける)やTerraformという選択肢も増えてる。でも「Infrastructure as Code」の入り口として、CloudFormationはシンプルでいい。
まずはS3バケットひとつをCloudFormationで作ってみるといい。そこから世界が変わる。