AWS CI/CDパイプライン全体図(CodePipeline→CodeBuild→CodeDeploy)

DVA-C02 D3 デプロイ 徹底解説(2025)|CI/CD・SAM・canary/blue-green/rolling

AWS CI/CDパイプライン全体図(CodePipeline→CodeBuild→CodeDeploy)
目次

1. D3「デプロイ」とは — SAAにない開発者視点の独自ドメイン

本記事は「AWS DVA-C02試験対策」シリーズの Vol3 です。
全体像は Vol0 ロードマップ、開発の基礎は Vol1、セキュリティは Vol2 で解説しています。

ここから扱うのは試験の第3ドメイン、D3「デプロイ(Deployment)」 です。
公式試験ガイドにおける出題比率は 24% で、採点50問換算なら約12問を占めます。

DVA-C02 の D3 が他の資格と大きく異なる点は、SAA-C03 に対応ドメインがないことです。
SAA はアーキテクチャ設計を問いますが、DVA の D3 は「作ったコードをどう安全・確実に本番へ届けるか」という 開発者の実務視点 が問われます。
IaC(Infrastructure as Code)の選択、CI/CDパイプラインの組み方、デプロイ手法の使い分け――これらは SAA では出題されない、DVA 独自の試験領域です。

この記事(Vol3)で得られること

  • D3 出題範囲と97問の頻出テーマ(§1)
  • IaCの選択:SAM/CloudFormation/CDKの使い分け方(§2)
  • CI/CDパイプライン:CodePipeline/CodeBuild/CodeDeploy/CodeArtifactの役割(§3)
  • デプロイ手法:canary/blue-green/rolling/in-placeの判断軸(§4)
  • Lambda versions & aliases によるトラフィック制御(§5)
  • API Gatewayステージとステージ変数による環境管理(§6)
  • AppConfig による機能フラグ管理(§7)
  • ロールバック戦略の設計(§8)
  • Amplify/Copilot/SAMによるアプリデプロイ(§9)

D3 の出題範囲を一望する

D3 の 97問は、大きく次の6テーマで整理できます。

#テーマ代表サービス・概念
1IaC の選択SAM / CloudFormation / CDK
2CI/CDパイプラインCodePipeline / CodeBuild / CodeDeploy / CodeArtifact
3デプロイ手法canary / blue-green / rolling / in-place
4Lambda デプロイversions & aliases / トラフィック分割
5API Gateway 管理ステージ / ステージ変数 / カナリアリリース
6設定・機能フラグAppConfig / Parameter Store / Secrets Manager

D3 で最も問われる本質は 「どのデプロイ手法をどの要件で選ぶか」 という判断軸です。
ダウンタイム許容の有無、即時ロールバックの要否、コスト制約――これら3軸を押さえることが D3 攻略の第一歩です。

D3 学習のコツ

  • SAA との違いを意識する:SAAはリージョン選択・耐障害設計が中心。D3は「デプロイの手順・ツール・失敗時の対応」が中心です
  • Code兄弟の役割分担:CodePipeline(オーケストレーション)→ CodeBuild(ビルド)→ CodeDeploy(デプロイ)の流れをセットで記憶しましょう
  • Lambda のバージョン/エイリアス:トラフィック分割 + エイリアスの組み合わせは D3 の頻出テーマ。挙動を正確に理解してください

2. IaC の選択 — SAM / CloudFormation / CDK の使い分け

AWS CI/CDパイプライン全体図
AWS CI/CDパイプライン(CodePipeline→CodeBuild→CodeDeploy)の全体像

インフラをコードで管理する IaC は D3 の土台です。
AWS には SAM・CloudFormation・CDK の3つのアプローチがあり、それぞれ適した用途が異なります。

CloudFormation — AWS IaC の基盤

CloudFormation は AWS が提供する最も基本的な IaC サービスです。
YAML または JSON で テンプレート を記述し、スタック として管理します。

Resources:
  MyBucket:
 Type: AWS::S3::Bucket
 Properties:
BucketName: my-app-bucket
VersioningConfiguration:
  Status: Enabled

CloudFormation の重要概念は次のとおりです。

