Slide 1

Slide 1 text

Service Connect 上のサービスに ECS Service の外側から到達できなかった話 2026/08/04(火) NW-JAWS #22 「タイトル持ちの長い夜(LV300-)」 太田 暢 @iorandd Copyright © 3-shake, Inc. All Rights Reserved.

Slide 2

Slide 2 text

自己紹介 太田 暢 株式会社スリーシェイク Sreake事業部 アプリケーション開発支援チーム 業務ではバックエンド、CI/CDまわりを担当 好きなAWSサービスはAmazon ECS 2026 Japan AWS Jr. Champions 𝕏 @iorandd 02

Slide 3

Slide 3 text

API の動作確認用 E2E 実行時にうまくいかなかった話をします 03

Slide 4

Slide 4 text

SECTION 01 前提となる AWS サービス Amazon ECS Service Connect 04

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

run-task で起動した task には Service Connect が加わらない Service Connect は ECS Service が起動した task にだけ適用される 10

Slide 11

Slide 11 text

SECTION 02 E2E を実行した環境 11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

SECTION 03 発生した課題 14

Slide 15

Slide 15 text

課題 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

Slide 16

Slide 16 text

対策 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

Slide 17

Slide 17 text

課題 2 E2E 対象 API が完了通知の宛先に登録されない 既存ワーカーは Service Connect の endpoint 名へ通知するが、通知を処理できる対象 API は停止している E2E 対象 API は対象 API の Service Connect endpoint に登録されない desiredCount=0 の対象 API には転送先 task がなく、E2E は完了を待ち続ける 17

Slide 18

Slide 18 text

対策 2 localhost では既存ワーカーの通知経路を確認しない E2E 用ワーカーから同じ awsvpc task の対象 API へ完了通知を送る SQS キューは通常時と共用のため、E2E 中は既存ワーカーを desiredCount=0 にして取り合いを避ける task 内に閉じるのは E2E 用ワーカーから API への完了通知だけ 18

Slide 19

Slide 19 text

接続方法を用意できるなら、既存 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

Slide 20

Slide 20 text

SECTION 04 まとめ 20

Slide 21

Slide 21 text

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