SAP-C02-046 · 理解確認
理解確認:CI/CD Pipeline Architecture
継続的インテグレーション / 継続的デリバリー / AWS CodePipeline / AWS CodeBuild / AWS CodeDeploy / パイプラインステージ · 12問
多数の開発者が同じアプリケーションを開発している。変更を頻繁に共有 リポジトリへ統合し、マージ後すぐに自動ビルドと単位テストを実行して問題を早期検出したい。該当するプラクティスとして最も適切なのはどれか。
B. ブルー/グリーンデプロイ
C. コードとしてのインフラストラクチャ(IaC)
D. 設定管理
答えと解説
答え:A
継続的統合は、変更を頻繁に統合し、自動ビルド / テストで早期フィードバックを得るプラクティスです。
企業はすべてのコード変更についてビルド・自動化されたテスト・ステージングデプロイまで自動化したい。一方、本番へのリリースには変更マネージャーの承認を必須とする。最も適切なプラクティスはどれか。
B. 継続的受け渡し
C. 継続的デプロイ
D. ローリングデプロイ
答えと解説
答え:B
継続的受け渡しでは変更を本番へリリース可能な状態まで継続的に準備し、本番への昇格前に手動承認を置きます。
各コミットは自動でビルドとテストを通過し、失敗時はリリースを停止する。成功した改訂は人の承認を挟まず本番へ自動反映し、変更を小さく頻繁に届ける方針である。このリリース方式として最も適切なのはどれか。
B. 継続的受け渡し
C. 継続的デプロイ
D. コードとしてのインフラストラクチャ(IaC)
答えと解説
答え:C
自動ビルドとテストを通過した変更を、人の承認なしで本番まで自動リリースする方式は継続的デプロイです。本番前に明示的な承認を残す場合は継続的受け渡しとして設計します。
送信元、ビルド、テスト、承認、デプロイというリリースプロセスを複数ステージとして定義し、各処理を適切なアクション提供側へ実行させたい。中心となるAWSサービスはどれか。
B. AWS CodeDeploy
C. AWS Systems Manager
D. AWS CodePipeline
答えと解説
答え:D
AWS CodePipelineはパイプライン、ステージ、アクションを用いてリリースワークフローをオーケストレーションします。
パイプラインの前段から受け取った入力アーティファクトをコンパイルし、単位テストを実行して、後続のデプロイで利用するアーティファクトを生成したい。最も適切なAWSサービスはどれか。
B. AWS CodePipeline
C. AWS CodeDeploy
D. AWS CloudFormation StackSets
答えと解説
答え:A
AWS CodeBuildは完全に マネージドなビルドサービスで、ビルド・テスト・アーティファクト生成を担当します。
検証済みのアプリケーション改訂をAmazon EC2、AWS Lambda、Amazon ECSなどの対応対象へデプロイする責任を持たせたい。最も適切なサービスはどれか。
B. AWS CodeDeploy
C. AWS CodeBuild
D. AWS Config
答えと解説
答え:B
AWS CodeDeployはアプリケーション改訂を対応するコンピューティングプラットフォームへデプロイするサービスです。
CI/CDパイプラインにおけるAWSサービスの責任として正しいものを3つ選択してください。
B. AWS CodePipelineがすべてのソースコードを直接コンパイルする
C. AWS CodeBuildはビルドやテストを実行してアーティファクトを生成できる
D. AWS CodeBuildが本番への承認を必ず管理する
E. AWS CodeDeployはアプリケーション改訂のデプロイを担当する
F. AWS CodeDeployがリリースパイプライン全体のステージを定義する
答えと解説
答え:A / C / E
CodePipelineはオーケストレーション、CodeBuildはビルド / テスト、CodeDeployはデプロイを主に担当します。
CodePipelineでSource → Build → Deployのパイプラインを構成している。
Buildステージでは、同じ入力アーティファクトに対して単体テストとセキュリティスキャンを並列実行し、両方が成功してからDeployステージへ進めたい。最も適切な設計はどれか。
B. Buildステージ内の2アクションへ同じ
runOrderを設定し、Deployを後続ステージに配置するC. BuildとDeployを同一ステージの同じ
runOrderへ配置し、すべてを並列実行するD. 単体テストとセキュリティスキャンを別ステージへ分けない限り、CodePipelineでは並列実行できない
答えと解説
答え:B
CodePipelineでは、同一ステージ内で同じrunOrderを持つアクションを並列実行できます。後続ステージは前のステージが正常に完了してから進むため、独立した検証を並列化しつつ、両方の成功をデプロイ開始条件にできます。
CodePipelineのステージ / アクション設計について正しいものを3つ選択してください。
B. ステージを環境や制御境界として利用できる
C. 1つのステージには1つのアクションしか配置できない
D. ステージ内のアクションは設定により直列または並列に実行できる
E. パイプラインは一連のステージとしてリリースプロセスを表現できる
F. 本番デプロイには必ず手動承認が必要である
答えと解説
答え:B / D / E
ステージは論理境界として利用でき、複数アクションを含められます。アクションは直列または並列実行が可能です。
自動化されたビルドとテストには成功しているが、コンプライアンス要件により本番リリース前に担当者の明示的承認が必要である。最も適切な設計はどれか。
B. 承認要件を無視して継続的デプロイにする
C. テストステージを削除して本番デプロイを速める
D. CodePipelineに本番前の手動承認ゲートを配置する
答えと解説
答え:D
本番への人承認が要件なら、パイプラインに承認アクションを配置して技術検証とリリース認可を分けます。
ソースコードから本番デプロイまでを標準化するパイプラインについて、適切な設計を4つ選択してください。
B. CodeBuildで入力アーティファクトからビルド / テストを行い出力アーティファクトを生成する
C. ビルドに失敗しても同じアーティファクトを本番へデプロイする
D. 前段アクションの出力アーティファクトを後段アクションの入力として利用する
E. テスト済み改訂とは別の未検証改訂を本番用に再作成する
F. 検証済み アプリケーション改訂をデプロイアクションへ渡す
答えと解説
答え:A / B / D / F
パイプラインではビルド済み・検証済みアーティファクトを後続アクションへ渡し、同じリリースフローでデプロイまで進めます。
本番システムのリリースプロセスに、コード変更が頻繁、ビルドと自動化されたテストを自動化、本番リリースには人承認が必要、承認後は検証済みアプリケーション改訂を実行時へデプロイする、という要件がある。適切な判断を3つ選択してください。
B. 継続的統合でビルド / テストを早期に実行する
C. 本番承認があるためCI/CDは利用できない
D. CodePipelineを使用せずCodeDeployだけでビルド / テスト / 承認をすべて実行する
E. CodePipelineからCodeBuildやデプロイアクションをオーケストレーションする
F. 人承認がある場合は継続的デプロイと呼ぶ
答えと解説
答え:A / B / E
CIで変更を早期検証し、継続的受け渡しとしてリリース可能な状態まで自動化しながら本番前に承認を置きます。CodePipelineが各ステージ / アクションをオーケストレーションします。