概念説明
スタックテンプレートから作成されるリソースの集合体
変更セット(Change Set)更新前に差分を確認できる機能(本番反映前の安全確認)
スタックポリシースタック更新時に特定リソースを保護するポリシー
ドリフト検出実リソースとテンプレートの差分を検出する機能
ネストされたスタックスタックから別スタックを参照してモジュール化する手法

変更セット は試験頻出です。
本番への影響を事前にプレビューするため aws cloudformation create-change-set を実行し、確認後に execute-change-set で適用します。
変更セットなしで直接更新すると予期せぬリソース削除を招く恐れがあるため、本番環境の必須プラクティスとして押さえてください。

SAM — サーバーレス特化の IaC

AWS Serverless Application Model(SAM)は CloudFormation の上位変換(Transform)として動作するサーバーレス特化の IaC フレームワークです。

Transform: AWS::Serverless-2016-10-31
Globals:
  Function:
 Timeout: 30
 Runtime: python3.12

Resources:
  MyFunction:
 Type: AWS::Serverless::Function
 Properties:
Handler: app.handler
Events:
  Api:
 Type: Api
 Properties:
Path: /hello
Method: get

SAM の主な特徴と試験ポイントを整理します。

特徴詳細
簡略記法Lambda関数・API Gateway・DynamoDBテーブルをCFnより短く記述できる
sam build依存関係をビルドし、デプロイパッケージを作成
sam deployガイド付きデプロイ(samconfig.toml に設定を保存)
sam local invokeLambda関数をローカルDockerで実行してテスト
sam local start-apiAPI GatewayをローカルでエミュレートしてE2Eテスト
sam pipelineCI/CDパイプラインのブートストラップを自動生成

sam local コマンドによるローカルテストは D3 の頻出出題ポイント です。
本番へデプロイする前に Lambda とAPI Gateway の動作を開発者環境で確認できる点が DVA で重視されます。

CDK — プログラミング言語で IaC を記述

AWS Cloud Development Kit(CDK)は TypeScript・Python・Java・C# 等のプログラミング言語で CloudFormation テンプレートを生成するフレームワークです。

import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';

const fn = new lambda.Function(this, 'MyFunction', {
  runtime: lambda.Runtime.PYTHON_3_12,
  handler: 'app.handler',
  code: lambda.Code.fromAsset('src'),
});
const api = new apigateway.LambdaRestApi(this, 'MyApi', { handler: fn });

CDK の cdk synth で CloudFormation テンプレートを出力し、cdk deploy でデプロイします。
試験では「コードの再利用・型安全性が必要な場合に CDK を選択する」という判断軸を押さえてください。

IaC 選択の判断フロー

要件推奨
サーバーレス(Lambda/API GW)中心・ローカルテストが必要SAM
あらゆるAWSリソースを細かく定義・変更セットで安全管理CloudFormation
TypeScript/Python等で再利用可能なコンポーネントとして管理CDK

3. CI/CDパイプライン — Code兄弟の役割と連携

CodePipeline — パイプラインのオーケストレーター

CodePipeline はソースから本番デプロイまでの ステージ(Stage)とアクション(Action) を定義し、CI/CDを自動化するオーケストレーションサービスです。

代表的なパイプライン構成は次のとおりです。

Source(CodeCommit/S3/GitHub) → Build(CodeBuild) → Test(CodeBuild) → Approve(Manual) → Deploy(CodeDeploy/ECS/CloudFormation)

手動承認アクション は DVA 頻出テーマです。
本番デプロイ前に承認者がコンソールまたは SNS 通知経由で承認・拒否できます。
承認タイムアウト(デフォルト7日)内に応答がない場合、パイプラインは失敗扱いになります。

CodePipeline の主要な試験ポイントを整理します。

ポイント詳細
トリガーEventBridge(CloudWatch Events)でコミットを検知して自動起動
アーティファクトS3バケットにステージ間でアーティファクトを引き渡し
並列アクション同一ステージ内のアクションは並列実行可能
クロスリージョンアクションは別リージョンで実行も可能
通知Amazon SNS / Chatbot で Slack通知と連携

