AWS認定資格 WEB問題集&徹底解説

DevOpsエンジニア-プロフェッショナル

正解 B問題
分野1:SDLC の自動化 タスクステートメント1.2:CI/CD パイプラインへの自動テストの統合
合格に向けて、もっと深く学習する
豊富な問題と詳細なAWSサービス解説を、24時間無料でお試しいただけます
プレミアム会員機能を無料で試す ❯
問題文と選択肢
ある保険会社の開発チームでは、AWS CodeCommitで管理するリポジトリに対し、mainブランチへのマージ前に必ずプルリクエストを作成しレビューを受けるルールを運用しています。レビュー担当者は、プルリクエストが作成・更新されるたびにAWS CodeBuildで静的セキュリティスキャンを自動実行し、その合否をプルリクエストのコメントにバッジとして自動反映してほしいと考えています。

CodeBuildによる検証を効率的に自動化するには、どのように実装すればよいですか。
  • プルリクエストの作成・更新に反応するAmazon EventBridgeルールを作成し、ターゲットをAWS Lambda関数にする。この関数がCodeBuildのビルドを起動し、完了を待ってからプルリクエストにビルド結果のコメントを追加する。
  • プルリクエストの作成・更新に反応するAmazon EventBridgeルールを作成し、ターゲットをAWS CodeBuildにする。さらに、CodeBuildのビルド成功・失敗イベントに反応する2つ目のEventBridgeルールを作成し、ターゲットをAWS Lambda関数にして、その関数がプルリクエストにビルド結果のコメントを追加する。
  • CodeCommitのリポジトリトリガーでプルリクエストの作成時にAmazon SNSへ通知を送信するよう設定し、通知を受けた担当者が手動でCodeBuildのビルドを開始したうえで、ビルド結果を手動でプルリクエストにコメントする。
  • 5分間隔のスケジュールルールでAWS Lambda関数を定期実行し、プルリクエストの作成・更新有無をチェックしてCodeBuildのビルドを起動する。この関数はビルドの完了を待ってからプルリクエストにビルド結果のコメントを追加する。
解説 頻出度★★★★
この問題は、「プルリクエストのたびに自動検証 × 結果を PR コメントへ自動反映 × 効率的」の要件で、起動も結果通知もイベント駆動にし、Lambda にビルドの完了を待たせない構成を選べるかがポイント

A. プルリクエストの作成・更新に反応するAmazon EventBridgeルールを作成し、ターゲットをAWS Lambda関数にする。この関数がCodeBuildのビルドを起動し、完了を待ってからプルリクエストにビルド結果のコメントを追加する。

動作はしますが、効率の面で劣ります。この構成では Lambda 関数がスキャンの完了までポーリングしながら待ち続けることになり、待っている時間もそのまま課金されます。
さらに Lambda には最大 15 分の実行時間制限があるため、スキャンが長引くと結果を投稿する前に関数がタイムアウトします。
EventBridge は CodeBuild プロジェクトを直接ターゲットにできるので、起動役として Lambda を挟む必然性もありません

正解

B. プルリクエストの作成・更新に反応するAmazon EventBridgeルールを作成し、ターゲットをAWS CodeBuildにする。さらに、CodeBuildのビルド成功・失敗イベントに反応する2つ目のEventBridgeルールを作成し、ターゲットをAWS Lambda関数にして、その関数がプルリクエストにビルド結果のコメントを追加する。

正解です。CodeCommit はプルリクエストの作成・更新をPR 状態変更イベントとして EventBridge に送出し、EventBridge は CodeBuild プロジェクトを直接ターゲットに指定できます。起動のために Lambda を挟む必要がありません。
ビルドの成功・失敗も CodeBuild がビルド状態変更イベントとして送出するため、2 つ目のルールでそれを拾い、Lambda がプルリクエストへコメントを投稿します。
各コンポーネントが短時間で終わって待機しないため、実行時間の上限にも課金にも無理がなく、疎結合で拡張しやすい構成です。

C. CodeCommitのリポジトリトリガーでプルリクエストの作成時にAmazon SNSへ通知を送信するよう設定し、通知を受けた担当者が手動でCodeBuildのビルドを開始したうえで、ビルド結果を手動でプルリクエストにコメントする。

要件は「自動実行」と「自動反映」ですが、この案は担当者の手動操作が 2 回入るため要件そのものを満たしません。
仕組みの面でも成立しません。CodeCommit のリポジトリトリガーはブランチやタグ(参照)の作成・更新・削除といったプッシュ系イベントが対象で、プルリクエストの作成・更新を検知することはできません。PR のイベントを扱えるのは EventBridge 経由だけです。

D. 5分間隔のスケジュールルールでAWS Lambda関数を定期実行し、プルリクエストの作成・更新有無をチェックしてCodeBuildのビルドを起動する。この関数はビルドの完了を待ってからプルリクエストにビルド結果のコメントを追加する。

イベント駆動できる場面でのポーリングは、DevOps の設計として原則的に誤りです。5 分間隔では最大 5 分の検知遅れが生じ、プルリクエストが 1 件も無い時間帯にも関数が動き続けて無駄なコストがかかります。
加えて選択肢 A と同様に Lambda がビルドの完了を待つため、実行時間の上限と待機課金の問題も抱えます。

構成図

CodeCommit プルリクエスト(作成・更新)
   │ PR 状態変更イベント
   ▼
EventBridge ルール1 ──ビルドを起動──▶ AWS CodeBuild(静的スキャン)
                                          │ ビルド状態変更イベント
                                          ▼
                                    EventBridge ルール2 ──▶ AWS Lambda
                                                               │ PR へコメント投稿
                                                               ▼
                                                     CodeCommit プルリクエスト
