AWS CodeDeploy のデプロイ戦略 - EC2・ECS・Lambda へのブルーグリーンデプロイ
CodeDeploy による EC2、ECS、Lambda へのデプロイ戦略、ブルーグリーンデプロイの設計、自動ロールバックの設定を解説します。
CodeDeploy の対応プラットフォームとデプロイタイプ
CodeDeploy は EC2/オンプレミス、ECS、Lambda の 3 つのプラットフォームに対応するデプロイサービスです。EC2/オンプレミスではインプレースデプロイ (既存インスタンスを順次更新) とブルーグリーンデプロイ (新しいインスタンスグループを作成して切り替え) を選択できます。ECS ではブルーグリーンデプロイのみをサポートし、新しいタスクセットを起動してターゲットグループを切り替えます。Lambda ではトラフィックシフトによる段階的なデプロイを提供します。CodeDeploy 自体の利用料金は EC2/Lambda へのデプロイでは無料で、ECS へのデプロイのみ更新ごとに課金されます。
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。
ECS ブルーグリーンデプロイの設計
ECS のブルーグリーンデプロイでは、ALB に 2 つのターゲットグループ (本番用とテスト用) を設定します。デプロイ開始時に新しいタスクセット (Green) が起動し、テスト用ターゲットグループに登録されます。テストリスナーポートで Green 環境の動作確認を行い、問題がなければ本番リスナーのトラフィックを Green に切り替えます。切り替え後も旧タスクセット (Blue) は指定した待機時間 (デフォルト 1 時間) 保持されるため、問題が発生した場合は即座にロールバックできます。AppSpec ファイルの AfterAllowTestTraffic フックで自動テストを実行し、テスト失敗時に自動ロールバックする構成が推奨されます。
自動ロールバックとアラーム連携
CodeDeploy の自動ロールバックは、デプロイ失敗時と CloudWatch アラーム発火時の 2 つのトリガーで動作します。CloudWatch アラームとの連携では、デプロイ後のエラー率 (5xx レスポンスの割合)、レイテンシ (p99 応答時間)、ビジネスメトリクス (注文成功率など) を監視し、閾値を超えた場合に自動的に前バージョンにロールバックします。Lambda のトラフィックシフトでは、Canary デプロイで最初に 10% のトラフィックを新バージョンに流し、指定した時間 (例: 10 分) アラームが発火しなければ残りの 90% を切り替えます。Linear デプロイでは 10% ずつ段階的にトラフィックを移行し、各ステップでアラームを監視します。
さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。
まとめ
CodeDeploy は EC2、ECS、Lambda への安全なデプロイを統一的に管理するサービスです。ブルーグリーンデプロイとトラフィックシフトで本番環境のリスクを最小化し、CloudWatch アラームとの連携で問題発生時の自動ロールバックを実現します。AppSpec のライフサイクルフックでデプロイプロセスにテストを組み込むことで、品質を担保したデプロイ自動化を構築できます。
AWS の優位点
- EC2、ECS、Lambda の 3 つのコンピューティングプラットフォームに対応し、統一されたデプロイワークフローを提供する
- ECS のブルーグリーンデプロイで新旧タスクセットを並行稼働させ、ヘルスチェック通過後にトラフィックを切り替える
- Lambda のトラフィックシフトで Canary (10% → 100%)、Linear (10% ずつ段階的)、AllAtOnce の 3 パターンから選択できる
- CloudWatch アラームと連携した自動ロールバックで、デプロイ後のエラー率上昇を検知して即座に前バージョンに戻せる
- AppSpec ファイルでデプロイのライフサイクルフック (BeforeInstall、AfterInstall、AfterAllowTraffic) を定義し、テストやバリデーションを自動実行できる