CodeBuild — マネージドビルド環境

CodeBuild はサーバーレスのビルド実行環境です。
ビルド手順は buildspec.yml に定義します。

version: 0.2
phases:
  install:
 runtime-versions:
python: 3.12
  pre_build:
 commands:
- pip install -r requirements.txt
- python -m pytest tests/unit/
  build:
 commands:
- sam build
  post_build:
 commands:
- sam package --s3-bucket $ARTIFACT_BUCKET --output-template-file packaged.yaml
artifacts:
  files:
 - packaged.yaml
cache:
  paths:
 - /root/.cache/pip/**/*

buildspec.yml の phases の順序(install→pre_build→build→post_build)は試験で問われます。
cache を使うと依存パッケージをキャッシュしてビルド時間を短縮できます。

CodeDeploy — デプロイの実行エンジン

CodeDeploy は EC2・Lambda・ECS に対するデプロイを自動化するサービスです。
試験で最も問われるのは デプロイ設定(Deployment Configuration)ライフサイクルフック です。

EC2/オンプレミスの主要ライフサイクルフック

ApplicationStop → DownloadBundle → BeforeInstall → Install →
AfterInstall → ApplicationStart → ValidateService

Lambda デプロイ設定(試験頻出)

設定名トラフィック移行の方式
LambdaAllAtOnce即時全量移行
LambdaCanary10Percent5Minutes10%→(5分後)→90%
LambdaCanary10Percent30Minutes10%→(30分後)→90%
LambdaLinear10PercentEvery1Minute10%ずつ毎分増加
LambdaLinear10PercentEvery10Minutes10%ずつ10分毎増加

Canary は2段階移行、Linear は均等増加、AllAtOnce は即時全量切替です。
「段階的に移行してアラームで自動ロールバックしたい」要件は Canary または Linear を選択します。

CodeArtifact — プライベートパッケージリポジトリ

CodeArtifact は npm・pip・Maven・NuGet 等に対応するプライベートパッケージリポジトリです。
開発チームが内製したライブラリを共有したり、外部パッケージ(PyPI・npmjs.com)をキャッシュして供給安定性を高めたりする用途で使います。

アップストリーム設定 が試験ポイントです。
CodeArtifact ドメイン内のリポジトリを連鎖させることで、「まず社内リポジトリを検索→なければ外部 PyPI から取得」という階層的な解決ができます。
CodeBuild から CodeArtifact を使う場合は aws codeartifact get-authorization-token でトークンを取得し、pip の設定に渡します。

4. デプロイ手法の比較 — canary/blue-green/rolling/in-place

デプロイ手法比較図
デプロイ手法の比較(canary・blue-green・rolling・in-place)

D3 で最も問われるのが 4つのデプロイ手法の使い分け です。
判断軸は「ダウンタイム許容」「即時ロールバックの要否」「コスト」の3軸です。

In-Place(インプレース)

既存のサーバーに直接新バージョンをインストールします。
追加インフラが不要でコストは最小ですが、デプロイ中は一時的に旧バージョンが停止します。

項目内容
ダウンタイムあり(インスタンス単位で一時停止)
ロールバック再デプロイが必要(時間がかかる)
コスト最小(追加インスタンス不要)
適用先EC2(CodeDeploy)

Rolling(ローリング)

インスタンスを バッチ単位 で順次更新します。
Elastic Beanstalk では Rolling デプロイポリシーとして設定できます。
全インスタンスを同時更新しないため部分的にサービスは維持されますが、新旧バージョンが混在する期間を含みます。

項目内容
ダウンタイム最小化(バッチ単位・全体は稼働)
ロールバックバッチ途中でのロールバックは複雑
コスト中(一部インスタンス更新中は容量減)
適用先Elastic Beanstalk / EC2 AutoScaling

Blue/Green(ブルーグリーン)

旧環境(Blue)と新環境(Green)を並列で稼働させ、ロードバランサーのトラフィックを切り替えます。

項目内容
ダウンタイムほぼゼロ(切り替えは秒単位)
ロールバック即時(Blueへ戻すだけ)
コスト高(一時的に2倍のインフラ)
適用先EC2(CodeDeploy)/ ECS / Lambda / Elastic Beanstalk

