【レポート】ECSサービス間通信をシンプルにするAmazon ECS Service Connect #reinvent #CON323

AWS re:Invent 2022で行われたBreakout Session "Amazon ECS Service Connect: Simplified interservice communication" のレポートです。re:Invent開催中に発表されたAmazon ECS Service Connect機能について、詳細が解説されていました。
2022.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

prismatixのとばち(@toda_kk)です。

AWS re:Invent 2022で行われたBreakout Session "Amazon ECS Service Connect: Simplified interservice communication" のレポートをお伝えします。

このセッションは、AWS re:Invent 2022開催中に発表されたAmazon ECSの新しいネットワーク機能であるService Connectについて解説するものとなっています。

なお、Breakout Sessionは後ほど動画でもアーカイブが公開される内容となっています。

また本記事では、ラスベガス現地から参加した際の写真を掲載しているため、スライド画像などが少し粗くなってしまっておりますが、なんとなく現地の雰囲気が伝われば幸いです。

セッション概要

Amazon ECS Service Connect is a new Amazon ECS feature that simplifies building and operating resilient distributed applications. It allows developers to specify friendly names for their Amazon ECS services and use them in the application code to seamlessly connect to them without using additional networking infrastructure. Amazon ECS Service Connect provides convenient traffic telemetry and supports reliable Amazon ECS deployments. Join us to learn about using new Amazon ECS native interservice networking capabilities.

スピーカー

  • Rajalakshmi Ramasubramanian, Senior Software Development Engineer, Amazon
  • Alexandr Moroz, Product Manager, AWS

動画

※公開され次第、更新します。

セッションレポート

ECSサービス間通信について

  • マイクロサービスの通信は難しい
    • サービスの数が増えるほど、経路が複雑になる
    • インフラが動的にスケーリングする
    • unhealthyなエンドポイントは動的に置き換わる
  • ECSにおけるサービス間通信の方法
    • ECS Service Discovery
    • Elastic Load Balancing(ELB)
    • AWS App Mesh

  • ECS Service Discovery
    • シンプルなDNSディスカバリーを提供する
      • ECSからCloud Mapを経由してRoute 53に登録される
    • クライアントからのリクエストは各ECSタスクに直接送信される
    • システムにおけるコンポーネントが少なくて済む
    • デメリットとして、通信のTelemetryが取れない、DNSによる基本的なルーティングのみ対応

  • ELB
    • 複雑なルーティングが可能
    • Telemetryも取れる
    • デメリットとして、インフラリソースが追加され、レイテンシーも高まる

  • App Mesh
    • SidecarとしてEnvoyを入れる方法をマネージドで提供する
      • 通信のObservability
      • きめ細やかな通信のコントロール
      • 通信の暗号化や認証機能
    • デメリットとして、管理するコンポーネントが増え、複雑化する

  • それぞれのメリットを良いとこ取りしたい
    • ECS Service Discoveryのシンプルさがあって、
    • ELBの通信Telemetryがあって、
    • App Meshの通信のresilienceがあるような……

  • そこで、ECS Service Connectが登場!
    • ECSサービスで設定することで、サービス間通信および通信メトリクスの収集を実現できる

ECS Service Connectの概要

  • シンプルなDiscovery
    • 各ECSサービスは、"backend"といったシンプルな名前を持つ
    • ECSサービスは、"my-app.local"といった名前空間で束ねられる
    • クライアントからは、"backend.my-app.local"といったエンドポイントで通信する
    • 別のECSクラスターと通信することも可能
  • サービス間通信の信頼性
    • 通信のヘルスチェックにレイヤーが追加され、エラーを返すエンドポイントは自動的にルーティングから外される
    • 送信に失敗したリクエストは自動的にリトライされる
    • TCP、HTTP/1.x、HTTP2.x、gRPCによる通信をサポート
  • 通信のTelemetry
    • ECSのマネジメントコンソールから通信のメトリクスダッシュボードを表示できる
    • メトリクスはCloudWatchに送信される
      • さらに対応モニタリングツールを拡張予定
    • ログも送信できる
  • ECSデプロイメントの強化
    • ECSネイティブなローリングアップデートに対応
    • 接続のドレイニングによってZero-downtimeなデプロイも可能
    • ECS Service Discoveryよりもデプロイが速い

