はじめに
AWSのコンテナオーケストレーションサービスであるAmazon Elastic Container Service (Amazon ECS)において、非常に強力なアップデートが発表されました!
これまで、ECSにおけるBlue/Greenデプロイやカナリアデプロイを実現するには、AWS CodeDeployやApplication Load Balancer (ALB) を組み合わせるのが一般的でした。しかし今回のアップデートにより、Amazon VPC Latticeを使用したECSサービスにおいて、ECSネイティブでBlue/Green、Linear(線形)、Canary(カナリア)デプロイが実行可能になりました。
複数VPCやマルチアカウントにまたがるマイクロサービスアーキテクチャを採用している開発者にとって、デプロイの安全性とシンプルさを劇的に向上させる待望の機能です。本記事では、この機能の概要、メリット、そして実務におけるユースケースを分かりやすく解説します。
この機能の概要とメリット
Amazon VPC Latticeは、サービス間通信(Service-to-Service Communication)をシンプルにするマネージドサービスです。今回のアップデートにより、このVPC Latticeを経由するトラフィックの「段階的な移行(トラフィックシェーピング)」を、ECSのデプロイ機能が直接コントロールできるようになりました。
1. 多彩なデプロイ戦略をサポート
リリースの信頼性や要件に合わせて、以下の3つのデプロイ戦略を柔軟に選択できます。
- Blue/Greenデプロイ:新しいバージョン(Green)を完全に検証したのち、一括でトラフィックを切り替えます。
- Linear(線形)デプロイ:一定の時間ごとに、等倍のトラフィック(例:10分ごとに10%ずつ)を新しいバージョンに移行します。
- Canary(カナリア)デプロイ:最初に少量のトラフィック(例:全体の5%)だけを新しいバージョンに流し、問題がなければ一気に、または段階的に全トラフィックを移行します。
2. 柔軟なライフサイクルフックと検証プロセス
本番トラフィックを新しいバージョンに移行する前に、テストトラフィックを用いた自動検証を実行できます。AWS Lambdaなどを利用したカスタム検証ステップの追加や、手動承認(Pauseフック)をプロセスに組み込むことも可能です。
3. 強力な自動ロールバック機能
デプロイ中にAmazon CloudWatchアラームが異常を検知した場合、または「ECSデプロイサーキットブレーカー」がタスクの起動失敗を検出した場合、自動的にデプロイを中断し元のバージョンへとロールバックします。また、「ベイク時間(Bake Time)」を設定することで、トラフィック移行完了後も一定時間は旧バージョンをスタンバイ状態に維持し、万が一の際にもダウンタイムなしで迅速に切り戻すことができます。
想定されるユースケース
本機能は、以下のような高度なシステム運用を行っている、または目指しているチームに最適です。
- マルチアカウント/マルチVPCのマイクロサービス運用:
複数のAWSアカウントやVPCに分散したECSマイクロサービス群がVPC Latticeで相互接続されている場合、サービス個別の安全なリリースが格段に容易になります。 - ミッションクリティカルなWebアプリケーション:
バグによるシステム全停止を防ぐため、深夜帯に自動で少量のユーザー(カナリア)だけに新機能をさらし、監視アラームが鳴らなければ全展開する、といった安全な自動化ラインが構築できます。 - 安全なAPIのバージョンアップ:
既存のAPIクライアントへの影響を最小限に抑えるため、徐々に新規バージョンへ通信を移行させたい場合に効果的です。
注意点や従来の機能との違い
従来のCodeDeploy方式との違い
これまでECSで高度なデプロイを行う場合、AWS CodeDeployとの統合が標準的でした。しかし、CodeDeployは主にALBやNLBといったロードバランサーを前提とした設計となっていました。
今回の機能は、VPC Latticeの「サービス」および「ターゲットグループ」をデプロイコントローラーとして直接制御するため、CodeDeployの複雑な設定やパイプライン管理を経由することなく、ECSサービスの設定だけでデプロイ戦略を完結させることができます。
導入時の注意点
- 対象のAWSリージョン:Amazon VPC Latticeが利用可能なすべてのAWSリージョンで利用可能です。あらかじめ、ターゲットとするリージョンでVPC Latticeが提供されているか確認しましょう。
- 事前設計の重要性:VPC Latticeのターゲットグループ、リスナールール、およびCloudWatchアラームが正しく設計・紐付けられている必要があります。
ECSサービス定義のイメージ
Infrastructure as Code (IaC) を用いて設定する際、デプロイコントローラーとして以下のようにVPC Latticeのリソースとデプロイ設定を紐付けるイメージとなります(構成はツールの仕様により異なる場合があります)。
# ECSサービス定義におけるVPC Latticeデプロイ構成のイメージ
DeploymentConfiguration:
DeploymentController:
Type: EXTERNAL # もしくはECSネイティブの新しいコントローラータイプを指定
# VPC Latticeのターゲットグループやロールバック用のCloudWatchアラームを指定
# 詳細なパラメータは各ツール(AWS CloudFormation、Terraform)の最新リファレンスを参照してください
まとめ
Amazon ECSとAmazon VPC Latticeのネイティブ統合による新しいデプロイ手法は、コンテナ化されたマイクロサービスに「高信頼性」と「シンプルさ」を同時にもたらす強力なアップデートです。
AWSマネジメントコンソール、AWS CLI、各種SDK、およびIaCツール(CloudFormationやTerraform等)からすぐに利用可能です。新機能を取り入れて、より堅牢でモダンなCI/CDパイプラインの構築にチャレンジしてみてはいかがでしょうか!