Slide 1

Slide 1 text

ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜 2024-10-23 AWS Likers) AWS10分LT会 - vol.5 @t-kikuc

Slide 2

Slide 2 text

● PipeCDメンテナ @CyberAgent, Inc. ○ ECS/Lambda関連の機能開発よくやってます ● 好きなAWSサービス:  ECS、Support ● 年内にAWS認定10点ぐらい失効します🎇 菊池 哲哉  Kikuchi Tetsuya 2 @t-kikuc @t_kikuc

Slide 3

Slide 3 text

PipeCDとは? ● CD(継続的デリバリー)のOSS ● 主な特徴 ○ ECS、Lambda、K8s、Cloud Run、Terraformにデプロイできる (2024.10現在) ○ Canary、Blue/Greenに強み ○ GitOpsスタイル(Pull型) ● 沿革 ○ サイバーエージェント発のOSS ○ 2023.05〜 CNCF Sandbox Project ○ 詳細: https://speakerdeck.com/ffjlabo/our-journey-from-in-house-cd-system-to-open-source ● 日本語版チュートリアルあります ○ https://github.com/pipe-cd/tutorial/blob/main/content/ja/README.md 3

Slide 4

Slide 4 text

アジェンダ 1. ECSのサービス間通信とは? 2. 4つのサービス間通信方法を概説 3. 比較 4. Canary、Blue/Greenはどう実現する? 4

Slide 5

Slide 5 text

1. ECSのサービス間通信とは? 5

Slide 6

Slide 6 text

ECSのサービス間通信とは? 6

Slide 7

Slide 7 text

ECSのサービス間通信とは? 7 どうする? どうする?

Slide 8

Slide 8 text

サービス間通信で大事な要素 ● 通信先の発見 ○ 負荷分散も ● 信頼性/耐障害性 ○ ヘルスチェック  : 落ちてるターゲットは外す ○ リトライ     : 一時的な通信失敗なら再試行 ○ サーキットブレーカ: 落ちてるサービスには通信させない ● 可観測性 ○ ログ、メトリクス、トレース 8

Slide 9

Slide 9 text

ECSサービス間通信の方法4点 ● ALB ● ECS Service Discovery ● App Mesh (廃止予定) ● ECS Service Connect 9

Slide 10

Slide 10 text

App Mesh終了のお知らせ > 2026 年 9 月 30 日をもって AWS App Mesh のサポートを終了することを決定しました。 https://aws.amazon.com/jp/blogs/news/migrating-from-aws-app-mesh-to-amazon-ecs-service-c onnect/ 10

Slide 11

Slide 11 text

2. 4つのサービス間通信方法を概説 11 11

Slide 12

Slide 12 text

1. ALB 12 1. ALBのドメイン名にアクセス 2. ALBが配下のTaskにルーティング

Slide 13

Slide 13 text

1. ALB 13 ● パスベースのルーティングにより、 1つのALBで複数サービス間の中継も可能

Slide 14

Slide 14 text

1. ALB 14 👍強み ● ログ・メトリクスを取得可能 ● 柔軟なルーティング設定 😢弱み ● レイテンシが気になりうる ● ALBの管理の手間

Slide 15

Slide 15 text

2. ECS Service Discovery ● 名前解決 → 直接アクセス 15

Slide 16

Slide 16 text

2. ECS Service Discovery ● レコード登録の流れ (削除も同様) 16

Slide 17

Slide 17 text

2. ECS Service Discovery 17 👍強み ● 構築・管理がシンプル ● 通信が高速 ● 安い 😢弱み ● ログ/メトリクス/トレースを取得できない ● 信頼性向上のためには自前実装が必要

Slide 18

Slide 18 text

3. App Mesh (終了予定) ● Envoyサイドカー + マネージドのコントロールプレーン 18

Slide 19

Slide 19 text

3. App Mesh (終了予定) 19 👍強み ● ログ・メトリクス・トレースを取得 できる ● 信頼性向上の機能が充実 ○ サーキットブレーカーも 😢弱み ● 構築・管理が面倒

Slide 20

Slide 20 text

4. ECS Service Connect ● サイドカーのエージェントが通信を色々やってくれる 20

Slide 21

Slide 21 text

4. ECS Service Connect 21 👍強み ● ログ・メトリクスを取得可能 ● リトライ制御が自動 ● 設定がシンプル 😢弱み ● サイドカーの費用がかかる ● まだ発展途上

