AWS CodePipeline で構築する CI/CD パイプライン - ソースからデプロイまでの自動化
ソースの変更検出からビルド・テスト・デプロイまでを自動化する。V2 トリガーフィルター、手動承認アクション、クロスアカウントデプロイの設計を紹介します。
CodePipeline の概要
CodePipeline はソースコードの変更からデプロイまでを自動化する CI/CD サービスです。ソースステージで GitHub や CodeCommit の変更を検出し、ビルドステージで CodeBuild がテストとビルドを実行し、デプロイステージで CodeDeploy や CloudFormation がデプロイを実行します。
パイプライン設計
パイプライン V2 タイプではトリガーフィルターで特定のブランチやファイルパスの変更のみでパイプラインを起動できます。手動承認アクションをデプロイステージの前に配置し、SNS 通知で承認者にメールを送信します。クロスアカウントデプロイでは、パイプラインのアーティファクト S3 バケットのバケットポリシーと KMS キーポリシーで本番アカウントのロールにアクセスを許可し、デプロイアクションで本番アカウントのロールを AssumeRole します。
デプロイ戦略とロールバック
CodePipeline のデプロイステージでは、 CodeDeploy と連携してブルー/グリーンデプロイやカナリアデプロイを実現できます。 ECS のブルー/グリーンデプロイでは、新しいタスクセットを起動してテストトラフィックで検証し、問題がなければ本番トラフィックを切り替えます。切り替え後も旧タスクセットを一定時間保持するため、問題発生時は即座にロールバックできます。 Lambda のカナリアデプロイでは、新バージョンに 10% のトラフィックを流して CloudWatch Alarms でエラー率を監視し、閾値を超えた場合に自動ロールバックします。 CloudFormation のデプロイアクションでは、変更セットの作成と実行を分離し、手動承認で変更内容を確認してからデプロイを実行するフローが推奨されます。 CodePipeline のパイプライン設計を網羅的に学ぶなら、技術書 (Amazon)を参照してください。
パイプラインの監視と障害対応
パイプラインの実行状態は EventBridge イベントとして発行されるため、失敗時に SNS 経由で Slack に通知したり、Lambda で自動リトライを実行したりできます。CloudWatch メトリクスでパイプラインの実行時間、成功率、各ステージの所要時間を可視化し、ビルド時間の増加傾向やデプロイ頻度の変化を追跡します。障害の多くはビルドステージでの依存関係エラーやデプロイステージでの権限不足に起因するため、buildspec.yml の依存関係キャッシュ設定と IAM ロールの権限範囲を定期的に見直すことが重要です。パイプライン V2 ではパイプラインレベルの変数を定義でき、環境名やデプロイ先リージョンをパラメータ化して複数環境で同一パイプライン定義を再利用できます。
CodePipeline の料金
CodePipeline V2 タイプはアクション実行回数に基づく従量課金で、最初の 100 回/月は無料、以降は 1 回あたり約 0.002 ドルです。V1 タイプはパイプライン 1 本あたり月額約 1.00 ドルの固定料金です。新規作成はすべて V2 タイプが推奨されます。CodeBuild のビルド料金 (build.general1.small で 1 分あたり約 0.005 ドル) と CodeDeploy の料金 (EC2 デプロイは無料) が別途発生します。パイプラインの実行頻度が低い場合は V2 の従量課金が有利で、1 日数十回実行する場合は V1 の固定料金の方が安価になるケースもあります。
まとめ
CodePipeline はソースコードの変更からデプロイまでを自動化する CI/CD オーケストレーションサービスです。V2 タイプのトリガーフィルターで細かい起動条件を制御し、CodeDeploy 連携でブルー/グリーンやカナリアデプロイを実現し、EventBridge 連携でパイプラインの監視と障害通知を自動化できます。手動承認アクションを組み合わせることで、自動化と人間の判断のバランスを取ったデプロイフローを構築できます。