AWS CloudFormation

JSON または YAML テンプレートで AWS インフラをコードとして定義・管理する Infrastructure as Code サービスで、リソースの作成から削除までをスタック単位で一括管理する

概要

AWS CloudFormation は、AWS リソースのプロビジョニングと管理をコードで自動化する Infrastructure as Code (IaC) サービスです。JSON または YAML 形式のテンプレートファイルに VPC、EC2、RDS、Lambda などの AWS リソースとその設定を宣言的に記述し、スタックとしてデプロイします。CloudFormation はテンプレートに記述されたリソース間の依存関係を自動的に解決し、適切な順序でリソースを作成します。変更セット機能により、テンプレートの変更がどのリソースに影響するかを事前に確認でき、意図しない変更を防止できます。ドリフト検出機能は、手動で変更されたリソースとテンプレートの差分を検出します。スタックの削除時にはすべてのリソースが自動的にクリーンアップされるため、環境の作成と破棄を繰り返す開発・テストフェーズで特に有用です。CloudFormation 自体の利用料金は無料で、作成されたリソースの料金のみが発生します。

CloudFormation テンプレートの構造

CloudFormation テンプレートは Parameters、Mappings、Conditions、Resources、Outputs の主要セクションで構成されます。Parameters はデプロイ時に外部から値を渡すための入力パラメータで、環境名やインスタンスタイプなどを動的に設定できます。Mappings はリージョンや環境に応じた値のルックアップテーブルで、AMI ID のリージョン別マッピングなどに使用します。Conditions は条件に基づいてリソースの作成を制御し、本番環境のみ Multi-AZ を有効にするといった設定が可能です。Resources はスタックに含める AWS リソースの定義で、テンプレートの中核部分です。Outputs はスタック作成後に参照可能な値 (エンドポイント URL、リソース ARN など) を定義します。Fn::Ref、Fn::GetAtt、Fn::Sub などの組み込み関数を使って、リソース間の参照や文字列の動的生成が可能です。

Azure Resource Manager との比較

Azure で CloudFormation に対応するサービスは Azure Resource Manager (ARM) テンプレートおよび Bicep です。CloudFormation は JSON と YAML の両方をサポートするのに対し、ARM テンプレートは JSON のみ、Bicep は独自の DSL (Domain Specific Language) を使用します。Bicep は ARM テンプレートの JSON より簡潔な構文で記述でき、CloudFormation の YAML テンプレートに近い可読性を実現しています。CloudFormation の特徴として、変更セット (Change Set) による変更の事前プレビューが標準機能として提供されており、ARM テンプレートの What-If 操作に相当します。スタックセット機能を使えば、複数の AWS アカウントとリージョンに同一テンプレートを一括デプロイでき、大規模な組織でのインフラ管理に適しています。AWS SAM (Serverless Application Model) は CloudFormation の拡張で、サーバーレスアプリケーションのデプロイを簡素化する高レベルの抽象化を提供します。