AWS CodeDeploy のデプロイ戦略 - EC2・ECS・Lambda へのブルーグリーンデプロイ

CodeDeploy による EC2、ECS、Lambda へのデプロイ戦略、ブルーグリーンデプロイの設計、自動ロールバックの設定を解説します。

CodeDeploy の対応プラットフォームとデプロイタイプ

この記事は約 3 分で読めます。 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) を定義し、テストやバリデーションを自動実行できる

同じテーマの記事

自動デプロイメント戦略 - AWS CodeDeploy と CodePipeline で実現する継続的デリバリー AWS CodeDeploy と CodePipeline を活用した自動デプロイメントの構築方法を解説します。EC2、Lambda、ECS への多様なデプロイ戦略と、パイプラインによる継続的デリバリーの実践手法を紹介します。 カオスエンジニアリング実践 - AWS Fault Injection Simulator で耐障害性を検証する AWS Fault Injection Simulator (FIS) を使ったカオスエンジニアリングの実践を解説。障害注入シナリオの設計、EC2・ECS・RDS への障害注入、安全な実験の進め方を紹介します。 CI/CD パイプライン自動化 - AWS CodePipeline で実現する継続的デリバリー AWS CodePipeline と CodeBuild を活用した CI/CD パイプラインの自動化を解説します。 AWS CodeDeploy の EC2/オンプレミスデプロイ - AppSpec とライフサイクルフックの設計 CodeDeploy の EC2/オンプレミスデプロイにおける AppSpec ファイルの設計、ライフサイクルフックの活用、デプロイグループの管理を解説します。 AWS CodePipeline で構築する CI/CD パイプライン - ソースからデプロイまでの自動化 CodePipeline によるマルチステージパイプラインの構築、承認アクション、クロスアカウントデプロイを解説します。 Elastic Beanstalk で始めるアプリケーションデプロイ自動化 - 環境構築からローリングデプロイまで Elastic Beanstalk によるアプリケーションデプロイの自動化を解説。環境構築、デプロイポリシーの選定、.ebextensions によるカスタマイズ手法を紹介します。 Elastic Beanstalk の Docker マルチコンテナ環境 - ECS 連携と本番運用のベストプラクティス Elastic Beanstalk の Docker プラットフォームによるマルチコンテナ構成、ECS との連携、ヘルスチェックとログ管理を解説します。 AWS Proton でプラットフォームエンジニアリングを実現 - インフラテンプレートのセルフサービス提供 Proton によるインフラテンプレートの管理、環境とサービスの分離、開発者セルフサービスの設計を解説します。