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
Amazon ECSで好きなだけ検証環境を起動できるOSSの設計・実装・運用 / YAPC::...
Search
FUJIWARA Shunichiro
February 09, 2024
Technology
11k
25
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Amazon ECSで好きなだけ検証環境を起動できるOSSの設計・実装・運用 / YAPC::Hiroshima 2024
https://fortee.jp/yapc-hiroshima-2024/proposal/1e9fbacd-5a50-43ef-87f1-490e85448f17
FUJIWARA Shunichiro
February 09, 2024
More Decks by FUJIWARA Shunichiro
See All by FUJIWARA Shunichiro
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
9
4.6k
さくらのクラウドでのシークレット管理を考える/tamachi.sre#2
fujiwara3
2
340
Amazon ECS デプロイツール ecspresso の開発を支える「正しい抽象化」の探求 / YAPC::Fukuoka 2025
fujiwara3
13
11k
パフォーマンスチューニングのために普段からできること/Performance Tuning: Daily Practices
fujiwara3
9
6.7k
alecthomas/kong はいいぞ
fujiwara3
7
2.5k
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
12
3.7k
さくらのIaaS基盤のモニタリングとOpenTelemetry/OSC Hokkaido 2025
fujiwara3
3
4.1k
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
12
5.8k
k6による負荷試験 入門から日常的な実践まで/Re:TechTalk #01
fujiwara3
2
610
Other Decks in Technology
See All in Technology
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1k
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
720
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
4
1.3k
チームで進めるAI駆動アジャイル×ウォーターフォール
kumaiu
0
150
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
720
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
200
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
730
失敗を資産に変えるClaude Code
shinyasaita
0
300
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
190
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
120
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
8
4.6k
攻撃者視点で考えるDetection Engineering
cryptopeg
0
880
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
107
250k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Exploring anti-patterns in Rails
aemeredith
3
400
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
420
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Odyssey Design
rkendrick25
PRO
2
690
Transcript
Amazon ECSͰ͖ͳ͚ͩݕূڥ ΛىಈͰ͖Δ OSSͷઃܭɾ࣮ɾӡ༻ YAPC::Hiroshima 2024 @fujiwara ౻ݪढ़Ұ
ࣗݾհ @fujiwara ໘ന๏ਓΧϠοΫSREνʔϜ ISUCON 1,2,5,11 ! ༏উ4ճ ISUCON 3,8,12,13 ӡӦ(ग़)
4ճ github.com/kayac/ecspresso Amazon ECS σϓϩΠπʔϧ github.com/fujiwara/lambroll AWS Lambda σϓϩΠπʔϧ
Agenda ϒϥϯνผ։ൃɾݕূڥͷ࣮ݱํ๏ͱ՝ ݕূڥΛ༰қʹىಈͰ͖ΔOSS mirage-ecs mirage-ecsͷઃܭͱ࣮ mirage-ecsͷ࣮ફతͳӡ༻
ϒϥϯνผ։ൃɾݕূڥͷ࣮ݱํ๏ͱ՝
ʮϒϥϯνผ։ൃɾݕূڥʯ (͜͜Ͱͷఆٛ) ʮWebαʔϏεͷαʔόʔΛҙͷ(ϦϙδτϦͷϒϥϯνͷ)ঢ়ଶͰىಈ ͯ͠ɺಠཱͨ͠URLͰ֎෦͔ΒΞΫηεͰ͖ΔΑ͏ʹͨ͠ͷʯ
ʮϒϥϯνผ։ൃɾݕূڥʯ͕ඞཁͳ໘ ΤϯδχΞϩʔΧϧͰ։ൃڥΛىಈͰ͖Δɺ͕ ͦΕҎ֎ͷਓ։ൃதͷαʔόʔʹΞΫηε͍ͨ͜͠ͱଟ͍ νʔϜ֎ͷਓʹ։ൃதͷঢ়ଶΛݟͯΒ͍͍ͨ - ͓٬͞Μͱ͔ؔऀ ෳਓͰಉ͡ڥʹಉ࣌ʹΞΫηε͍ͨ͠ - ήʔϜͩͱνʔϜνΣοΫͱ͍͏จԽ͕͋Δ -
ෳਓͰΞΫηε͠ͳ͍ͱཱ͠ͳ͍ΞϓϦέʔγϣϯ
ʮϒϥϯνผ։ൃɾݕূڥʯ͕ඞཁͳ໘ ΤϯδχΞҎ֎Ͱࣗઐ༻ͷαʔόʔ͕΄͍͠ - ςετɺQAͷͨΊ - σβΠφʔ͕ը૾ΞηοτΛ࣮ػ֬ೝ͢ΔͨΊ - σΟϨΫλʔ͕Ϛελʔσʔλ͓ΒͤͳͲΛ֬ೝ͢ΔͨΊ ڥͷىಈɺఀࢭ୭ͰͰ͖ΔΑ͏ʹͳ͍ͬͯͯ΄͍͠ ʮXXXڥΛىಈ͓ئ͍͠·͢ʂʯʮߋ৽͓ئ͍͠·͢ʂʯ…
ΤϯδχΞ͕͍͍ͪͪରԠ͍ͯͨ͠Βେม
࣮ݱํ๏(1) ʮࣄલʹෳڥΛ࡞͍ͯ͠ճ͢ʯ ͋Β͔͡ΊɺڥΛෳ༻ҙ͓ͯ͘͠ ڥҙͷϒϥϯνʹΓସ͑ͯىಈͰ͖ ΔΑ͏ʹ͓ͯ͘͠ ͍͍ͨਓ͕ۭ͍͍ͯΔڥΛ ҙͷϒϥϯνͰىಈͯ͠͏ - ୭͕Ͳ͜Λ͍ͬͯΔ͔Λཧ͢Δඞཁ
- ͍ऴΘͬͨΒ͔ʹ։์͠ͳ͍ͱଞͷਓ ͕͑ͳ͍ - ͔ͱ͍ͬͯશһ༻ҙ͢Δͱߴίετ
࣮ݱํ๏(2) ʮඞཁͳ࣌ʹIaCͰશ෦࡞Δʯ ͍͍ͨλΠϛϯάͰඞཁͳαʔόʔϦιʔεΛҰࣜ·Δͬͱ࡞ ྫ: AWSͰALB + ECS + RDS +
Elas0Cache ALB, ECSαʔϏε/λεΫ, RDS, ElastCache Λ࡞Ͱ͖Δίʔυ (Terraformͱ͔CFnͱ͔CDKͱ͔)Λ࡞͓͍ͬͯͯόʔϯ
ʮඞཁͳ࣌ʹIaCͰશ෦࡞Δʯ ํ๏ͷ ࡞Δͷʹֻ͕͔࣌ؒΔ(͕ͭ͋Δ) - ৽نͷRDSElas*CacheΛىಈ͢Δͱ20ʙͱ͔ Ұؙࣜ͝ͱ༻ҙ͢Δͱͱʹֻ͔͓͕͔ۚ͘Δ - ফ͠ΕΔͱ… ! ڞ༻Ϧιʔεͱಈతͳ࡞/আͱIaCͷ૬ੑ͕ඍົ(ͳ͜ͱ͕͋Δ)
- ίετݮͷͨΊʹҰ෦ͷϦιʔε(LBͳͲ)Λڞ༻͢Δͱى͖͕ͪ - ڥAͷ࡞ͱBͷআฏߦͰͰ͖ͳ͍ɺͱ͔
ํ๏(1)(2)ͷ ͋Β͔͡Ί༻ҙ͓ͯ͘͠ͱऔΓ߹͍ʹ(ཧίετ) Γͳ͍ͱ͕ͪ࣌ؒແବʹ(࣌ؒ) શһΛৗʹ༻ҙ͢Δͱֻ͓͕͔ۚΔ(Πϯϑϥίετ) ىಈͱఀࢭʹֻ͕͔࣌ؒΔͱ͕ͪ࣌ؒແବ(࣌ؒ) ֻ͕͔࣌ؒΔͱख์ͨ͘͠ͳ͘ͳΔ(ෆɾ์ஔ→Πϯϑϥίετ) ͍ͭͰඞཁͳ͚ͩɺߴʹىಈͰ͖ͯίετͳΈ͕΄͍͠
͍ͭͰඞཁͳ͚ͩ ߴʹىಈͰ͖ͯ ͔͠ίετ Λ࣮ݱ͢Δ
mirage-ecs ʮϒϥϯνผ։ൃɾݕূڥʯΛߴʹىಈͰ͖Δ ίετͰ࣮ݱ͢ΔιϑτΣΞ(OSS) github.com/acidlemon/mirage-ecs mirage-ecs is a reverse proxy for
ECS tasks and a manager for the tasks. ECSλεΫͷϚωʔδϟʔ݉ϦόʔεϓϩΩγ
Demo
֓೦ਤ ALBʹ *.example.com ΛׂΓͯΔ mirage-ecsʹશͯͷϦΫΤετΛసૹ - foo.example.com ڥ foo ʹproxy
- bar.example.com ڥ bar ʹproxy mirage.example.com Ͱ WebUI / API Λఏ ڙ - ڥىಈ → ECS RunTask - ڥআ → ECS StopTask mirage-ecs ͱ 1.ʮڥʯΛ ECS ͷλεΫͱͯ͠ىಈ/ఀࢭ 2.ʮڥʯͷϦΫΤετΛλεΫʹ Reverse Proxy͢ΔιϑτΣΞ
mirage-ecsΛ͏ͱͳʹ͕خ͍͔͠ ͍͍ͨڥΛԿݸͰɺ͙͢ʹ༻ҙͰ͖Δ - ECSλεΫΛFargateͰىಈ͢Ε͍ͭ͘Ͱ - ىಈ࣌ؒ࠷1ʙͯ͘10ఔ ίετ - 1ڥ =
ECSλεΫ1ݸ(1ʙ2vCPU, Memory 4GBʙ) - ECS on EC2Ͱಈ͔͢͜ͱՄೳ ڥͷىಈআ͕WebUIͱAPIͰૢ࡞Ͱ͖Δ - WebUI: ඇΤϯδχΞʹ༏͍͠ - API: ىಈ/আΛSlack botͳͲͰ࣮Ͱ͖Δ
ChatOpsͷྫ
WebΞϓϦέʔγϣϯΛmirage-ecsͰىಈ͢Δ ඞཁͳͷͱϦϙδτϦ͕ೖͬͨΠϝʔδͱECSλεΫఆٛΛ༻ҙ - GitϦϙδτϦΛΠϝʔδʹম͖ࠐΜͰ͓͘(େ͖ͳϦϙδτϦͷ߹) - খ͍͞߹ىಈ࣌ʹશ෦cloneͯ͠Α͍ mirage-ecs͕ఆٛ͢Δڥม ىಈ࣌ʹڥ໊ͱϒϥϯνΛࢦఆ͢ΔͱɺڥมΛઃఆ͢Δ - SUBDOMAIN
: ڥ໊ fujiwara, event-111, ……ͳͲαϒυϝΠϯ - GIT_BRANCH : main, feature/some-x, …… Gitͷϒϥϯν໊ - ΄͔ʹઃఆͰҙͷڥมΛఆٛͰ͖Δ ↑ WebUI/API͔Βىಈ࣌ʹࢦఆՄೳ
WebΞϓϦέʔγϣϯΛmirage-ecsͰىಈ͢Δ ίϯςφͷentrypointͰ… ϒϥϯνΛΓସ͑Δ - git (clone|fetch) && switch Ͱ͍͍ͨϒϥϯνʹΓସ͑Δ -
git switch origin/$GIT_BRANCH ← ىಈ࣌ʹࢦఆͨ͠ϒϥϯν DBͳͲͷ֎෦ϦιʔεΛ༻ҙ͢Δ - ࡞ʹֻ͕͔࣌ؒΒͳ͍ɺैྔ՝ۚͳϦιʔεͦͷͰ࡞ - $SUBDOMAIN Λ໊લʹؚΊͯผͷͷͱͯ͠࡞Δ - DynamoDB ͷςʔϒϧͱ͔SQS queueͱ͔
WebΞϓϦέʔγϣϯΛmirage-ecsͰىಈ͢Δ ىಈʹֻ͕͔࣌ؒΔɺ࠷՝ֹ͕ۚେ͖͍Ϧιʔεڞ༻͢Δ ྫ: RDS (MySQL) - σʔλϕʔεΛ$SUBDOMAINΛݩʹͯ͠࡞Δ - DBNAME=$(echo $SUBDOMAIN
| tr - _) mysql -e "CREATE DATABASE IF NOT EXISTS $DBNAME ..." ྫ: Elas'Cache Redis - key_prefix Λ ${SUBDOMAIN}: ʹͯ͠ཧతʹ (ΫϥΠΞϯτϥΠϒϥϦͷػೳ)
WebΞϓϦέʔγϣϯΛ mirage-ecsͰىಈ ֎෦Ϧιʔεͷ४උ͕ऴΘͬͨΒىಈ - DB migra*onॳظσʔλͷimport - ϥΠϒϥϦͷߋ৽ (CPAN, Gem...)ɺϏϧυ
- αʔόʔىಈ (plackup, rails s...) ىಈͨ͠ڥͷReverse Proxymirage-ecs ͕ࣗಈͰఆٛͯ͘͠Ε·͢
mirageҰͷྺ࢙
2014 mirage ੜ "DockerͰඇΤϯδχΞͰ։ൃڥΛ্͛Լ͛Ͱ͖Δɺ mirageͱ͍͏πʔϧΛ࡞Γ·ͨ͠" https://techblog.kayac.com/mirage_for_docker.html 20148݄ @acidlemon ͕࡞ɺϦϦʔε ϗετ্ͰDockerίϯςφΛىಈͯ͠Reverse
Proxy͢ΔΈ
mirage ֓೦ਤ
mirageͱͯศརͩͬͨ ͪΐͬͱେ͖ΊͷΠϯελϯεΛ༻ҙ͢Εɺ ݸผͷ։ൃڥ͕͍ͭ͘Ͱ͙͢ʹىಈͰ͖ͯ࠷ߴʂ ͔࣌͠͠ྲྀΕͯ2018ʙ৽نϓϩδΣΫτͰίϯςφ(ECS)ڥ͕ओྲྀʹ 2019ʙ ͍Α͍Αେίϯςφ࣌ ৽ن͚ͩͰͳ͘طଘͷEC2ͷαʔϏεECSʹҠߦ͍ͯ͘͠ྲྀΕ
ຊ൪͕ECSʹͳͬͯmirageʹͪΐͬͱෆຬ͕ ىಈ͢ΔڥϗετͷDockerͰىಈ͢Δʮίϯςφʯ mirageͱผͷϗετͰίϯςφΛىಈ͢Δ͜ͱͰ͖ͳ͍ (remoteͰdocker APIΛୟ͚ཧతʹͰ͖Δ͕ ํ๏༻ҙ͞Ε͍ͯͳ͔ͬͨ) ڥ໊/ίϯςφͷରԠΛLevelDBͰϩʔΧϧετϨʔδʹه ͭ·Γϗετ1Ͱͷಈ࡞͕લఏ
mirageͷݶք - γϯάϧϗετߏ େྔͷڥΛىಈ͢Δʹେ͖ͳ1ͷΠϯελϯε͕ඞཁ → CPU͋ΔఔΦʔόʔίϛοτͰ͖Δ͕ϝϞϦඞཁ ىಈ࣌ϚΠάϨʔγϣϯ࣌ʹϗετͷετϨʔδΛࠅ͢Δ → IO͕͍ΠϯελϯεͰಈ͔͍ͨ͠ EC2ͳΒi3ΠϯελϯεͷΤϑΣϝϥϧSSDͱ͔
εέʔϧ͍ͨ͠ͱ͖=ಈ͍͍ͯΔϗετ͕ݶքʹୡͨ͠ͱ͖ ҰڥΛશ෦མͱͯ͠ىಈ͔͢͠͠ͳ͍
mirageͷ՝ - αΠυΧʔΛ࣋ͯͳ͍ ڥͱͯ͠ىಈ͢Δ୯Ґ = ίϯςφ ඞཁͳαʔόʔɺϛυϧΣΞΛશͯ٧ΊࠐΜͰsupervisorͰىಈ foreman (Ruby) /
kazeburo͞ΜͷProclet (Perl) / ma;n͞Μͷgoreman (Go) ͋ΒΏΔͷ͕શ෦ೖΓͷಛΓίϯςφʹ
20196݄ mirage-ecsੜ ։ൃڥ͚ͩͷͨΊʹEC2Λҡ࣋ͨ͘͠ͳ͍ ϓϩϏδϣχϯάύονͯ࠶ىಈ໘ εέʔϥϒϧͳmirage͕΄͍͠! ͍ͭΧοͱͳͬͯ mirageΛforkͯ͠mirage-ecsΛ։ൃ ༨͍ͬͯͨ༗ٳΛ3ফԽͨ͠ΒͰ͖ͨ ͦͷޙ
acidlemon/mirage-ecs ʹtransfer
mirage ͱ mirage-ecs
mirage → mirage-ecs LevelDB → ετϨʔδϨε - ReverseProxyͷͨΊʹʮڥ໊ʯ->ʮIPΞυϨεʯͷϚοϐϯά͕ඞཁ - ECSλεΫʹλά͕࣋ͯΔ
- ڥ໊ͳͲͷϝλσʔλλάʹೖΕΔɺIPΞυϨεECS͕͍ͬͯ Δ - ఆظతʹECS APIͰλεΫͱIPΞυϨεΛऔಘͯ͠ReverseProxyఆٛΛ ߋ৽ αΠυΧʔΛ࣋ͯΔ - ʮڥ=ίϯςφʯ→ʮڥ=ECSλεΫ(ίϯςφ࠷େ10ݸ)ʯ
mirage → mirage-ecs γϯάϧϗετߏ → ෳߏʹͰ͖Δ - ڥmirage͕ಈ࡞͢Δϗετ্Ͱͳ͘ಠཱͯ͠ىಈ - mirage-ecsࣗମετϨʔδϨεͳͷͰෳͰಈ࡞Ͱ͖Δ
ͱ͍͑Proxy͔͠͠ͳ͍ͷͰ100ڥ͋ͬͯ1Ͱे σϓϩΠrollingͰOK - ڥͱVPCͰ௨৴͢ΔͷͰෳͰಈ࡞Ͱ͖Δ
mirage → mirage-ecs 1ͷΠϯελϯε+mirage(ϓϩηε)+ෳͷDockerίϯςφ(ϓϩηε) ͔Β ෳͷΠϯελϯε(ECSΫϥελ) + mirage-ecs(ECSαʔϏε) + ෳͷڥ(ECSλεΫ)
Πϯελϯε → Ϋϥελ / ϓϩηε → λεΫ εέʔϥϏϦςΟΛ֫ಘ͢ΔͨΊͷίϯςφٕज़ʹͬͨਖ਼౷ਐԽ
͏͙͢10ࡀʹͳΔαʔϏεҠߦ͠·ͨ͠ https://techblog.kayac.com/2021/12/20/120000 https://commojun.github.io/yapc2022/
mirage-ecsͷઃܭͱ࣮
mirage-ecs = GoͷWeb APIαʔόʔ݉reverse proxy ϝΠϯͷHTTPαʔόʔ: ϦΫΤετΛશ෦ड͚ͯHostϔομΛΈΔ - mirage.* →
ΞϓϦέʔγϣϯϋϯυϥΛ࣮ߦ - ͦΕҎ֎ → HostʹରԠͨ͠ڥѼͯͷReverseProxyΛ࣮ߦ ͦͷଞͷgorou%ne worker - ECS APIΛୟ͍ͯReverseProxyΛߋ৽͢Δworker ʮڥ=λεΫʯ͕૿͑ͨΒReveseProxyΛ࡞ͯ͠mapʹՃ ݮͬͨΒReveseProxyΛmap͔Βআ - ϦΫΤετूܭΛCloudWatchʹ͛Δworker
ڥ͝ͱͷreverse proxyͷ࣮ github.com/methane/rproxy WebSocketରԠͷ୯ҰϗετѼͷReverseProxy࣮ϥΠϒϥϦ 11લʹ࡞ΒΕͨͷ(ͦͷޙߋ৽ͳ͍͕…) Goͷඪ४ϞδϡʔϧͷΈͰͰ͖͍ͯΔͷͰ Go 1.22(2024)ͰͪΌΜͱಈ͘ʂʂ ALBWebSocketʹରԠ͍ͯ͠ΔͷͰ Կߟ͑ͣʹWebSocket͕ಈ͖·͢
ετϨʔδϨε ཧ͢ΔͷΛݮΒͯ͠σϓϩΠΛ༰қʹ͢ΔͨΊ mirage-ecsECSαʔϏεΛσϓϩΠ͢Εಈ࡞͢Δ - ॳmirageετϨʔδʹLevelDB(KVS)Λ͍ͬͯͨ - AWSઐ༻ͳͷͰDynamoDBΛ͏͜ͱߟ͕͑ͨ…… - ECSͷλάʹใΛ࣋ͭ͜ͱͰετϨʔδϨεʹ ڥ͍͍ͤͥ100+ݸఔͳͷͰ͜ΕͰे
ਓӬଓετϨʔδΛཧͨ͘͠ͳ͍
ίϯϑΟάϨε ॳmirageͰඞཁͩͬͨઃఆ͜Ε͚ͩ host: webapi: mirage.example.com reverse_proxy_suffix: ".example.com" listen: http: -
listen: 80 target: 80 ͜Ε͙Β͍ͳΒखͰॻ͍ͯͳ͍͕…
ECSͰλεΫΛىಈ͢ΔͨΊͷઃఆ͕(Ͳ͏ͯ͠)ඞཁ ecs: region: "ap-northeast-1" cluster: mycluster default_task_definition: myapp enable_execute_command: true
launch_type: FARGATE network_configuration: awsvpc_configuration: subnets: - subnet-aaaa0000 - subnet-bbbb1111 - subnet-cccc2222 security_groups: - sg-11112222 - sg-aaaagggg assign_public_ip: ENABLED
ࣗಈઃఆػೳΛ࡞ͬͨ mirage-ecsࣗମ͕ECSͰಈ͘લఏͳͷͰࣗࣗͷઃఆΛྲྀ༻͢Δ - λεΫϝλσʔλAPIͰ͕ࣗಈ͍͍ͯΔΫϥελ໊ͱλεΫIDΛऔಘ - λεΫID͔ΒECSαʔϏε໊Λऔಘ (ͳ͔ͥ͜Εϝλσʔλʹͳ͍) - ECSαʔϏεͷNetworkConfigura<onͳͲΛऔಘ ઃఆϑΝΠϧͷECSઃఆ͕ಛʹͳ͍߹ɺσϑΥϧτͰ͜ΕΛ͏
ਓઃఆϑΝΠϧΛॻ͖ͨ͘ͳ͍
mirage-ecsͷ࣮ફతͳӡ༻
mirage link ECSλεΫʹ10ίϯςφ·ͰؚΊΒΕΔ͕Γͳ͘ͳͬͯࠔͬͨͷͰ… 1. ىಈ࣌ʹෳͷλεΫఆٛ(A,B)Λ͢(Ϣʔβʔ) 2. ͦΕͧΕͷλεΫఆ͔ٛΒλεΫa,bΛىಈ͢Δ (mirage-ecs) 3. ίϯςφ໊ͱλεΫͷIPΞυϨεͰRoute53ʹ໊લΛఆٛ(mirage-ecs)
nginx.foo.example.com λεΫaͷIPΞυϨε webapp.foo.example.com λεΫaͷIPΞυϨε backend.foo.example.com λεΫbͷIPΞυϨε sidecar.foo.example.com λεΫbͷIPΞυϨε ෳͷλεΫΛ1ͭͷʮڥʯͱͯ͠ѻ͑Δ
ΞΫηεܭଌͱఆظআ ൺֱతίετͱ͍͑ɺڥʹൺྫͯ͠ίετֻ͔Δ ͍ͬͯͳ͍ڥΛࣗಈతʹఀࢭ͍ͨ͠ʂ - http.TransportΛΧελϚΠζͯ͠ReverseProxyʹ ΞΫηεΧϯλʔΛ࣮ - ʮڥʯ୯ҐͰ1͋ͨΓͷHTTPΞΫηεΛه - ຖCloudWatchʹMetricsͱͯ͠ૹ৴
͜ΕͰʮҰఆظؒΞΫηε͕ͳ͍(=ΘΕ͍ͯͳ͍)ڥʯ͕͔Δ
POST /api/purge { "excludes": ["foo", "bar"], "exclude_tags": ["branch:preview"], "duration": 86400
} excludes: ಛఆͷڥ໊আ֎ exclude_tags: ࢦఆͨ͠λά͕͍͍ͯΔڥআ֎ duration: աڈࢦఆͨ͠ඵʹΞΫηε͕ͳ͍ڥΛআ͢Δ ࢭΊͨ͘ͳ͍ڥ͋ΔͷͰআ֎݅ΛࢦఆՄೳ(ސ٬͚ͱ͔)
ڥ͕ىಈͰ͖ͳ͍ཧ༝ΛΓ͍ͨ ECSλεΫɺཱͨͳ͍ͱ͖ࠔΓ·͢ΑͶ… github.com/fujiwara/tracer "Amazon ECS λεΫͷΠϕϯτͱϩάΛ࣌ܥྻͰग़͢ tracer Λ࡞ͬͨ"4 - λεΫʹؔ࿈͢ΔΠϕϯτ(࡞ɺىಈ։࢝ɺpull։࢝ͱఀࢭɺఀࢭ։
࢝ɺఀࢭྃͳͲ) - λεΫͷίϯςφ͕ CloudWatch Logs ʹग़ྗͨ͠ϩά - (ECS αʔϏε͔Βىಈ͞ΕͨλεΫͷ߹) αʔϏεͷΠϕϯτϩά ͜ΕΛmirage-ecsͷWebUI͔Β͙͢ݟΒΕΔΑ͏ʹ 4 h$ps:/ /techblog.kayac.com/ecs-task-tracer
tracerͷग़ྗྫ (ىಈ→ఀࢭ) 2024-01-31T07:05:17.529Z TASK Created 2024-01-31T07:05:32.718Z CONTAINER:nginx LastStatus:PENDING HealthStatus:UNKNOWN 2024-01-31T07:05:32.718Z
TASK LastStatus:PENDING 2024-01-31T07:05:22.775Z TASK Connected 2024-01-31T07:05:32.391Z TASK Pull started 2024-01-31T07:05:39.561Z TASK Pull stopped 2024-01-31T07:05:39.590Z TASK Started 2024-01-31T07:05:40.070Z CONTAINER:nginx LastStatus:PENDING HealthStatus:UNKNOWN 2024-01-31T07:05:40.070Z TASK LastStatus:PENDING 2024-01-31T07:05:40.070Z CONTAINER:nginx LastStatus:RUNNING HealthStatus:UNKNOWN 2024-01-31T07:05:40.070Z TASK LastStatus:RUNNING 2024-01-31T07:05:39.573Z CONTAINER:nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2024-01-31T07:05:39.573Z CONTAINER:nginx /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2024-01-31T07:05:39.576Z CONTAINER:nginx /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh -- (ུ) -- 2024-02-04T01:03:04.797Z TASK LastStatus:STOPPED 2024-02-04T01:02:50.022Z TASK Stopping 2024-02-04T01:02:50.022Z TASK StoppedReason:Terminate requested by Mirage 2024-02-04T01:02:50.022Z TASK StoppedCode:UserInitiated 2024-02-04T01:02:52.015Z CONTAINER:nginx 2024/02/04 01:02:52 [notice] 1#1: signal 15 (SIGTERM) received, exiting 2024-02-04T01:02:52.018Z CONTAINER:nginx 2024/02/04 01:02:52 [notice] 34#34: exiting 2024-02-04T01:02:52.018Z CONTAINER:nginx 2024/02/04 01:02:52 [notice] 35#35: exiting 2024-02-04T01:02:52.018Z CONTAINER:nginx 2024/02/04 01:02:52 [notice] 34#34: exit
tracerͷग़ྗྫ (ىಈࣦഊ) 2024-02-04T01:09:02.676Z TASK Created 2024-02-04T01:09:08.180Z TASK LastStatus:STOPPED 2024-02-04T01:09:08.180Z TASK
LastStatus:DEPROVISIONING 2024-02-04T01:09:08.180Z TASK LastStatus:PROVISIONING 2024-02-04T01:09:06.503Z TASK Connected 2024-02-04T01:09:21.109Z TASK Execution stopped 2024-02-04T01:09:31.147Z TASK Stopping 2024-02-04T01:09:31.147Z TASK StoppedReason:CannotPullContainerError: pull image manifest has been retried 1 time(s): failed to resolve ref docker.io/library/nginx:lates: docker.io/library/nginx:lates: not found 2024-02-04T01:09:31.147Z TASK StoppedCode:TaskFailedToStart imageΛpullͰ͖͍ͯͳ͍ͨΊ StoppedCode:TaskFailedToStart ͳͷ͕͙͔͢Δ
ଞʹศརػೳ͕͍Ζ͍Ζ ೝূೝՄͱ͔ɺڥ໊ͷϫΠϧυΧʔυରԠͱ͔… ৄ͘͠ github.com/acidlemon/mirage-ecs ΛͲ͏ͧ
·ͱΊ ʮϒϥϯνผ։ൃɾݕূڥʯ͕͋Δͱ։ൃޮ্͕͕Γ·͢ ͕ɺ࣮ํ๏ʹΑͬͯίετ͕େ͖͘ͳΓ͕ͪͰ͢ acidlemon/mirage-ecs ಠཱͨ͠ʮڥʯΛECSλεΫͱͯ͠ىಈ͢Δ গͳ͍ίετͰɺ͍ͭ͘ͰߴʹݕূڥΛىಈͰ͖Δ OSS Ͱ͢