ある企業がAWS CodePipelineでマルチステージのCI/CDパイプラインを構築している。パイプラインには複数の独立したビルドジョブ(フロントエンドビルドとバックエンドビルド)があり、両方を並列で実行してビルド時間を短縮したい。さらに、両方のビルドが成功した場合のみデプロイステージに進めるようにしたい。この要件を実現するために正しい設定を2つ選択してください。
- A. 並列実行にはCodePipeline V2タイプのパイプラインが必要で、V1パイプラインでは同一ステージに複数アクションを置いても順次実行になる
- B. フロントエンドビルドとバックエンドビルドをそれぞれ別のステージに配置して順次実行させる
- C. 同一ステージ内に複数のアクション(フロントエンドビルドとバックエンドビルド)を追加し、runOrderを同じ値(例: 1)に設定して並列実行させる
- D. Lambda関数を使ってフロントエンドとバックエンドのCodeBuildプロジェクトを非同期に起動し、両方の完了を待つ
- E. 同一ステージ内のすべてのアクションが成功しない限り、次のステージへは遷移しないため、同一ステージに並列アクションを置けば両方成功でデプロイステージに進む制御が実現できる
解答と解説を見る
正解: C, E
CodePipelineでは同一ステージ内に複数のアクションを配置し、runOrderを同じ値に設定することで並列実行が可能である。デフォルトではrunOrderが1の全アクションが並列実行される。ステージ内のすべてのアクションが成功してはじめて次のステージへ遷移するため、フロントエンドとバックエンドの両ビルドを同一ステージの並列アクションとして配置すれば、どちらか一方が失敗してもデプロイステージへは進まない。Bは別ステージへの配置であり順次実行になるため、ビルド時間短縮にならない。Dはシンプルなパイプライン設計の原則に反し、Lambda管理という追加の運用負荷が発生する。AはV1/V2で並列実行の可否が変わるという記述は誤りである。CodePipelineでは古くからrunOrderによる並列実行をサポートしており、V1でも同一ステージ内の並列アクションは正しく動作する(V2で追加された機能はトリガーやGit変数など別の機能である)。