Blue/Green は「即時ロールバック」が最大のメリットです。
問題発生時に DNS またはロードバランサーの向き先を旧環境に戻すだけで復旧できます。
Lambda のトラフィック分割(後述)も Blue/Green の一形態として試験で問われます。

Canary(カナリア)

新バージョンへのトラフィックを 一部の割合(例: 10%)から開始し、問題がなければ全量へ移行します。

項目内容
ダウンタイムほぼゼロ
ロールバック早期に問題検知・切戻しが迅速
コスト中(段階的にリソース増加)
適用先Lambda(aliases)/ API Gateway / CodeDeploy

カナリアデプロイは CloudWatch アラームと連動した自動ロールバック が設定できます。
エラーレートが閾値を超えた際に CodeDeploy が自動で旧バージョンへ切り戻します。
これが「SLA を維持しながら新バージョンを安全に展開する」要件への回答です。

4手法の比較まとめ

手法ダウンタイムロールバック速度コスト
In-Placeあり遅い(再デプロイ)最安
Rolling最小化
Blue/Greenほぼゼロ最速(即時切替)
Canaryほぼゼロ速い(早期検知)

5. Lambda versions & aliases によるトラフィック制御

Lambda のバージョンとエイリアスは D3 の頻出テーマです。
「コードを変更しても本番への影響をゼロにしつつ段階的にリリースする」仕組みとして機能します。

バージョン(Versions)

Lambda 関数を 発行(Publish) すると番号付きの不変スナップショット(例: arn:...:function:MyFunc:3)が作成されます。
$LATEST は常に最新の未発行コードを指す特殊バージョンです。

バージョン説明
$LATEST最新の作業中バージョン。コード変更が即反映される
1, 2, 3...発行済みの不変スナップショット。コード・設定・環境変数が固定

aws lambda publish-version コマンドでバージョンを発行します。
試験では「発行済みバージョンのコードは変更できない」という不変性が問われます。

エイリアス(Aliases)

エイリアスはバージョンへの名前付きポインタです(例: prod, staging, v3)。

prod エイリアス → バージョン 5 (90%) + バージョン 6 (10%)

エイリアスの主な特徴は次のとおりです。

特徴詳細
バージョン固定ARN のエイリアス部分のみ変更でデプロイ完了(クライアントのARN変更不要)
トラフィック分割2つのバージョンにウェイト(%)を設定してカナリアデプロイ
ProvisionedConcurrency特定バージョン/エイリアスに事前確保した同時実行数を設定
エイリアスのエイリアスは不可エイリアスが指せるのはバージョンのみ(別のエイリアスは不可)

トラフィック分割によるカナリアデプロイ

aws lambda update-alias \
  --function-name MyFunction \
  --name prod \
  --function-version 5 \
  --routing-config '{"AdditionalVersionWeights": {"6": 0.1}}'

この設定で prod エイリアスへのリクエストは 10% がバージョン6、90% がバージョン5に振り分けられます。
新バージョン(v6)の動作が問題なければウェイトを 100% に更新し、切り替えを完了します。

試験で狙われるポイント:エイリアスとバージョンの関係

  • エイリアスは特定バージョンを指す$LATESTを指すことも可能
  • エイリアスが別のエイリアスを指す「エイリアスのエイリアス」は不可
  • ProvisionedConcurrencyは$LATESTには設定不可(バージョンまたはエイリアスのみ)
  • トラフィック分割は最大2バージョンまで(ウェイトは 0.01〜0.99)

6. API Gateway ステージとステージ変数

ステージ(Stage)とデプロイメント(Deployment)

API Gateway では デプロイメントステージ に紐付けて公開します。
ステージは devstagingprod のように環境を分けるために使います。

API → デプロイメント → ステージ(dev/staging/prod)

ステージ変数(Stage Variables) は各ステージ固有の設定値を保持する Key-Value です。

# stagingステージ
TABLE_NAME: "my-table-staging"
LAMBDA_ALIAS: "staging"