ECS Service Connectの仕組み

シンプルなDiscovery

  • ECSサービスでserviceConnectConfigurationを設定する
    • 接続したいnamespaceを指定する
      • ECSサービスは同じ名前空間の中で接続できる
    • exposeしているポートに対して他のECSサービスが特定できるようにportNameを指定する
      • portNameが一意な識別子となる
    • Cloud MapのDiscoveryをdiscoveryNameで指定する
    • オプションとしてclientAliasesを指定できる
      • ${discovery}.${namespace}という規則よりもわかりやすいaliasを設定できる
      • ECSサービスを移行するときなど、aliasを指定することでクライアント側からの接続先を変更せずに済む

  • シンプルなDiscoveryを実現する仕組み
    • ECSタスクの中で、タスク定義で指定したコンテナとは別にService Connect agentが立ち上がる
      • agentはEnvoyを内包している
    • Cloud Mapの名前空間にECSサービスの情報を登録し、ルーティングの際はCloud Mapを参照して名前解決する

  • ECSサービス間通信において、Cloud Mapから名前解決した後、Backendのコンテナに直接通信する

サービス間通信の信頼性

  • ECSタスクのエンドポイントが落ちていたら、Service Connect agentが自動的にリトライする

  • リクエストが失敗した際は、エラーが発生したエンドポイントをrejectして別のタスクに再度ルーティングされる

料金

  • ECS Service ConnectによるDiscoveryや通信は無料
  • ECS Service ConnectによるTelemetryの送信も無料
  • 課金対象はコンピューティングリソースにかかる料金のみ
    • ECSタスク内で起動するService Connect agentコンテナ用に、256 vCPUと64MiBのメモリが必要

Q&A

プレセンテーションの終了後、セッション参加者からのQ&Aの時間がありました。

Breakout Sessionに現地参加するのは初めてだったのですが、スタンドマイクが用意されていて質問したい人はそこに並ぶ形式でした。

以下、私が理解できた範囲とはなってしまいますが、一部の内容を記載します。

  • App Meshはいまだに必要か?
    • ECS/EKS/EC2間の通信では有効である
  • Discoveryのために既に存在しているRoute 53 Hosted Zoneを利用できるか?
    • そもそもRoute 53の設定が不要
  • Gravitonでも利用できるか?
    • Gravitonもサポートしてる
  • 違うNamespace間の通信はどうやるのか?
    • ECS Service Connectでは同じNamespace内での通信を想定しているため、その場合はELBを使うことを推奨する
  • Service Connect agentの再起動はどのように制御されるのか?
    • ECSによって自動的に実行されるので、ユーザーがagentを制御・設定する必要はない

Service Connectの仕組みや、既存のネットワーク機能との違いなどが解説されたセッションでした

Cloud MapやEnvoyとの連携といった、Service Connectの仕組みが詳しく解説されていました。

また、個人的に気になっていた点として、ECSサービス間通信として既存の方法(ELB、Service Discovery、App Mesh)との違いについても解説されており、理解を深めることがでました。

発表があった際には正直理解できていなかったのですが、既存の方法における課題を解決する + メリットを良いとこどりをする、という意味で、かなり挑戦的なアップデートであることが実感できました。

ECSはまだまだこれからも便利になっていきそうだと感じており、今後のアップデートにも期待しています!

なお、本記事ではセッション中のデモの様子などお伝えし切れていない内容もあるため、アーカイブ動画が公開されたらぜひご覧になってください!

以上、prismatixのとばち(@toda_kk)でした。