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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kamadakohei
December 20, 2022
Technology
0
1.4k
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.4k
Amazon CloudWatch Syntheticsで始める合成監視
kamadakohei
0
580
Amazon VPC Latticeを触ってみた!
kamadakohei
0
1k
AIアプリ作ってみた
kamadakohei
0
470
LINEBot作ってみた
kamadakohei
0
84
Other Decks in Technology
See All in Technology
Claude Cowork Plugins を読む - Skills駆動型業務エージェント設計の実像と構造
knishioka
0
260
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
210
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
460
20260305_【白金鉱業】分析者が地理情報を武器にするための軽量なアドホック分析環境
yucho147
1
170
パネルディスカッション資料 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.1k
「使いにくい」も「運用疲れ」も卒業する UIデザイナーとエンジニアが創る持続可能な内製開発
nrinetcom
PRO
1
780
Secure Boot 2026 - Aggiornamento dei certificati UEFI e piano di adozione in azienda
memiug
0
140
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
3
910
ヘルシーSRE
tk3fftk
2
240
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
360
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.4k
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.4k
Featured
See All Featured
It's Worth the Effort
3n
188
29k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
79
Large-scale JavaScript Application Architecture
addyosmani
515
110k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
140
The Invisible Side of Design
smashingmag
302
51k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
380
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
60
51k
What does AI have to do with Human Rights?
axbom
PRO
1
2k
Utilizing Notion as your number one productivity tool
mfonobong
4
240
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
140
How to build a perfect <img>
jonoalderson
1
5.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
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