Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ECS Service Connect By Terraform
Search
kamadakohei
December 20, 2022
Technology
0
1.3k
ECS Service Connect By Terraform
JAWS-UGコンテナ支部 #22 re:CapのLTでの発表資料
kamadakohei
December 20, 2022
Tweet
Share
More Decks by kamadakohei
See All by kamadakohei
FargateのPID namespace sharing を試してみた
kamadakohei
0
1.3k
Amazon CloudWatch Syntheticsで始める合成監視
kamadakohei
0
540
Amazon VPC Latticeを触ってみた!
kamadakohei
0
990
AIアプリ作ってみた
kamadakohei
0
450
LINEBot作ってみた
kamadakohei
0
76
Other Decks in Technology
See All in Technology
Quarkusで作るInteractive Stream Application
joker1007
0
150
ユーザーストーリー x AI / User Stories x AI
oomatomo
0
200
ABEJA FIRST GUIDE for Software Engineers
abeja
0
3.2k
[CV勉強会@関東 ICCV2025] WoTE: End-to-End Driving with Online Trajectory Evaluation via BEV World Model
shinkyoto
0
270
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方
takeuchi_132917
0
170
Devoxx Morocco 2025 - Like Spring but faster: The new Java Jedi
edeandrea
PRO
0
100
手を動かしながら学ぶデータモデリング - 論理設計から物理設計まで / Data modeling
soudai
PRO
24
5.7k
X-Ray SDKとDaemonのサポート終了と移⾏ガイド
o11yfes2023
0
120
LINEスキマニ/LINEバイトにおけるバックエンド開発
lycorptech_jp
PRO
0
190
仕様駆動 x Codex で 超効率開発
ismk
2
1.5k
2ヶ月で新規事業のシステムを0から立ち上げるスタートアップの舞台裏
shmokmt
0
140
第65回コンピュータビジョン勉強会
tsukamotokenji
0
150
Featured
See All Featured
Docker and Python
trallard
46
3.6k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
RailsConf 2023
tenderlove
30
1.3k
KATA
mclloyd
PRO
32
15k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Invisible Side of Design
smashingmag
302
51k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
ECS Service Connect by Terraform
⾃⼰紹介 名前: 釜⽥康平(Kamada Kohei) 職種:サーバーサイドエンジニア 趣味:ランニング
ECS Service Connect マイクロサービスアーキテクチャなどの構成でECS間の通信を簡単に設定できるようにしたもの。 従来のECS間の通信⼿法との違いはスライド「ECS Service Connectによるサービスの新しいつなぎ ⽅」が詳しい。 https://speakerdeck.com/iselegant/a-new-way-to-connect-services-with-ecs-service-connect
Terraformで試してみた CDKとCLIは既に試している⽅がいたので 私はTerraformで試してみました。 https://github.com/hashicorp/terraform-provider-aws/issues/28043
構成図 以下の構成で試してみました。 • 同じ名前空間(connect)内にクライアントとサーバー⽤の ECSサービスが1つずつ存在する。 • クライアント、サーバーともにApacheのコンテナイメージ ※参考:「 ECS Service
ConnectをCDKでデプロイしてみた」 https://dev.classmethod.jp/articles/ecs-service-connect- cdk/
流れ •Terraform • VPC・サブネット作成 • Cloud Mapで名前空間作成 • ECSクラスター作成 •
ECSのタスクを定義 • サーバーコンテナのECSサービス、クライアントコンテナのECSサー ビス作成
VPC・サブネット作成 module "vpc" { source = "terraform-aws-modules/vpc/aws" version = "3.10.0"
name = "my-vpc" cidr = "10.0.0.0/16" enable_dns_hostnames = true enable_dns_support = true azs = ["ap-northeast-1a", "ap-northeast-1c"] public_subnets = ["10.0.11.0/24", "10.0.12.0/24"] } Terraform RegistryのAWSモジュールを利⽤して作成
Cloud Mapで名前空間作成 resource "aws_service_discovery_http_namespace" ”connect" { name = ”connect" }
「インスタンスの検出」が「API呼び出し」になる名前空間リソースを作成 ※CDKやCLIと違い、Terraformはクラスター作成時に 別途作成してくれるオプションがないので別途作成する必要がある。
ECSクラスター作成 resource "aws_ecs_cluster" "cluster" { name = "connect-cluster" }
タスク定義(定義部分のみ抜粋) container_definitions = jsonencode([ { name = "webserver", image =
"public.ecr.aws/docker/library/apache:latest", essential = true portMappings = [ { // ServiceConnectで使うために名前が必要 name = ”webserver” containerPort = 80 protocol = "tcp” // ServiceConnectの envoyがこのプロトコルでproxyする appProtocol = "http" } ] essential = true logConfiguration = { "logDriver" = "awslogs" "options" = { "awslogs-group" = "ecs/connect" "awslogs-region" = "ap-northeast-1" "awslogs-stream-prefix" = ”apache" } } } ])
ECSサービス(サービスコンテナ側)作成 service_connect_configuration { enabled = true namespace = "arn:aws:servicediscovery:ap-northeast-1:xxxxxxxxxx:namespace/xxxx” //
ServiceConnectで構築されるEnvoyのログ設定 log_configuration { log_driver = "awslogs" options = { awslogs-group = "/ecs/connect-server" awslogs-region = "ap-northeast-1" awslogs-stream-prefix = "ecs-proxy" } } service { client_alias { port = 80 } // task定義のportMappingsで定義した名前(宛先コンテナ) port_name = "webserver" } }
ECSサービス(クライアントコンテナ側)作成 service_connect_configuration { enabled = true namespace = "arn:aws:servicediscovery:ap-northeast-1:xxxxxxxxxx:namespace/xxxx” //
ServiceConnectで構築されるEnvoyのログ設定 log_configuration { log_driver = "awslogs" options = { awslogs-group = "/ecs/connect-client" awslogs-region = "ap-northeast-1" awslogs-stream-prefix = "ecs-proxy" } } } ※Serviceを省略することでクライアントコンテナとして作成される
動作確認 クライアントコンテナにECS Execで⼊ってcurlで動作確認でき るはずだが・・ うまくコンテナが⽴ち上がらず・・
気づいたこと • ECS Service Connectを扱う上での前提知識が多い。 (Cloud Map, Envoyなど) →前提知識を勉強してから触った⽅が良い。 •
ECS Service Connectの設定値の意味を理解する必要がある。
参考 • ECS Service Connectによるサービスの新しいつなぎ⽅ https://speakerdeck.com/iselegant/a-new-way-to-connect- services-with-ecs-service-connect • ECS Service
ConnectをCDKでデプロイしてみた https://dev.classmethod.jp/articles/ecs-service-connect- cdk/#toc-3 • Amazon ECS Service Connectのメモ https://zenn.dev/fujiwara/scraps/eea64fd3215e95