AWS Certified Developer - Associate (DVA-C02) #10 Domain 3-2 デプロイ — IaC とサーバーレスデプロイ

読了 5分

#9 CI/CD でビルド・デプロイツールを整理したので、今回は インフラそのものをコードで定義する IaC (Infrastructure as Code) です。コンソールで手作業で作ったインフラは再現・バージョン管理が困難です。AWS の IaC の軸は CloudFormation であり、その上にサーバーレス専用の SAM、そしてプラットフォーム抽象化である Elastic Beanstalk があります。

CloudFormation #

宣言的テンプレート (YAML/JSON) で AWS リソースを定義すると、CloudFormation がそのまま作成・更新・削除します。生成されたリソースのまとまりが スタック (Stack) です。

テンプレート構造 #

セクション役割
Resources唯一の必須セクション。作成するリソースの定義
Parametersデプロイ時の入力値 (環境・インスタンスタイプなど)
Mappingsキー・値のルックアップ (リージョン別 AMI など)
Conditions条件付きリソース作成
Outputs他のスタックが参照する出力値 (export)
Transformマクロ・SAM の指定

組み込み関数もよく出ます。!Ref (参照)、!GetAtt (属性の取得)、!Sub (文字列置換)、!FindInMap (マッピング照会)、!ImportValue (他スタック出力の参照)。

スタック運用 #

  • チェンジセット (Change Set) — スタックを更新する前に 何が変わるかを事前に確認 します。意図しない置き換え・削除を防ぎます。
  • ドリフト検出 (Drift Detection) — コンソールで手動で変更された部分 (テンプレートとの差分) を検出します。
  • ロールバック — 作成/更新の失敗時に自動的に以前の状態へ戻します。
  • ネストされたスタック (Nested Stack) — 共通の構成要素を再利用可能な下位スタックに分離します。
  • DeletionPolicy — スタック削除時にリソースを保持 (Retain) したり、スナップショット (Snapshot) を残したりします。DB のように失ってはいけないリソースに使います。

試験の落とし穴: 「スタック更新前に影響範囲を確認」の答えは チェンジセット です。「削除しても DB は残したい」の答えは DeletionPolicy: Retain です。

SAM — サーバーレスアプリケーションモデル #

SAM は サーバーレスデプロイを単純化した CloudFormation の拡張 です。テンプレートの先頭に Transform: AWS::Serverless-2016-10-31 を置くと SAM の短縮リソースタイプを使えます。

SAM リソース対応
AWS::Serverless::FunctionLambda 関数 + ロール + イベントソース
AWS::Serverless::ApiAPI Gateway
AWS::Serverless::SimpleTableDynamoDB テーブル
  • sam build — 依存関係を含むビルド。
  • sam deploy — CloudFormation でパッケージング・デプロイ (内部的に S3 アップロード + スタック作成)。
  • sam local — Lambda・API を ローカルで実行・デバッグ (Docker を使用)。
  • SAM テンプレートはデプロイ時に通常の CloudFormation に変換されます。

核心: サーバーレスアプリ (Lambda + API Gateway + DynamoDB) を少ないコードで定義・デプロイ・ローカルテスト するなら SAM です。SAM は #11 のカナリア/線形デプロイと自動ロールバックも AutoPublishAliasDeploymentPreference で簡単にサポートします。

Elastic Beanstalk #

コードをアップロードすると EC2・ELB・ASG・ヘルスモニタリングを自動的にプロビジョニング するプラットフォーム抽象化 (PaaS) です。開発者はインフラではなくアプリケーションに集中します。内部的には CloudFormation でリソースを作成します。

デプロイポリシー #

Beanstalk のデプロイポリシーは試験の定番です。

ポリシー動作ダウンタイム追加コスト
All at once全体を一度に置き換えありなし
Rolling一部のバッチずつ置き換えなし (容量低下)なし
Rolling with additional batch新しいバッチを追加しながら置き換えなし (容量維持)一時的な追加インスタンス
Immutable新しいインスタンスグループにデプロイ後に切り替えなし一時的に 2 倍
Blue/Green (環境の入れ替え)新環境にデプロイ後 URL をスワップなし2 倍

核心の区別: 最も安全でロールバックが容易なのは Immutable/Blue-Green (新しいインスタンスにデプロイ)、最も速いがダウンタイムがあるのは All at once容量を維持しながら段階的に置き換えるのは Rolling with additional batch です。

  • .ebextensions.config ファイルで環境・リソースをカスタマイズします。
  • Beanstalk は EC2・コンテナベースの Web アプリに適しており、純粋なサーバーレス (Lambda) には SAM がより合います。

IaC 選択クイック表 #

要件正解
任意の AWS リソースをコードでCloudFormation
サーバーレス (Lambda/API GW/DynamoDB) を簡潔にSAM
インフラを気にせず Web アプリだけ載せるElastic Beanstalk
スタック更新の影響を事前確認チェンジセット
ローカルで Lambda をテストsam local

試験の出題パターン #

  • 「サーバーレスアプリを少ないコードで定義・デプロイ。」 → SAM
  • 「Lambda をローカルでデバッグ。」 → sam local invoke
  • 「スタックを更新する前に変更影響を確認。」 → チェンジセット
  • 「スタック削除時に RDS は保持。」 → DeletionPolicy: Retain
  • 「インフラ管理なしで Web アプリを素早くデプロイ。」 → Elastic Beanstalk
  • 「ダウンタイムなしで安全に、ロールバックを容易にデプロイ。」 → Immutable / Blue-Green
  • 「リージョン別に異なる AMI を選択。」 → Mappings + !FindInMap

まとめ #

この記事の要点:

  • CloudFormationResources のみ必須。チェンジセット (影響確認)・ドリフト・ネストスタック・DeletionPolicy
  • SAM — サーバーレス用 CFN 拡張。sam build/deploy/local、カナリアデプロイ内蔵
  • Elastic Beanstalk — PaaS。デプロイポリシー (All at once/Rolling/Immutable/Blue-Green) のトレードオフ
  • 安全・ロールバック優先は Immutable/Blue-Green、速度優先は All at once

次へ — Domain 3-3 デプロイ戦略 #

ツールを整理したので、最後は 無停止デプロイ戦略そのもの です。#11 デプロイ戦略 では、in-place vs blue/green、カナリアと線形デプロイ、Lambda エイリアス・バージョンと加重ルーティング、そして CodeDeploy/SAM の自動ロールバックを整理します。

X