AWS CloudFormation で実践する Infrastructure as Code - テンプレート設計とスタック管理
テンプレートでインフラを定義し、変更セットで影響範囲を事前確認する。ドリフト検出で構成の逸脱を検出し、スタックセットで Organizations 全体に一括デプロイする手法を紹介します。
CloudFormation の概要
CloudFormation は AWS リソースをテンプレートで定義し、スタックとしてプロビジョニングする IaC サービスです。手動でのリソース作成と比較して、環境の再現性、バージョン管理、自動化を実現します。SAM は CloudFormation の拡張で、サーバーレスアプリケーションの定義を簡素化します。
テンプレート設計とスタック管理
テンプレートは Parameters (最大 200 個) でデプロイ時の入力値、Mappings で環境ごとの設定値、Conditions で条件分岐を定義します。1 スタックあたり最大 500 リソースを管理でき、超過する場合はネストスタックで分割します。変更セットはスタック更新前に作成し、追加・変更・削除されるリソースをプレビューします。Replace (置換) が発生するリソースは一時的にサービス断が生じるため、変更セットでの確認が重要です。ネストスタックは VPC、セキュリティグループ、データベースなどのコンポーネントを個別のテンプレートに分割し、親テンプレートから参照します。
ドリフト検出とスタックセット
ドリフト検出はスタックのリソースがテンプレートの定義から逸脱していないかを検出します。手動でのコンソール操作やスクリプトによる変更がドリフトとして検出され、テンプレートとの差分を確認できます。定期的なドリフト検出を EventBridge スケジュールで自動化し、構成の逸脱を早期に発見します。スタックセットは複数のアカウントとリージョンに同一テンプレートを一括デプロイする機能で、 Organizations との統合で OU 単位のデプロイを自動化します。新しいアカウントが OU に追加されると、スタックセットが自動的にデプロイされ、ガードレールの適用漏れを防止します。 IaC について体系的に学びたい方は、関連書籍 (Amazon)も参考になります。
CloudFormation の料金と効率化
CloudFormation 自体に追加料金は発生しません。コストはプロビジョニングされる AWS リソースの利用料金のみです。サードパーティリソースの管理にはリソースあたりのハンドラー操作で課金されます。テンプレートの開発効率を高めるには、CloudFormation Linter (cfn-lint) でテンプレートの構文エラーを事前検出し、変更セットでデプロイ前に影響範囲を確認します。ネストされたスタックで共通リソース (VPC、セキュリティグループ) を再利用し、テンプレートの重複を排除します。Rain CLI でテンプレートのフォーマットとデプロイを効率化できます。
まとめ
CloudFormation はテンプレートベースの IaC でインフラの再現性と自動化を実現するサービスです。変更セットでデプロイ前に影響範囲を確認し、ドリフト検出で構成の逸脱を検出します。スタックセットで Organizations 全体にテンプレートを一括デプロイし、マルチアカウント・マルチリージョンのインフラ管理を自動化します。