ある企業が AWS で稼働するアプリケーションのデプロイを自動化したいと考えています。現在は開発者が手動で EC2 インスタンスにアプリケーションをデプロイしており、環境間(開発、テスト、本番)での設定の差異が問題になっています。インフラをコードとして管理し、Git のコードプッシュから本番デプロイまでを完全自動化したいと考えています。最も包括的な CI/CD パイプラインの設計はどれですか?
- A. GitHub などのソースリポジトリでコードを管理し、コードプッシュをトリガーに CodePipeline が起動する。CodeBuild でユニットテスト・セキュリティスキャン・Docker イメージのビルドを自動実行し、CodeDeploy で Blue/Green デプロイを実施する。インフラは CloudFormation または Terraform でコード管理し、各環境のパラメーターを環境変数とパラメーターストアで管理する
- B. AWS Elastic Beanstalk のデプロイ機能を使い、.ebextensions フォルダーでインフラ設定をコード管理する
- C. GitHub Actions で CI を実装し、本番デプロイは手動承認後に AWS CLI で実行する
- D. Jenkins を EC2 にインストールし、Git リポジトリからコードをプルして手動でデプロイスクリプトを実行する
解答と解説を見る
正解: A
AWS の CI/CD スタック(GitHub などのソース + CodePipeline + CodeBuild + CodeDeploy)はパイプラインとして統合でき、ソースコードのプッシュから本番デプロイまでを自動化できます。CodePipeline は GitHub や S3 をソースプロバイダとして利用でき、CodeBuild でテストとビルドを自動化し、CodeDeploy の Blue/Green でリリースのリスクを最小化します。CloudFormation/Terraform でインフラをコードとして管理し、Systems Manager パラメーターストアで環境ごとの設定を管理することで、環境間の差異問題を解決します。 D: Jenkins の EC2 インストールはサーバーの管理負荷が生じ、手動デプロイスクリプトは「完全自動化」の要件を満たしません。 C: GitHub Actions は CI として有効ですが、本番デプロイに手動承認と AWS CLI を使う方法は完全自動化ではなく、環境設定のコード管理も部分的な対応です。 B: Elastic Beanstalk は有効ですが、複雑なマルチ環境の CI/CD パイプラインや高度なデプロイ戦略(Blue/Green)の管理には CodePipeline の方が柔軟性が高いです。
📚 関連サービスの解説: AWS CodePipeline ・ AWS CodeBuild