これだけ覚える(記憶フック)
Lambda を「完了待ち」に使ったら負け。起動も結果通知も EventBridge で連鎖させる。
正解への思考ルート 問題文から要件を抽出し、選択肢の適否を判断するのがポイントです。
要件 判断ポイント
プルリクエストの作成・更新のたびに自動でスキャンする PR の作成・更新を検知できるのは EventBridge の PR 状態変更イベントのみ。リポジトリトリガーはプッシュ系専用で、定期ポーリングは検知が遅れる
→選択肢(C・D)を消す
CodeBuild による検証を効率的に自動化する EventBridge は CodeBuild プロジェクトを直接ターゲットにできる。起動役の Lambda は余分な部品
→選択肢(A)を消す
合否をプルリクエストのコメントへ自動反映する CodeBuild のビルド状態変更イベントを 2 つ目のルールで拾い、Lambda がコメント投稿 API を呼ぶ
→選択肢(B)が正解
Lambda にビルドの完了を待たせない 待機中も課金され、最大 15 分の実行時間制限に当たる。完了待ちを書いている構成は効率の観点で落とす
→選択肢(A・D)を消す
人手を介さずレビュー担当者にバッジを見せる 通知を受けた担当者が手動でビルドとコメントを行う運用は自動化の要件そのものに反する
→選択肢(C)を消す
ひっかけポイント
  • 選択肢 A は実際に動く構成であり、明らかな誤りではない。本問は「動くか」ではなく「効率的か」で切る問題だと読み取る必要がある
  • 「Lambda がビルドの完了を待ってからコメントする」は A と D の両方に仕込まれた同じ罠。待機時間も課金対象で、15 分の上限があるという一点で両方まとめて落とせる
  • 選択肢 C の CodeCommit リポジトリトリガーはプッシュ(参照の作成・更新・削除)が対象で、プルリクエストのイベントは扱えない。手動運用である以前に仕組みとして成立しない
  • EventBridge のターゲットには CodeBuild プロジェクトを直接指定できる。「ビルドを起動するための Lambda」が書かれている選択肢は、まずこの点を疑う
出題バリエーション 同じ知識が本番では条件を変えて出題されます。
問題文がこう変わったら 正解はこう変わる
「スキャンが失敗したらマージ自体を禁止したい」に変わったら 承認ルールテンプレートと、Lambda による PR 承認状態の更新を組み合わせる構成が正解軸に。
「ビルドの成功時だけコメントさせたい」に変わったら 2 つ目のルールのイベントパターンで detail の build-status を SUCCEEDED に絞るのが答えに。
「リポジトリが GitHub に変わった」なら CodeConnections 経由の接続や GitHub の Webhook でのビルド起動が論点に。
「検証結果をチャットにも通知したい」に変わったら Amazon SNS と AWS Chatbot(Amazon Q Developer in chat applications)を挟む構成に。
多数のリポジトリで同じ検証を回したい」に変わったら 1 つのルールで複数リポジトリを対象にし、ビルド時にイベントの詳細から対象を切り替える設計が論点に。
関連サービスの解説 Amazon EventBridge
AWS CodeBuild
AWS CodeCommit
AWS Lambda
リファレンス この問題を解くために必要な知識を扱う公式ドキュメントです。
知識項目 公式ドキュメント
EventBridge ルールのターゲットとして CodeBuild プロジェクトを直接指定できること Amazon EventBridge のイベントバスターゲット
+ 質問 / コメント
解答・解説に疑問がある場合や、よりよい解説がある場合など、お気軽にコメントください。ただし、短文コメントは表示されません。また、中傷などコメントの内容によっては、会員機能を停止させて頂きます。教え学び合える場になれば嬉しいです。(コメント投稿にはログインが必要です)
正答率 0%
No.9 解説
ある保険会社の開発チームでは、AWS CodeCommitで管理するリポジトリに対し、mainブランチへのマージ前に必ずプルリクエストを作成しレビューを受けるルールを運用しています。レビュー担当者は、プルリクエストが作成・更新されるたびにAWS CodeBuildで静的セキュリティスキャンを自動実行し、その合否をプルリクエストのコメントにバッジとして自動反映してほしいと考えています。

CodeBuildによる検証を効率的に自動化するには、どのように実装すればよいですか。
  • プルリクエストの作成・更新に反応するAmazon EventBridgeルールを作成し、ターゲットをAWS Lambda関数にする。この関数がCodeBuildのビルドを起動し、完了を待ってからプルリクエストにビルド結果のコメントを追加する。
  • プルリクエストの作成・更新に反応するAmazon EventBridgeルールを作成し、ターゲットをAWS CodeBuildにする。さらに、CodeBuildのビルド成功・失敗イベントに反応する2つ目のEventBridgeルールを作成し、ターゲットをAWS Lambda関数にして、その関数がプルリクエストにビルド結果のコメントを追加する。
  • CodeCommitのリポジトリトリガーでプルリクエストの作成時にAmazon SNSへ通知を送信するよう設定し、通知を受けた担当者が手動でCodeBuildのビルドを開始したうえで、ビルド結果を手動でプルリクエストにコメントする。
  • 5分間隔のスケジュールルールでAWS Lambda関数を定期実行し、プルリクエストの作成・更新有無をチェックしてCodeBuildのビルドを起動する。この関数はビルドの完了を待ってからプルリクエストにビルド結果のコメントを追加する。

(会員限定)当問題の評価をお願いします。改善に活用します。