Amazon Elastic Container Service(Amazon ECS)を利用してマイクロサービスを構築しているエンジニアの皆さんに、非常に強力なアップデートが届きました!
これまで、VPCやAWSアカウントを跨いだサービス間通信の制御には「Amazon VPC Lattice」が広く使われてきましたが、今回、ECSサービスにおいて VPC Latticeを使用したBlue/Green、Linear(線形)、Canary(カナリア)デプロイがネイティブにサポートされました。
これにより、コンテナアプリケーションのアップデート時のリスクを最小限に抑え、安全かつスムーズなリリースがECSの標準機能として実現できるようになります。
新機能の概要とメリット
このアップデートにより、VPC Latticeを介して通信するECSタスクのデプロイにおいて、以下のような高度なトラフィック制御が可能になりました。
1. 柔軟なトラフィック移行戦略のサポート
新しいバージョンをデプロイする際、トラフィックをどのように移行するかを以下の3つの戦略から選択できます。
- Blue/Green(一括移行): 新バージョン(Green)をプロビジョニングし、検証完了後に一気にトラフィックを切り替えます。
- Linear(線形移行): 「10分ごとに10%ずつ」といった形で、等間隔かつ段階的にトラフィックを移行します。
- Canary(カナリア移行): 最初に少量のトラフィック(例: 10%)だけを新バージョンに流し、問題がなければ残りのトラフィックを一気に移行します。
2. ライフサイクルフックによる高度な検証
トラフィック移行の前後で、カスタムテストや手動承認を挟むことができます。AWS Lambda関数を用いた自動テストの実行や、特定の検証が終わるまでデプロイを一時停止(Pause)するフック機能が利用可能です。本番トラフィックを流す前に、テスト専用トラフィックで新バージョンの動作検証を行うことも簡単になります。
3. 自動ロールバックとサーキットブレーカーによる安全性
デプロイ中にAmazon CloudWatchアラームが異常を検知した場合や、ECSの「デプロイサーキットブレーカー」がタスクの起動失敗を検知した場合、システムは自動的に旧バージョンへロールバックします。「ベイク時間(Bake Time)」を設定しておくことで、切り替え完了後もしばらくは旧バージョンを待機状態に保ち、何かあればダウンタイムなしで即座にロールバックが可能です。
想定されるユースケース
1. マイクロサービス間(Service-to-Service)通信の安全なアップデート
例えば、API Gatewayから裏側のサービスA、さらにその奥のサービスBへと通信するようなマイクロサービス構成において、サービスAからサービスBへの通信(East-West通信)をVPC Latticeで管理しているケースです。サービスBのアップデート時にカナリアデプロイを適用することで、万が一新バージョンにバグがあっても、影響範囲を全体の数%の通信のみに抑えることができます。
2. 複数AWSアカウント・VPCにまたがる大規模システム
組織で複数のAWSアカウントやVPCを運用し、それぞれでECSタスクが動いているマルチテナント構成において、VPC Latticeのクロスアカウント接続機能と今回のECSネイティブデプロイを組み合わせることで、アカウントの境界を意識することなく、安全なデプロイパイプラインを共通化できます。
注意点や従来の機能との違い
Application Load Balancer (ALB) + AWS CodeDeployとの違い
これまで、ECSでBlue/GreenデプロイやCanaryデプロイを行うには、ALBとAWS CodeDeployを組み合わせるのが一般的でした。しかし、これにはいくつかの課題がありました。
- ALBとの違い: ALBは主に外部からの通信(North-South通信)を処理するのに適していますが、VPC間の内部通信(East-West通信)に使うとインフラ構成が複雑になり、コストも嵩みます。
- 管理のシンプルさ: 今回のアップデートにより、サービス間通信のメッシュネットワークを提供するVPC Lattice側で直接、ECSネイティブな制御が可能になりました。CodeDeployの複雑な設定なしで、ECSの設定だけでデプロイ戦略を完結できるようになります。
設定例(IaCでの定義イメージ)
AWS CLIやTerraform、CloudFormationなどのInfrastructure-as-Code(IaC)ツールから設定可能です。ECSのサービス定義(Service Definition)において、以下のようにVPC Latticeのターゲットグループやデプロイ設定を組み込みます。
{
"serviceName": "my-ecs-service",
"deploymentController": {
"type": "ECS"
},
"vpcLatticeConfigurations": [
{
"targetGroupArn": "arn:aws:vpc-lattice:ap-northeast-1:123456789012:targetgroup/tg-xxxxxx",
"port": 80,
"deploymentStrategy": {
"type": "CANARY",
"canaryConfig": {
"percent": 10,
"bakeTimeInMinutes": 5
}
}
}
]
}
※上記は設定イメージです。実際のスキーマやAPI仕様は公式ドキュメント(Amazon ECS deployments with VPC Lattice)をご確認ください。
まとめ
今回のAmazon ECSとAmazon VPC Latticeのネイティブ統合により、マイクロサービス間通信の安全なアップデートがかつてないほど簡単に実現できるようになりました。
インフラの複雑性を排除しつつ、Blue/Green、Linear、Canaryといった高度なリリース戦略をECSサービスの設定だけで完結できるのは、すべてのAWSコンテナエンジニアにとって大きなメリットです。
新機能は、VPC Latticeが提供されているすべてのAWSリージョンで、新規・既存問わずすぐに利用可能です。ぜひ検証環境から導入を検討してみてはいかがでしょうか!