Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
460
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
8
2.1k
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
9
6k
さくらのクラウドでのシークレット管理を考える/tamachi.sre#2
fujiwara3
2
400
Amazon ECS デプロイツール ecspresso の開発を支える「正しい抽象化」の探求 / YAPC::Fukuoka 2025
fujiwara3
13
14k
パフォーマンスチューニングのために普段からできること/Performance Tuning: Daily Practices
fujiwara3
9
6.9k
alecthomas/kong はいいぞ
fujiwara3
7
2.6k
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
12
3.8k
さくらのIaaS基盤のモニタリングとOpenTelemetry/OSC Hokkaido 2025
fujiwara3
4
5.4k
Other Decks in Technology
See All in Technology
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
1
300
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
150
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
300
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.9k
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
310
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
340
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
150
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.4k
20260912_スクラムにジェネラリストは必要か
ryugen04
0
330
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
410
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
190
GoにおけるFFIのこれまでとこれから
goccy
5
2.4k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Raft: Consensus for Rubyists
vanstee
141
7.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
930
Six Lessons from altMBA
skipperchong
29
4.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
820
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 Ͱ͢