変更要約: in-scopeサービス網羅(軸B): s1にCodeArtifact/CloudShell、s3にAmplifyの定義・役割・選択基準を追記。
4.2IaC:CloudFormation と SAM
CloudFormation による宣言的なインフラ定義(スタック・テンプレート)と、サーバーレス向けの簡潔記法 AWS SAM、再現性のあるデプロイの利点を理解します。
インフラを手作業で作らず、テンプレートとしてコード化するのが Infrastructure as Code(IaC) です。AWS では CloudFormation が中核で、サーバーレスには SAM が便利です。
4.2.1CloudFormation と SAM
- CloudFormation:YAML/JSON の宣言的テンプレートでリソース群(スタック)をまとめてデプロイ。
- AWS SAM:Lambda/API Gateway/DynamoDB などサーバーレス向けの簡潔記法。内部で CloudFormation に変換される。
- IaC により再現性・バージョン管理・レビューが可能になり、環境差異(ドリフト)を抑えられる。
CloudFormation テンプレートは複数のセクションで構成されます。Parameters で入力値(環境名など)を受け取り、Resources でリソースを宣言、Outputs でスタックの出力(エンドポイント等)を公開、Mappings/Conditions で環境差を吸収します。変更を適用する前に 変更セット(Change Set) で「何が作成/更新/削除されるか」を確認でき、事故を防げます。手作業の変更でテンプレートと実体がずれた状態が ドリフト で、ドリフト検出で発見できます。SAM は AWS::Serverless::Function などの短い記法でサーバーレスを表現し、デプロイ時に通常の CloudFormation へ展開されます。SAM CLI を使えば sam local でローカル実行・sam deploy でデプロイができ、内部では成果物を S3 にアップロードしてからスタックを更新します。同種のツールに、汎用プログラミング言語でテンプレートを生成する CDK もあります。
| 項目 | CloudFormation | SAM |
|---|---|---|
| 対象 | あらゆる AWS リソース | サーバーレス中心 |
| 記法 | 詳細な YAML/JSON | 簡潔な短縮記法 |
| 実行 | スタックをデプロイ | CloudFormation に変換 |
テンプレートを使いこなす要素も押さえます。値を参照する 組み込み関数 には、論理 ID を参照する Ref、属性を取得する Fn::GetAtt、文字列に変数を埋め込む Fn::Sub、リストを連結する Fn::Join などがあります。リージョンやアカウント ID は 擬似パラメータ(AWS::Region 等)で得られます。大規模構成はテンプレートを分割する ネストスタック や、出力を別スタックで参照する クロススタック参照(Export/ImportValue) で整理します。重要リソースを誤って消さないために、DeletionPolicy(例:Retain)や スタックポリシーで保護します。デプロイ失敗時は既定で自動ロールバックされ、スタックは前の安定状態へ戻ります。SAM には共通設定をまとめる Globals や、よく使う権限を簡単に付与できる ポリシーテンプレートがあり、サーバーレスのテンプレートをさらに短く保てます。
シナリオ:Lambda+API Gateway+DynamoDB を一括デプロイ。 これらは SAM の短い記法でテンプレート化すると最小限の行数で書けます。本番反映前に 変更セットで差分(追加/削除されるリソース)を確認し、CI/CD パイプラインから sam deploy で再現性のあるデプロイを行います。手動変更によるドリフトは検出で監視します。
Q. CloudFormation と SAM の使い分けは? 汎用は CloudFormation、サーバーレスを簡潔に書くなら SAM(CloudFormation に変換)。Q. 変更を安全に適用するには? 変更セットで差分を事前確認。Q. ドリフトとは? テンプレートと実体のずれ。検出で発見。
「インフラを宣言的にコード化=CloudFormation(スタック)」「サーバーレスを簡潔に定義=SAM(→CloudFormation へ変換)」「適用前の差分確認=変更セット」「テンプレートとのずれ=ドリフト」 は DVA で頻出です。SAM CLI でローカルテストやデプロイができます。
4.2.2この節のまとめ
- CloudFormation=宣言的テンプレートでスタックをデプロイ、適用前は変更セットで差分確認
- SAM=サーバーレス向け簡潔記法(CloudFormation に変換)、ずれはドリフト検出
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. インフラを宣言的なテンプレートで定義し、リソースのスタックとしてデプロイする AWS のサービスはどれですか?
Q2. Lambda や API Gateway などのサーバーレスアプリを簡潔に定義でき、CloudFormation に変換されるのはどれですか?
Q3. IaC(テンプレート)でインフラを管理する利点として最も適切なものはどれですか?