# prodステージ
TABLE_NAME: "my-table-prod"
LAMBDA_ALIAS: "prod"

ステージ変数は API Gateway の統合設定内で ${stageVariables.TABLE_NAME} として参照します。
これにより 1つの API 定義で複数環境に対応 できます。試験では「同じAPIで dev/prod を切り分けるには何を使うか」という設問で問われます。

カナリアリリース(Canary Release on API Gateway)

API Gateway ステージ自体にもカナリアリリース設定があります。
ステージを更新する際に「新デプロイメントへのトラフィック割合(%)」を指定し、段階的に移行できます。

aws apigateway update-stage \
  --rest-api-id xxxx \
  --stage-name prod \
  --patch-operations \
 op=replace,path=/canarySettings/percentTraffic,value=10

問題なければ aws apigateway create-deployment で全量適用します。

スロットリング設定

ステージおよびメソッドレベルでリクエストレート(RPS)とバースト上限を設定できます。

設定説明
ステージスロットリングステージ全体の RPS 上限
メソッドスロットリング特定のメソッド(GET /orders 等)に個別の RPS 上限
アカウントレベルリージョンあたりのデフォルト上限(10,000 RPS / バースト5,000)

クォータを超えたリクエストは HTTP 429 Too Many Requests が返されます。
クライアントは指数バックオフ + ジッターで再試行するのが DVA 推奨パターンです(D1 の冪等性とも連動)。

7. AppConfig による機能フラグ管理

AWS AppConfig はアプリケーションの設定と機能フラグを本番コード変更なしに動的に更新するサービスです。
DVA では「コードを再デプロイせずに機能を有効/無効にしたい」要件への回答として AppConfig を選択します。

AppConfig の概念構造

Application(アプリ)
  └── Environment(dev / prod)
  └── Configuration Profile(設定プロファイル)
  └── Deployment Strategy(デプロイ戦略)

デプロイ戦略の種類

戦略説明
AllAtOnce即時全反映。Feature Flagのオン/オフ切替に向く
Linear設定値を均等増加(例: 25%ずつ4分毎)
Exponential指数的に増加(リスクを最小化したい本番設定変更)

Lambda 拡張による取得

Lambda 関数から AppConfig の最新設定を取得するには、AWS AppConfig Lambda 拡張を使います。
Lambda 拡張がサイドカーとしてローカルキャッシュ(TTL 秒)を管理するため、毎回 API を呼び出すよりも低レイテンシ・低コストで設定を参照できます。

import urllib.request

def get_config():
 url = 'http://localhost:2772/applications/MyApp/environments/prod/configurations/FeatureFlags'
 with urllib.request.urlopen(url) as response:
  return response.read()

AppConfig はデプロイ中に CloudWatch アラームを監視 し、エラーレートが上昇した場合に設定変更を自動ロールバックする機能も備えています。

8. ロールバック戦略の設計

デプロイに問題が発生したときの迅速な復旧も D3 の重要テーマです。

CloudFormation のロールバック

CloudFormation はデプロイ失敗時に自動でロールバックしますが、変更セット(Change Set) を使った事前確認でリスクを減らします。

# 変更セット作成(差分プレビュー)
aws cloudformation create-change-set \
  --stack-name my-stack \
  --change-set-name my-change-set \
  --template-body file://template.yaml

# 内容確認後に適用
aws cloudformation execute-change-set \
  --stack-name my-stack \
  --change-set-name my-change-set

ロールバックトリガー では CloudWatch アラームを指定し、スタック更新後のモニタリング期間中にアラームが発火した場合に自動でロールバックさせることができます。

CodeDeploy の自動ロールバック

CodeDeploy のデプロイグループに次の設定を追加することで、問題発生時に自動ロールバックします。

トリガーロールバック条件
デプロイ失敗時ライフサイクルフックのスクリプトがエラー終了
CloudWatch アラーム指定したメトリクスが閾値を超えた場合

Lambda のカナリアデプロイでも同様に CloudWatch アラームと連動したロールバックが設定できます。

Elastic Beanstalk のロールバック

Elastic Beanstalk では Swap Environment URLs 機能を使って Blue/Green 環境の URL を入れ替えます。
問題発生時は再度 Swap することで旧環境へ即時切り戻しできます。