Slide 22

Slide 22 text

3. 4方法を比較 22 22

Slide 23

Slide 23 text

比較 23 ALB Service Discovery App Mesh Service Connect 可観測性 👍 x 👍👍 👍 信頼性 👍 x 👍👍👍👍 👍👍 シンプルさ 👍 👍👍👍 x 👍👍 費用 トラフィック次第 👍 サイドカー サイドカー 懸念事項 - - 終了予定☠ まだ発展途上 PipeCDでの 対応状況 👍👍対応済 👍一部対応済 x 対応予定なし x 未対応

Slide 24

Slide 24 text

4. Canary, Blue/Greenはどう実現する? 24 24

Slide 25

Slide 25 text

比較: デプロイ編 25 ALB Service Discovery App Mesh Service Connect ローリングアッ プデート 👍 👍 👍 👍 Canary, Blue/Green 👍👍 CodeDeployを 使用 x 強引には可能 👍 x 未対応 CodeDeployを使用しない方法は、下記参照 ECSのCanaryリリースを Externalデプロイタイプで実現する方法

Slide 26

Slide 26 text

Service Discoveryでの強引Canary例 26 ● TaskSetを利用 ● Task数の比率でCanary  比率を制御 ● Blue/Greenはできない ○ Blue/Green対応 版:https://qiita.com/t-kikuc/items/6995 7ee2c6b490a01b6d ● PipeCDはこの方式 詳細:https://qiita.com/t-kikuc/items/25bd032606d878229ed7

Slide 27

Slide 27 text

Service ConnectでのCanary,Blue/Greenは? ● 現時点でCanary,Blue/Greenは未サポート ● 強引に実現する可能性: ビミョウ ○ 複数のサービスを使えばできるのか?(検証求む) ○ “外部デプロイタイプ”がサポートされていないため、魔改造は難しそう > Only services that use rolling deployments are supported with Service Connect. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect-concepts-deploy.html 27

Slide 28

Slide 28 text

まとめ 28 28

Slide 29

Slide 29 text

まとめ 29 ALB Service Discovery App Mesh Service Connect 可観測性 👍 x 👍👍 👍 信頼性 👍 x 👍👍👍👍 👍👍 シンプルさ 👍 👍👍👍 x 👍👍 費用 トラフィック次第 👍 サイドカー サイドカー 懸念事項 - - 終了予定☠ まだ発展途上 Canary, Blue/Green 👍👍CodeDeployで x 強引には可能 👍 x PipeCD対応状況 👍👍対応済 👍一部対応済 x 対応予定なし x 未対応 頑張ってほしい ● Service ConnectはApp Meshからの移行先として十分なのか? ● AWS的には「ECSサービス間通信に多機能は不要」と考えているのか?

Slide 30

Slide 30 text

参考・関連文献 ● 第二十六回 ちょっぴりDD Amazon ECS Service Connect によるサービス間通信の管理 https://www.youtube.com/watch?v=emmk3U0whSQ ● 改めてECSサービス間通信を整理する   https://tech.nri-net.com/entry/ecs_service_to_service_communication ● Web アプリケーションにおける Amazon ECS / AWS Fargate アーキテクチャデザインパターン  https://aws.amazon.com/jp/builders-flash/202409/web-app-architecture-design-pattern/ ● ECS Service Connect で ECS 上のマイクロサービスの耐障害性と可観測性を高めよう https://speakerdeck.com/kashinoki38/ecs-service-connect-de-ecs-shang-nomaikurosabisunonai-zhang-hai-xing-toke-guan-ce-xing-wogao-meyou ● 公式ドキュメント) Interconnect Amazon ECS services - Amazon Elastic Container Service https://docs.aws.amazon.com/AmazonECS/latest/developerguide/interconnecting-services.html ● Service DiscoveryでのCanary & Blue/Green (強引実装例) https://qiita.com/t-kikuc/items/69957ee2c6b490a01b6d ● Service DiscoveryでのCanary(簡易実装例) https://qiita.com/t-kikuc/items/25bd032606d878229ed7 ● ECSのCanaryリリースをExternalデプロイタイプで実現する方法 https://speakerdeck.com/tkikuc/ecsnocanaryririsuwoexternaldepuroitaipudeshi-xian-surufang-fa 30