Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Service Connect 上のサービスに ECS Service の外側から到達できなかった話

Service Connect 上のサービスに ECS Service の外側から到達できなかった話

NW-JAWS #22 ~タイトル持ちの長い夜(LV300-)~ のLT登壇資料です。
https://jawsug-nw.connpass.com/event/399100/

Avatar for Itaru Ota

Itaru Ota

August 04, 2026

More Decks by Itaru Ota

Other Decks in Technology

Transcript

  1. Amazon ECS コンテナ化したアプリケーションを AWS 上で実行・管理する機能 動かすコンテナの構成と必要な数を指定すると、Amazon ECS が実行場所を決めて起動 する サーバーの確保とコンテナの配置は

    Amazon ECS 側が担う コンテナが動く基盤は AWS Fargate と EC2 から選ぶ 出典:What is Amazon ECS? https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html 05
  2. task definition で設定し、task として実体をもつ task definition — コンテナイメージ、CPU、メモリ、ポート、network mode を定める設定

    task — task definition から起動した一つ以上のコンテナ。同じ場所にまとめて配置される 起動した task を維持するかどうかは task definition では決まらない 出典:Amazon ECS task definitions https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html 06
  3. ECS Service で task を維持する 起動方法 起動の仕方 task が停止した後 ECS

    Service 維持する task 数を desiredCount に指定す る 指定数を保つよう新しい task を起動す る standalone task aws ecs run-task で一度だけ起動する 置き換えない 出典:Amazon ECS services / Amazon ECS standalone tasks https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html 07
  4. task を置き換えると IP アドレスが変わる awsvpc mode では task ごとにネットワークインターフェイスと IP

    アドレスが割り当てられる 呼び出す側が IP アドレスを設定に持つと、置き換えのたびに追随が必要になる 変わらない名前で呼び出す仕組みが必要になる 出典:Amazon ECS awsvpc task networking https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html 08
  5. Service Connect ECS Service 間の通信を固定したサービス名と managed proxy で仲介する機能 呼び出す側の ECS

    Service → dependency-api:50051 で呼ぶ → 呼び出す側の proxy が現在の依存先 task を選ぶ → 依存先 task の proxy → 依存先のアプリケーション proxy — Service Connect を設定した ECS Service の task に加わるコンテナ endpoint — サービス名に対応し、現在の依存先 task へ通信を振り分ける論理的な宛先 呼び出す側は依存先の IP アドレスを知らなくてよい 出典:Amazon ECS Service Connect https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html 09
  6. run-task で起動した task には Service Connect が加わらない Service Connect は

    ECS Service が起動した task にだけ適用される 10
  7. 通常構成 3 つの ECS Service が Service Connect で通信する E2E

    は依存 API の呼び出しから完了通知の反映までを確認する 対象 API は依存 API を同期で呼び、処理依頼を Amazon SQS に入れる Amazon SQS は処理依頼をメッセージとして預かり、既存ワーカーが取り出すまで保持する 既存ワーカーは処理を終えると Service Connect 名で対象 API へ完了を通知する 12
  8. E2E 対象 API を standalone task で起動する 依存 API と既存ワーカーは

    ECS Service のまま ステージングでは対象 API を使わない間 ECS Service の desiredCount を 0 にしている E2E の実行時にテストランナーと対象 API のアプリケーションを一つの awsvpc task として起動する standalone task が必要な制約はなく、既存 ECS Service を E2E の間だけ起動する方法を当時は把握していなかった この task は ECS Service に属さないため、E2E 対象 API だけが Service Connect の適用から外れる 13
  9. 課題 1 E2E 対象 API が依存 API の名前を解決できない 依存 API

    は起動しているが、standalone task から Service Connect 名を解決できない 接続前の名前解決で停止している standalone task には Service Connect の client proxy と endpoint の設定が加わらない 出典:Use Service Connect to connect Amazon ECS services with short names https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html 15
  10. 対策 1 Cloud Map の名前解決は Service Connect を通らない Private DNS

    で依存 API の task IP を取得する AWS Cloud Map はサービス名と現在の接続先を登録するサービス ECS service discovery は Private DNS namespace に task IP を登録する VPC 内の DNS で名前を解決するため、client proxy を持たない task からも利用できる 16
  11. 課題 2 E2E 対象 API が完了通知の宛先に登録されない 既存ワーカーは Service Connect の

    endpoint 名へ通知するが、通知を処理できる対象 API は停止している E2E 対象 API は対象 API の Service Connect endpoint に登録されない desiredCount=0 の対象 API には転送先 task がなく、E2E は完了を待ち続ける 17
  12. 対策 2 localhost では既存ワーカーの通知経路を確認しない E2E 用ワーカーから同じ awsvpc task の対象 API

    へ完了通知を送る SQS キューは通常時と共用のため、E2E 中は既存ワーカーを desiredCount=0 にして取り合いを避ける task 内に閉じるのは E2E 用ワーカーから API への完了通知だけ 18
  13. 接続方法を用意できるなら、既存 ECS Service の一時起動を先に検討する テストランナーは standalone task のため、対象 API への接続方法は別途必要

    検討順 起動方法 1 既存 ECS Service を一時起動 確認できる範囲 依存 API の呼び出しと完了通知で Service Connect を利用 2 E2E 用 ECS Service を作成 テスト固有設定を分離しながら Service Connect を利用 3 standalone task 別の名前解決と完了通知先が必要 今回の Cloud Map と localhost による構成はアプリケーション処理を確認するが、通常時の Service Connect 経路は確認しない 19
  14. Service Connect の適用範囲と宛先管理 Service Connect の適用範囲は task definition ではなく ECS

    Service で決まる task の起動方法を変えるときは、依存先の名前解決と自身が通知先として登録されるかを分けて確認 する Load Balancer や VPC Lattice でも、短命な宛先の登録と解除を誰が担うか確認する 21