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