AWS CodeDeploy
EC2、Lambda、ECS へのアプリケーションデプロイを自動化するサービスで、ローリング更新やブルー/グリーンデプロイによる安全なリリースを実現する
概要
AWS CodeDeploy は、EC2 インスタンス、オンプレミスサーバー、Lambda 関数、ECS サービスへのアプリケーションデプロイを自動化するフルマネージドサービスです。AppSpec ファイルでデプロイの各フェーズ (BeforeInstall、AfterInstall、ApplicationStart など) にフックスクリプトを定義し、デプロイプロセスを細かく制御できます。ローリング更新、ブルー/グリーンデプロイ、カナリアデプロイなど複数のデプロイ戦略をサポートし、自動ロールバック機能により障害時の復旧を迅速化します。
AppSpec ファイルとライフサイクルフックによるデプロイ制御の設計
CodeDeploy のデプロイプロセスは AppSpec ファイル (appspec.yml) で宣言的に定義します。EC2/オンプレミスデプロイでは、ファイルのコピー先 (files セクション) とライフサイクルイベントごとのフックスクリプト (hooks セクション) を指定します。ライフサイクルイベントは BeforeInstall → Install → AfterInstall → ApplicationStart → ValidateService の順に実行され、各フェーズでシェルスクリプトや PowerShell スクリプトを実行できます。たとえば BeforeInstall でロードバランサーからの登録解除、AfterInstall で設定ファイルの環境変数置換、ValidateService でヘルスチェック API の呼び出しといった処理を組み込むのが一般的です。Lambda デプロイでは AppSpec の構造が異なり、トラフィックの移行方法 (AllAtOnce、Linear、Canary) と BeforeAllowTraffic / AfterAllowTraffic のフックを Lambda 関数として定義します。ECS デプロイではタスク定義の更新とターゲットグループの切り替えが AppSpec で管理されます。Azure DevOps のリリースパイプラインも同様のデプロイ自動化を提供していますが、CodeDeploy は AWS のコンピューティングサービスとネイティブに統合されている点が強みです。
ブルー/グリーンデプロイとカナリアリリースの実践
CodeDeploy のブルー/グリーンデプロイは、新バージョン (グリーン) のインスタンス群を起動し、ヘルスチェックが通過した後にロードバランサーのトラフィックを切り替える戦略です。EC2 の場合、Auto Scaling グループを使って新しいインスタンスを自動プロビジョニングし、切り替え完了後に旧インスタンス (ブルー) を一定時間保持してからターミネートします。この保持期間中にロールバックが必要になった場合、トラフィックをブルーに戻すだけで即座に復旧できます。Lambda と ECS のデプロイでは、カナリアリリースが特に有効です。たとえば Canary10Percent5Minutes は、最初の 5 分間はトラフィックの 10% だけを新バージョンに流し、問題がなければ残り 90% を切り替えます。デプロイ戦略の関連書籍 (Amazon) では、ブルー/グリーンとカナリアの使い分けが実例とともに解説されています。CloudWatch アラームと連携した自動ロールバックを設定しておけば、エラー率やレイテンシーの閾値超過を検知して自動的にデプロイを巻き戻すことも可能です。
CodePipeline 統合と CI/CD パイプラインでの位置づけ
CodeDeploy は単体でも利用できますが、CodePipeline と組み合わせることで、コードのコミットからビルド、テスト、デプロイまでの一連の CI/CD パイプラインを構築できます。典型的な構成では、CodeCommit や GitHub へのプッシュをトリガーに CodeBuild でビルド・テストを実行し、成功したアーティファクトを CodeDeploy でステージング環境にデプロイ、手動承認を経て本番環境にデプロイするフローを定義します。デプロイグループの概念により、同一アプリケーションの複数環境 (dev、staging、production) を管理でき、環境ごとにデプロイ戦略やアラーム設定を変えることが可能です。EC2 インスタンスへのデプロイでは、CodeDeploy エージェントが各インスタンスにインストールされている必要があります。Systems Manager の State Manager を使えば、エージェントのインストールと更新を自動化できます。デプロイの履歴とログは CloudTrail と CloudWatch Logs に記録され、障害発生時の原因調査に活用できます。CodeDeploy 自体の利用料は EC2/オンプレミスデプロイでは無料で、Lambda と ECS のデプロイのみ従量課金が発生します。