AWS DVA / 第6章

CHAPTER 06 / D3

テストとデプロイ

SAM・CI/CD・コンテナ・段階リリースを理解する。

一読の目安 35分図・具体例・確認問題

01 / CI/CDは工程の責任で読む

コードを更新するだけでは本番に届きません。テスト、成果物の作成、環境への配置、トラフィック切り替え、異常検知時の切り戻しをつなぎます。DVAでは、既存のパイプラインを利用し、設定や失敗を理解する観点を重視します。

コードから本番までの流れCodePipelineが工程をつなぎ、CodeBuildがビルドとテストを実行します。CodeDeployなどが対象へ配置し、CloudWatch等で異常を検知します。ソースGitリポジトリCodeBuildテスト・ビルド成果物S3 / ECRデプロイCodeDeployなどCodePipeline:各工程の進行・連携・承認を管理
コードから本番までの流れ — CodePipelineが工程をつなぎ、CodeBuildがビルドとテストを実行します。CodeDeployなどが対象へ配置し、CloudWatch等で異常を検知します。
サービス・ファイル担当
CodePipelineソース、ビルド、承認、デプロイなどのステージを連携
CodeBuild / buildspec.ymlコマンドの実行、テスト、成果物の出力
CodeDeploy / AppSpecリビジョンの配置、トラフィック移行、フック
S3 / ECRビルド済みファイル / コンテナイメージの保管
CloudFormation / SAM / CDKインフラやサーバーレスリソースをコードで定義

02 / CloudFormation・SAM・CDK

CloudFormationはテンプレートを使ってスタックを作成・更新します。パラメーターで環境差分、Outputsで作成したリソース情報を表します。変更セットは実行前に変更内容を確認するための機能です。ロールバックや削除時の保持方針も確認します。

SAMは、LambdaやAPIなどの定義を短く記述するためのCloudFormation拡張です。CDKはプログラミング言語でインフラを表現し、CloudFormationテンプレートへ合成します。いずれも実行時のIAM権限やアプリのバグを自動で解消するものではありません。

SAM の定義例:template.yaml の主要部分
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Resources:
  HelloFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: python3.13
      Handler: app.handler
      CodeUri: src/
      MemorySize: 256
      Timeout: 10
      AutoPublishAlias: live
      DeploymentPreference:
        Type: Canary10Percent5Minutes

この例はsrc/app.pyにhandlerがある構成を想定しています。AutoPublishAliasは公開バージョンとエイリアスの管理に使い、DeploymentPreferenceで段階移行を指定します。実運用では監視アラームや事前・事後検証も組み合わせます。

コマンド役割
sam validateテンプレートを検証
sam buildコードと依存関係をビルド
sam local invokeコンテナを使ってローカルでイベントを渡す
sam deployCloudFormationを通じてAWSへデプロイ

公式資料:SAM Function リソース

03 / テストの範囲を区別する

種類検証すること例
単体テスト関数や業務ロジックの振る舞い不正な注文数量でエラーを返す。外部依存はモック
統合テストサービス間の接続・権限・データ形式API → Lambda → DynamoDBで保存・取得できる
契約・スキーマのテスト入出力の合意イベントの必須属性、APIレスポンス形式
負荷・性能テスト目標負荷でのレイテンシと容量p95、スロットリング、下流の接続数
デプロイ後検証配置した環境が正常かヘルスチェック、スモークテスト、主要な業務操作

モックは速く安定したテストに便利ですが、本物のIAM、VPC経路、クォータまでは検証しません。sam local invokeが通っても、本番の統合がすべて正しい証明にはなりません。正常系に加え、重複イベント、期限切れトークン、部分失敗、タイムアウトもテストします。

buildspec.yml:Python テスト実行の例
version: 0.2
phases:
  install:
    commands:
      - pip install -r requirements-dev.txt
  build:
    commands:
      - python -m pytest tests --junitxml=report.xml
reports:
  unit-tests:
    files:
      - report.xml
    file-format: JUNITXML

