AWS CodePipeline
ソースコードの変更を検知してビルド、テスト、デプロイを自動実行するフルマネージド CI/CD サービスで、リリースプロセスの完全自動化を実現する
概要
AWS CodePipeline は、ソフトウェアのリリースプロセスを自動化するフルマネージドの継続的デリバリー (CD) サービスです。ソースステージ (CodeCommit、GitHub、S3、ECR)、ビルドステージ (CodeBuild)、テストステージ、デプロイステージ (CodeDeploy、CloudFormation、ECS、S3) を組み合わせたパイプラインを定義し、コードの変更がコミットされるたびに自動的にパイプラインが実行されます。V2 パイプラインでは、パイプラインレベルの変数、Git タグトリガー、手動承認ステージの改善など、より柔軟なワークフローが構築できます。
パイプラインの構造とステージ
CodePipeline のパイプラインは、複数のステージで構成されます。各ステージには 1 つ以上のアクションが含まれ、アクションは順次または並列に実行できます。典型的なパイプラインは、Source (コードの取得) → Build (コンパイルとテスト) → Deploy to Staging (ステージング環境へのデプロイ) → Manual Approval (手動承認) → Deploy to Production (本番環境へのデプロイ) という構成です。手動承認ステージは、本番デプロイ前に人間のレビューを挟むためのゲートです。SNS 通知で承認者にメールを送信し、承認または拒否のアクションを待ちます。パイプラインの実行履歴はすべて記録され、各ステージの成功/失敗、実行時間、アーティファクトの情報を確認できます。
CodeBuild と CodeDeploy との連携
CodeBuild はフルマネージドのビルドサービスで、buildspec.yml にビルドコマンドを定義します。Docker イメージのビルド、ユニットテストの実行、静的解析、アーティファクトの生成などを実行します。ビルド環境は使い捨てのコンテナで、ビルドごとにクリーンな環境が提供されます。CodeDeploy は EC2、ECS、Lambda へのデプロイを自動化するサービスです。EC2 へのデプロイでは、ローリングアップデート、Blue/Green デプロイメント、インプレースデプロイメントの 3 つの戦略を選択できます。ECS へのデプロイでは、Blue/Green デプロイメントが推奨され、新しいタスクセットにトラフィックを段階的に移行し、問題が発生した場合は自動的にロールバックします。Azure の対応サービスは Azure DevOps Pipelines で、同様に CI/CD パイプラインを構築できます。
実務での活用パターン
CodePipeline の実務での活用は、マイクロサービスのデプロイ自動化が最も一般的です。各マイクロサービスに独立したパイプラインを定義し、サービスごとに独立してデプロイできるようにします。CloudFormation と組み合わせれば、アプリケーションコードとインフラの変更を同じパイプラインでデプロイできます。クロスアカウントデプロイも可能で、開発アカウントでビルドしたアーティファクトを、ステージングアカウントと本番アカウントにデプロイするパイプラインを構築できます。CodePipeline の料金は V2 パイプラインで月額 1 USD + アクション実行ごとの従量課金です。CodePipeline の基礎から応用まで、書籍 (Amazon)で体系的に学べます。