AWS認定資格 WEB問題集&徹底解説
ソリューションアーキテクト-プロフェッショナル
AWSサービスの一つであるAWS CloudFormationはどんな内容なのでしょうか?また、AWS認定資格のソリューションアーキテクト-プロフェッショナル(SAP)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
1. サービス概要
AWS CloudFormation は、AWS リソースのプロビジョニングと管理をコードとして定義・自動化するInfrastructure as Code(IaC)サービスです。 JSON または YAML 形式のテンプレートでインフラ構成を宣言的に記述し、スタックという単位でリソースをまとめてデプロイ・更新・削除できます。
CloudFormation 自体の利用料金は無料(作成されたリソースに通常料金が発生)で、依存関係の自動解決、ロールバック、ドリフト検出、Change Sets によるプレビューなど、運用を支える機能が揃っています。
主なユースケースは、環境の再現性確保(開発・ステージング・本番の統一)、CI/CD パイプラインへの組み込み、マルチアカウント展開(StackSets)、IaC の標準基盤としての活用です。
2. 主な特徴と機能
2.1 テンプレートの構造(セクション)
- AWSTemplateFormatVersion: テンプレートのバージョン(現在は "2010-09-09")。
- Description: テンプレートの説明文。
- Parameters: スタック作成時に入力する変数(実行時にカスタマイズ)。
SSM Parameter StoreやAWS::SSM::Parameter型で動的参照も可能。 - Mappings: 静的な Key-Value マップ(リージョン別 AMI ID など)。
- Conditions: 条件式。環境(dev/prod)によるリソース作成の有無をコントロール。
- Resources(唯一の必須セクション): デプロイするAWSリソースを定義。
- Outputs: スタックが出力する値(他スタックや組み込み関数から参照可能)。
2.2 スタックの作成・更新・削除
- スタック作成時にロールバックが有効な場合、リソース作成失敗時に成功済みリソースも自動削除。
- 更新はChange Sets(変更セット)で事前確認してから実行するのがベストプラクティス。
- スタック削除でリソース全体を削除。削除保護(Termination Protection)を有効化すると誤削除を防止。
- DeletionPolicy: 各リソースの削除時動作を Retain / Delete / Snapshot から選択。
2.3 Change Sets(変更セット)
スタックに適用する変更を事前にプレビューできる機能です。実際の変更適用前に「何が変わるか(Modify/Add/Remove)」を確認し、意図しない削除などのリスクを回避します。
2.4 ドリフト検出(Drift Detection)
コンソールや API で手動変更されたリソースが CloudFormation テンプレートの期待値と乖離(ドリフト)していないかを検出します。コンプライアンス管理や IaC の一貫性維持に重要です。
2.5 Nested Stacks(入れ子スタック)と StackSets
- Nested Stacks: 親スタックから別のテンプレートを呼び出し、再利用可能なモジュールを構成。
AWS::CloudFormation::Stackリソースを使用。 - StackSets: 1つのテンプレートを複数のAWSアカウント・リージョンへ一括デプロイ。Organizations と統合すると OU 単位で展開可能。
2.6 EC2 ヘルパースクリプト(cfn-init / cfn-signal)
- cfn-init: EC2 起動時に
AWS::CloudFormation::Initで定義した設定(パッケージ、ファイル、コマンド等)を適用。 - cfn-signal: EC2 の設定完了を CloudFormation へ通知。Creation Policy と組み合わせてスタック完了をブロックし、成功シグナルを待つ。
2.7 カスタムリソース・マクロ・Guard
- カスタムリソース(Custom Resources): Lambda や SNS を介して、CloudFormation ネイティブでサポートされていない処理をスタック内で実行。
- マクロ(Macros): Lambda で CloudFormation テンプレートを動的に変換・拡張する仕組み。
- CloudFormation Guard(cfn-guard): テンプレートやスタックに対してポリシーベースのコンプライアンスチェックを実行するオープンソースツール。
3. アーキテクチャおよび技術要素
- テンプレート(YAML/JSON)を作成し、コンソール・CLI・SDK・パイプラインからスタック作成を指示する。
- CloudFormation がテンプレートを解析し、リソース間の依存関係グラフを構築する。
- 依存関係に従い、リソースを正しい順序でプロビジョニング(並列化できるものは並列に実行)する。
- リソース作成に失敗した場合、ロールバックポリシーに従い作成済みリソースを削除する。
- 完了後、Outputs に定義した値を出力。他スタックが
Fn::ImportValueで参照可能。
CI/CD との統合では、CodePipeline → CloudFormation デプロイアクションによって IaC の完全自動化が可能です。
4. セキュリティと認証・認可
- IAM によるアクセス制御: スタックの作成・更新・削除を IAM ポリシーで制御。最小権限の原則を適用。
- サービスロール(CloudFormation Service Role): スタック操作に使う IAM ロールを明示指定。ユーザーが直接リソースを操作するより広い権限を CloudFormation に委任できる。
- スタックポリシー(Stack Policy): スタック内の特定リソースへの更新を制限し、意図しない変更を防止。
- 機密情報の保護: テンプレートへの平文記載は禁止。AWS Secrets Manager / SSM Parameter Store(SecureString)を
{{resolve:ssm-secure:...}}で動的参照する。 - 削除保護: 重要スタックに対して Termination Protection を有効化。
- CloudTrail 連携: CloudFormation API 操作(スタック作成・更新等)を CloudTrail で監査。
5. 料金形態
- CloudFormation サービス自体は無料。
- プロビジョニングされるリソース: EC2 / RDS / S3 等の各サービス料金が通常通り発生。
- StackSets の追加料金: StackSets でのオペレーション数・アカウント数に応じた課金なし(リソース料金のみ)。ただし Operations に対して一部シナリオで追加料金が発生する場合があるため公式確認を推奨。
6. よくあるアーキテクチャ・設計パターン
- IaC + バージョン管理: テンプレートを Git で管理し、PR レビューを経てデプロイ。
- 環境ごとのパラメータ化: dev/stg/prod で同一テンプレートを使い Parameters を切り替え。
- Nested Stacks によるモジュール化: ネットワーク / セキュリティ / アプリ層をスタック分割して再利用。
- StackSets によるマルチアカウント展開: Organizations の OU 単位でガバナンスポリシーや基盤リソースを一括展開。
- CI/CD 統合: CodePipeline + CloudFormation アクション(Create/Deploy/Execute Change Set)で完全自動化。
- カスタムリソース活用: Route 53 の DNS 検証など、CloudFormation 外の処理を Lambda カスタムリソースで組み込む。
7. 設定・デプロイ手順(ハンズオン例)
- YAML でテンプレートを作成し、
Parameters・Resources・Outputsを定義する。 - コンソールまたは
aws cloudformation create-stackでスタックを作成する。 - スタック更新時は先に
create-change-setで変更セットを作成し、内容を確認してからexecute-change-setで適用する。 - スタックの「イベント」タブで進捗を確認し、失敗時はエラーメッセージをトラブルシュートする。
- EC2 上のアプリ設定には
cfn-initとcfn-signal(+ CreationPolicy)を組み込む。 detect-stack-driftでドリフトを定期検出し、手動変更を防ぐ。- 不要なスタックを削除する前に Termination Protection が無効であることを確認する。
8. 試験で問われやすいポイント
8.1 テンプレートの必須セクション
Q: CloudFormation テンプレートで唯一の必須セクションは?
A: Resources セクション。他のセクション(Parameters/Outputs等)は任意。
Q: Parameters と Mappings の違いは?
A: Parameters は実行時に入力する動的な値、Mappings はテンプレートに埋め込まれた静的な Key-Value マップ。
8.2 Change Sets(最頻出)
Q: スタック更新前に変更の影響を事前確認するには?
A: Change Sets(変更セット)を作成して内容を確認し、問題なければ実行する。
8.3 ドリフト検出
Q: CloudFormation テンプレートと実際のリソース設定の乖離を検出する機能は?
A: Drift Detection(ドリフト検出)。コンソールまたは detect-stack-drift API で実行する。
8.4 Nested Stacks と StackSets
Q: テンプレートを再利用可能なモジュールとして組み合わせる方法は?
A: Nested Stacks(入れ子スタック)。親スタックが AWS::CloudFormation::Stack で子テンプレートを参照する。
Q: 1つのテンプレートを複数アカウント・複数リージョンへ同時展開するには?
A: StackSets を使用する(Organizations と統合して OU 単位での展開も可能)。
8.5 cfn-init と cfn-signal
Q: EC2 起動時にソフトウェアをインストールし、完了後にスタック作成を完了させるには?
A: cfn-init で設定を適用し、cfn-signal + CreationPolicy でシグナルを受け取るまでスタック完了をブロックする。
8.6 セキュリティ
Q: テンプレートに機密情報(パスワード等)を平文で書かずに参照するには?
A: SSM Parameter Store(SecureString)または Secrets Manager を {{resolve:ssm-secure:...}} / {{resolve:secretsmanager:...}} で動的参照する。
Q: スタックの誤削除を防ぐには?
A: Termination Protection(削除保護)を有効化する。
Q: 特定リソースの削除時にスナップショットを取得したい場合は?
A: そのリソースに DeletionPolicy: Snapshot を設定する。
8.7 CloudFormation vs CDK vs SAM
- CloudFormation: JSON/YAML による宣言的 IaC の基盤。CDK/SAM は最終的に CloudFormation テンプレートを生成する。
- AWS CDK: Python/TypeScript 等のプログラミング言語でインフラを定義し、CloudFormation に変換。
- AWS SAM(Serverless Application Model): Lambda/API Gateway/DynamoDB 等のサーバーレスリソースを簡潔に定義する CloudFormation の拡張。
8.8 料金
Q: CloudFormation の利用料金は?
A: CloudFormation サービス自体は無料。作成されるAWSリソースに通常料金が発生する。