この例はrequirements-dev.txtにpytest等が定義され、tests/が存在する構成です。実際のパイプラインでは成果物のパッケージングや保存先の権限も設定します。テスト失敗は、通常は後続の本番配置へ進めないようにします。

公式資料:CodeBuild の buildspec

04 / リリース方式を要件で選ぶ

方式どう切り替えるか性質
All at once一斉に新版へ速いが影響範囲が大きい。基盤によって停止を伴う
Rolling対象をバッチに分けて順番に更新旧版・新版が混在。更新中の処理容量に注意
Blue/Green旧環境と新環境を用意して切り替える切り戻ししやすい。環境を二つ維持するコスト
Canary少量を新版へ送り、観測後に残りを移す問題の影響を限定しやすい。観測期間と判断基準が必要
Linear一定割合ずつ段階的に移す少しずつ進める。Canaryの一回の少量検証とは区別

Lambdaならバージョンとエイリアスを使い、CodeDeployで加重トラフィックやアラームを組み合わせます。たとえば「10%を5分観測して残りを切り替える」がCanaryの例です。CodeDeployがコードのテストを勝手に完成させるわけではないので、フックやテストの実装も必要です。

Elastic Beanstalkでは、Rolling、Rolling with additional batch、Immutable、Traffic splittingなどを見分けます。Immutableは新しいインスタンス群を用意して検証する方式で、Rolling中の部分更新と区別します。

公式資料:CodeDeploy のデプロイ設定

公式資料:Elastic Beanstalk のデプロイ方式

05 / コンテナと環境別設定

ECRはコンテナイメージのレジストリ、ECSとEKSはコンテナを管理する基盤です。Fargateはサーバーを直接管理せずにコンテナを動かす実行基盤の選択肢です。

概念押さえること
ECSタスク定義イメージ、CPU・メモリ、環境変数、ポート、ロール等を定義
タスクロールコンテナ内のアプリがAWS APIへアクセスする権限
タスク実行ロールECRからの取得やログ送信など、ECS側が起動を支援する権限
イメージのタグ / digest動く成果物を追跡。タグの再利用は設定次第なので、固定タグやdigestで再現性を考える
Readiness / Livenessトラフィックを受けてよいか / プロセスが生きているかを別に確認

devとprodは、アカウント・スタック・設定・参照する秘密などで分離します。API Gatewayのステージとステージ変数、Lambdaエイリアス、AppConfigなどを使うと、コードと環境差分を分けて扱えます。

CloudFormationの動的参照で秘密を参照しても、秘密のローテーションだけで既存リソースの設定が必ず更新されるとは限りません。アプリが実行時に取得する構成とは更新のタイミングが異なります。

リリース練習:障害の影響を小さくする

Lambdaの新版を全員へ出す前に、5分間だけ一部のトラフィックでエラー率を見たい。何を組み合わせる?

考え方・解答例

公開バージョン+エイリアスを使い、CodeDeploy/SAMのCanary設定で一部を新版へ送ります。CloudWatchアラームと検証フックを設定し、失敗時の切り戻し条件を決めます。

06 / 確認問題

QUESTION 6-1 · 単一選択ビルド時のコマンドとテストを定義するファイルは?
解答・解説を読む

正解:B
buildspec.ymlはCodeBuildの処理を記述します。AppSpecはCodeDeployの配置やフックの指定です。

QUESTION 6-2 · 単一選択ECS上のアプリがDynamoDBへGetItemしたい。アプリの権限を設定する先は?
解答・解説を読む

正解:A
アプリのAWS API呼び出しはタスクロールで許可します。タスク実行ロールが担当するイメージ取得などと区別します。

07 / この章の到達点

上のチェックは、このページでの振り返り用です。章単位の進捗は下のボタンで記録できます。

公式資料

内容確認日:2026年11月8日。仕様の詳細や更新情報は、各公式資料で確認できます。

おつかれさまでした。

理解を確認できたら、章の進捗を記録できます。