また Rolling with additional batch デプロイポリシーでは、バッチ更新が失敗した場合にそのバッチのみロールバックが発生します。

手法別ロールバック速度比較

手法ロールバック速度方法
Blue/Green最速(秒単位)ロードバランサーの向き先を切替
Canary(Lambda)速いエイリアスウェイトを 0% に設定
Rolling中程度更新済みバッチを再デプロイ
In-Place遅い旧バージョンを再デプロイ

9. Amplify / Copilot / SAMによるアプリデプロイ

SAM — サーバーレスアプリのライフサイクル管理

§2 で触れた SAM ですが、デプロイ観点でさらに重要な機能があります。

sam pipeline init コマンドは CodePipeline・CodeBuild・CodeDeploy を使った CI/CD パイプラインの設定ファイルを自動生成します。
ステージ(beta/prod 等)ごとに IAM ロールと設定を分離した構成を生成するため、セキュリティベストプラクティスに沿ったパイプラインを素早く構築できます。

SAM で定義したサーバーレスアプリケーションの SAM CLI と CodePipeline の組み合わせは DVA の標準的なサーバーレス CI/CD パターンとして押さえてください。

Amplify — フルスタックアプリのデプロイ

AWS Amplify は React・Next.js・Vue・Angular 等のフロントエンドフレームワークと AWS バックエンドを統合してデプロイするプラットフォームです。

機能詳細
ホスティングGit ブランチと連動した自動 CI/CD(push → ビルド → デプロイ)
バックエンドCognito・API GW・DynamoDB・S3 をコード定義で自動プロビジョニング
環境管理dev・staging・prod を独立した Amplify 環境として管理
カスタムドメインRoute 53 または外部 DNS との統合

Amplify ホスティングは ブランチ = 環境 という1対1対応が特徴です。
main ブランチへのマージで本番に自動デプロイするという GitHub Actions ライクなワークフローを AWS 完結で実現します。

Copilot — ECS アプリのデプロイ

AWS Copilot は ECS(Fargate)へのアプリデプロイを CLI で簡略化するツールです。

copilot app init my-app
copilot env init --name prod
copilot svc init --name api --svc-type "Load Balanced Web Service"
copilot svc deploy --env prod

Copilot のサービスタイプは試験で問われることがあります。

サービスタイプ用途
Load Balanced Web ServiceALB 経由の公開 Web サービス
Backend Service内部サービス(Service Discoverで連携)
Worker ServiceSQS キューから非同期処理
Scheduled JobEventBridge ルールで定期実行

Copilot は内部的に CloudFormation スタックを生成するため、既存の IaC パイプラインとも統合できます。

D3 試験直前チェックリスト

  • SAM の Transform: AWS::Serverless-2016-10-31 を理解し、sam local invokeの用途を説明できる
  • CodePipeline/CodeBuild/CodeDeploy の役割分担(オーケストレーション/ビルド/デプロイ)を言える
  • Lambda デプロイ設定(AllAtOnce/Canary/Linear)の違いを問題文の要件から即選択できる
  • Blue/Greenは「即時ロールバック必須」要件、Canaryは「段階移行+アラーム連動」要件に対応
  • Lambda versions は不変・aliases はポインタ・トラフィック分割は最大2バージョンまで
  • API Gatewayステージ変数で1つのAPIを複数環境に対応させる仕組みを説明できる
  • AppConfig は「コード変更なし」で設定を動的更新する要件に対応
  • CloudFormation 変更セットで本番反映前に差分確認するフローを理解している

10. CertTrend LMS で400問チェック

DVA-C02 D3「デプロイ」は試験問題数が97問と多く、CodeDeploy の設定・Lambda バージョン/エイリアス・デプロイ手法の使い分けは毎回複数問出題されます。
概念理解だけでなく 問題文の状況から最適解を選ぶ練習 が合否を分けます。

11. 実務で深掘り — D3デプロイの本番運用記事

試験対策で習得した CI/CD・デプロイ設計を実務レベルに引き上げるための本番運用解説記事です。