AWS認定資格 WEB問題集&徹底解説
DevOpsエンジニア-プロフェッショナル
問題文と選択肢
この要件を満たす、最も効率的な構成はどれですか。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。ECRへのプッシュに反応するAmazon EventBridgeルールを作成し、ターゲットとしてAWS CodeDeployを直接指定してECSクラスターへデプロイする。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、ターゲットをECSサービスとするAWS CodeDeployステージを開始する。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildは、担当者のIAMユーザーのアクセスキーIDとシークレットアクセスキーを環境変数として渡してECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、2つ目のCodeBuildステージで `aws ecs update-service` コマンドを実行してECSサービスを直接更新する。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、AWS CodeCommitのAPIを呼び出して新しいECSタスク定義を自動生成し、AWS CloudFormationアクションでECSサービスへ適用する。
A. AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。ECRへのプッシュに反応するAmazon EventBridgeルールを作成し、ターゲットとしてAWS CodeDeployを直接指定してECSクラスターへデプロイする。
前半のビルドとプッシュは妥当ですが、後半が成立しません。Amazon EventBridge のターゲット一覧に AWS CodeDeploy は含まれていないため、ECR へのプッシュイベントから CodeDeploy を直接呼び出すことはできません(呼ぶなら Lambda 関数などを 1 段挟む必要があります)。
加えて、デプロイをパイプラインの外へ出すと CodePipeline 上で成否の追跡・承認・再実行を一元管理できなくなり、「最も効率的」からも遠ざかります。
B. AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、ターゲットをECSサービスとするAWS CodeDeployステージを開始する。
正解です。CodePipeline のデプロイステージに Amazon ECS(Blue/Green)アクションを置くと、実体である CodeDeploy が新しいタスクセット(Green)を起動し、ロードバランサーのリスナーを切り替えて入れ替えます。
CodeBuild ステージが出力したイメージ定義や appspec.yaml・taskdef.json といった成果物を、そのまま次のステージが受け取る標準的な受け渡しで完結します。
ソース・ビルド・デプロイが 1 本のパイプラインに収まるため、実行状況の可視化も、切り替え失敗時の自動ロールバックも CodeDeploy に任せられます。
C. AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildは、担当者のIAMユーザーのアクセスキーIDとシークレットアクセスキーを環境変数として渡してECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、2つ目のCodeBuildステージで `aws ecs update-service` コマンドを実行してECSサービスを直接更新する。
2 か所で要件に反します。まず、CodeBuild にはサービスロールがあり、ECR の認証はそのロールから取得できます。IAM ユーザーのアクセスキーを環境変数で渡すのは長期認証情報をビルド環境に持ち込むアンチパターンです。
さらに aws ecs update-service はローリング更新を行うコマンドであり、Blue/Green デプロイにはなりません。要件のデプロイ戦略そのものを満たしていません。
D. AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、AWS CodeCommitのAPIを呼び出して新しいECSタスク定義を自動生成し、AWS CloudFormationアクションでECSサービスへ適用する。
AWS CodeCommit は Git リポジトリのサービスであり、ECS のタスク定義を自動生成するような API は存在しません。前提からして成立しない構成です。
また、CloudFormation で ECS サービスを更新した場合の既定の挙動はローリング更新で、Blue/Green にするには別途 CodeDeploy を組み込む構成が必要になります。
タスク定義とイメージの受け渡しは、CodeBuild の出力アーティファクトとデプロイアクションが担うのが本来の役割分担です。
構成図
AWS CodeCommit(master ブランチ) │ 変更を検知 ▼ AWS CodePipeline ├─ CodeBuild ステージ ──docker push──▶ Amazon ECR │ │ 成功後に開始 │ ▼ └─ CodeDeploy ステージ ──トラフィック切替──▶ Amazon ECS サービス
ECS の Blue/Green は CodeDeploy が担当。ビルドの次のステージに置くだけで完結する。
正解への思考ルート
問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。| 要件 | 判断ポイント |
|---|---|
| CodeCommit の master ブランチへの変更を起点にする | 4 つの選択肢とも CodePipeline から CodeBuild を起動するところまでは共通。差が出るのは後半のデプロイ方法 →選択肢(A・B・C・D)は候補 |
| ECR へプッシュするための認証 | CodeBuild のサービスロールから取得するのが正道。IAM ユーザーの長期アクセスキーを渡す構成は選ばない →選択肢(C)を消す |
| ECS へ Blue/Green 戦略でデプロイする | ECS の Blue/Green は CodeDeploy の担当。update-service も CloudFormation の既定更新もローリング更新にしかならない →選択肢(C・D)を消す |
| 最も効率的な構成にする | デプロイを EventBridge で外出しすると成否の追跡とロールバックが分断される。そもそも EventBridge のターゲットに CodeDeploy は無い →選択肢(A)を消す |
| 既存の CI/CD パイプライン 1 本で完結させる | ビルドステージの成功を受けてCodeDeploy ステージが続くだけの構成が最小かつ標準 →選択肢(B)が正解 |
ひっかけポイント
- 4 択とも前半(CodeBuild が CLI ヘルパーで ECR 認証してプッシュ)はほぼ同文。読み分けるべきは後半のデプロイ方法だけで、前半の正しさに引きずられない
- 選択肢 A は EventBridge で疎結合にする現代的な設計に見えるが、EventBridge のターゲットに CodeDeploy は存在しない。ECR プッシュを起点にするなら、ターゲットに指定できるのは CodePipeline や Lambda
- 選択肢 C の aws ecs update-service はローリング更新。「デプロイできる」ことと「Blue/Green でデプロイできる」ことは別物
- 「CLI ヘルパーで ECR の認証情報を取得」という記述自体は正しい。正しい記述が混ざっていても、要件(Blue/Green・長期キーを使わない)を外していれば誤答
出題バリエーション
同じ知識が本番では条件を変えて出題されます。| 問題文がこう変わったら | 正解はこう変わる |
|---|---|
| 「デプロイ戦略はローリング更新でよい」に変わったら | CodePipeline の Amazon ECS 標準デプロイアクション(imagedefinitions.json)で足り、CodeDeploy は不要に。 |
| 「デプロイ先が EC2 やオンプレミスサーバー」に変わったら | CodeDeploy の In-Place / Blue-Green(Auto Scaling グループ)とデプロイグループの設計が論点に。 |
| 「AWS Lambda 関数を段階的に切り替えたい」に変わったら | CodeDeploy の Canary / Linear(エイリアスの重み付け)が正解軸に。 |
| 「ECR へのプッシュを起点にパイプラインを開始したい」に変わったら | EventBridge ルールのターゲットに CodePipeline を指定する(CodeDeploy の直接指定は不可)。 |
| 「切り替え後も一定時間 Blue を残して即座に戻せるようにしたい」に変わったら | CodeDeploy のトラフィック再ルーティングと元タスクセットの終了待機時間の設定が論点に。 |
リファレンス
この問題を解くために必要な知識を扱う公式ドキュメントです。| 知識項目 | 公式ドキュメント |
|---|---|
| EventBridge ルールのターゲットとして指定できるサービス(CodeDeploy は非対応) | Amazon EventBridge のイベントバスターゲット |
この要件を満たす、最も効率的な構成はどれですか。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。ECRへのプッシュに反応するAmazon EventBridgeルールを作成し、ターゲットとしてAWS CodeDeployを直接指定してECSクラスターへデプロイする。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、ターゲットをECSサービスとするAWS CodeDeployステージを開始する。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildは、担当者のIAMユーザーのアクセスキーIDとシークレットアクセスキーを環境変数として渡してECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、2つ目のCodeBuildステージで `aws ecs update-service` コマンドを実行してECSサービスを直接更新する。
- AWS CodePipelineからAWS CodeBuildステージを起動する。CodeBuildはCLIヘルパーを使ってECRの認証情報を取得し、イメージをビルドしてECRへプッシュする。CodeBuildステージの成功後、AWS CodeCommitのAPIを呼び出して新しいECSタスク定義を自動生成し、AWS CloudFormationアクションでECSサービスへ適用する。
次の問題前の問題
会員機能
お役立ち情報
- プレミアム会員のご紹介
- 「徹底解説」のご紹介
- 「模擬試験」のご紹介
- 収録問題と試験ガイドの対応
- 会員機能のご紹介
- おすすめの勉強方法
- AWSサービスの解説
- AWS認定資格の種類・対象者・受験料・合格ライン
- スマホのホーム画面に登録する方法
姉妹サイト
- CLF:AWS 認定クラウドプラクティショナー
- SAA:AWS 認定ソリューションアーキテクト-アソシエイト
- AIF:AWS 認定AIプラクティショナー
- SOA:AWS 認定CloudOpsエンジニア-アソシエイト
- DVA:AWS 認定デベロッパー-アソシエイト
- DEA:AWS 認定データエンジニア-アソシエイト
- MLA:AWS 認定機械学習エンジニア-アソシエイト
- SAP:AWS 認定ソリューションアーキテクト-プロフェッショナル
- DOP:AWS 認定DevOpsエンジニア-プロフェッショナル
- AIP:AWS 認定生成AIデベロッパー-プロフェッショナル
- SCS:AWS 認定セキュリティ-専門知識
- AZ-900:Microsoft Azure Fundamentals
- AI-900:Microsoft Azure AI Fundamentals