【AWS新機能】ECSとVPC Latticeがネイティブ統合!Blue/Green、Canary、Linearデプロイが超簡単に実現可能に

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リージョンで、新規・既存問わずすぐに利用可能です。ぜひ検証環境から導入を検討してみてはいかがでしょうか!

上部へスクロール