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
Gotanda.rb#48 ECS on Fargateでのハマりポイント
Search
Hiroki Tanaka
November 25, 2020
Technology
420
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gotanda.rb#48 ECS on Fargateでのハマりポイント
Gotanda.rb#48でLT発表した『ECS on Fargateでのハマりポイント』です。
Hiroki Tanaka
November 25, 2020
More Decks by Hiroki Tanaka
See All by Hiroki Tanaka
機能QA会のすゝめ
hiroki_tanaka
0
330
定期リリースの導入
hiroki_tanaka
0
250
noteの品質課題に立ち上げ直後のQAチームが挑んだ軌跡
hiroki_tanaka
1
1.6k
note初のBug Bashを やってみた
hiroki_tanaka
1
1.6k
コロナ禍の1年間でAWSの資格を 3つ取得した話
hiroki_tanaka
0
580
Rubocop対応のすゝめ
hiroki_tanaka
0
110
Gotanda.rb#47 Mailgun3分クッキング
hiroki_tanaka
1
7.6k
Gotanda.rb#46 権限管理のつらみとPundit
hiroki_tanaka
1
7.6k
Other Decks in Technology
See All in Technology
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
380
「エーアイ」をバズワードにしないために RPA 導入経験と Kiro 上での Claude モデル利用経験から
kazzpapa3
0
110
Refining Active Record
shugo
0
190
企画を Software Factory-ready にする——開発が高速になったとき、PdMの仕事はどう変わったか
yachibit
1
130
Optunaの最新リリースv5.0について
pfn
PRO
0
130
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
150
生成AI時代、PMは事業責任者に進化するともっと面白い〜PMだからこそ事業構造を動かせる時代に〜
kakehashi
PRO
0
220
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
160
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
380
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
3
1k
AWSセキュリティで活用するAI機能
cmusudakeisuke
1
180
Codex を使った障害対応机上演習の実際
orgachem
PRO
0
250
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
4
540
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Building the Perfect Custom Keyboard
takai
2
910
Claude Code のすすめ
schroneko
67
230k
Documentation Writing (for coders)
carmenintech
77
5.6k
Docker and Python
trallard
47
4.2k
The Curious Case for Waylosing
cassininazir
1
570
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
430
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Transcript
Gotanda.rb#48 ECS on FargateͰͷϋϚΓϙΠϯτ 2020/11/25 גࣜձࣾτϨλ @hiroki_tanaka
ࣗݾհ ɾాத جɿ@hiroki_tanaka ɾSIerɿϑϡʔνϟʔΞʔΩςΫτ(4ؒ) →WebܥϕϯνϟʔɿגࣜձࣾτϨλ(1ؒ) ɾRubyɿ2ɾJavaɿ2ɾSQLɿ5 →࠷ۙΠϯϑϥΤϯδχΞݟश͍தɻ ɾझຯɿεϓϥτΡʔϯɾમ౬८Γ ※3࿈ٳʹࢿྉΛ࡞Ζ͏ͱࢥͬͨͷͰ͕͢ɺ ଳঢ়᙮Ͱ͙ͬͨΓ͍ͯͨͨ͠Ίಥ؏Ͱ͢…͢Έ·ͤΜ(*´Д⊂ʋŠƄŸƃūšŘ
ࠓ͢͜ͱɾ͞ͳ͍͜ͱ ʲ͢͜ͱʳ - nginx+unicorn+RailsΛECS on FargateͰӡ༻͠Α͏ͱࢥͬͨ ࡍʹϋϚͬͨ͜ͱ - nginx+unicornؒͷHTTP௨৴ɾSocket௨৴ͷҧ͍ -
unicornͷΞϓϦέʔγϣϯϩάΛCloudWatch Logsʹग़ྗ͢Δํ๏ ʲ͞ͳ͍͜ͱʳ - RailsͷΞϓϦέʔγϣϯαʔόͷҧ͍ →puma/Webrick/unicornͳͲ - puma/Webrick/unicornͷجຊతͳ͍ํ
ΠϯϑϥΤϯδχΞʹͳΓͨͯͷ ͋Δͷग़དྷࣄ
طଘͷRailsΞϓϦΛ EC2͔ΒECSʹҠߦͯ͠ΈΑ͏ɻ ઌഐ
ݩʑͷEC2ߏ - ҰൠతͳEC2ߏɻ - EC2্ͰnginxͱRails(unicorn)ΛͦΕͧΕىಈͤͯ͞ɺALB ͔Βnginxɺnginx͔ΒRails(unicorn)ʹΞΫηε͢Δɻ - ։ൃڥDockerԽͤͣʹࣗͷϗετ্ʹ࡞͍ͬͯͨɻ
ࠓճࢦͨ͠ͷECSߏ - ҰൠతͳECSߏɻ - ECS্ͰnginxͱRails(unicorn)ͷίϯςφΛͦΕͧΕىಈ͞ ͤͯɺALB͔Βnginxɺnginx͔ΒunicornʹΞΫηε͢Δɻ - ECSFargateͰཧ͠ɺΞϓϦέʔγϣϯϩά CloudWatch Logsʹग़ྗ͢Δɻ
- ։ൃڥdocker-composeΛ ༻͍ͯDockerίϯςφԽɻ
ECS on FargateͷϝϦοτ - FargateΛར༻͢Εɺ৭ʑͳ͜ͱ͕AWSଆʹΞτ ιʔεग़དྷΔͷͰӡ༻ෛՙ͕͍ɻ - EC2ΠϯελϯεͷϓϩϏδϣχϯάཧɻ - ੬ऑੑରԠͷͨΊͷύονͯOSΞοϓσʔτ
- EC2Πϯελϯε্ͷ֤ϛυϧΣΞͷΞοϓσʔτ - ֤ϛυϧΣΞͷόʔδϣϯ߹ੑཧ…etc - ঢ়ଶҟৗ͕ൃੜͨ͠EC2Πϯελϯεͷ࠶ىಈೖΕସ͑ɻ - ϗετϨϕϧͷεέʔϦϯάཧɻ
ECS on FargateͷσϝϦοτ - SSHଓग़དྷͳ͍ͷͰɺσόοΫ͕Γʹ͍͘ɻ - ʮίϯςφʹೖͬͯRailsίϚϯυΛ࣮ߦ͢ΔʯʮΞϓϦ έʔγϣϯϩάΛ֬ೝ͢Δʯͱ͍ͬͨ͜ͱ͕ग़དྷͳ͍ɻ - SSMઃఆ͢ΕೖΕΔΑ͏ʹͳΔ͕ઃఆ͕தʑ໘ɻ
Կͱ͋Ε3BJMTΞϓϦΛ %PDLFSίϯςφԽ͠Α͏ɻ ͦΕΛJNBHFԽͯ͠&$3ʹQVTI͢Εɺ ଟ͏·͍͘͘Ͱ͠ΐʂ
OHJOY͔ΒΤϥʔ͕ฦ٫ʂ
ϋϚΓᶃɿnginx+unicornؒͷ௨৴ํ๏ - nginxͱunicornؒͷଓํ๏ʹUNIXυϝΠϯι έοτ(Socket௨৴)ͱϦόʔεϓϩΩγ(HTTP௨৴)ͷ2 छྨ͋Δɻ - 2ͭͷҧ͍Λશ͘ҙࣝͤͣʹEC2ߏͷ࣌ಉ༷ʹSocket௨৴ Λબ͍ͯͨ͠ɻ - ͜Ε͕ݪҼͰECSʹஔ͖͑ͨࡍʹALB~nginx·ͰḷΓண
͕͘ɺnginx͔Βunicornͷ௨৴͕ग़དྷͣʹ404Τϥʔͱ ͳ͍ͬͯͨɻ
UNIXυϝΠϯιέοτ(Socket௨৴) - UNIXυϝΠϯιέοτ୯ҰϚγϯ্ͷߴޮͳϓ ϩηεؒ௨৴ʹ༻͍ΒΕΔ௨৴ΠϯλʔϑΣʔεɻ - ϑΝΠϧγεςϜΛհͯ͠ϓϩηεಉ࢜ͷ௨৴Λߦ͏ɻ - ϦόʔεϓϩΩγΑΓߴʹಈ࡞͢Δ͕ɺϑΝΠϧγες ϜΛհ͢ΔͷͰ୯ҰϚγϯ্Ͱ͔͠ಈ࡞Ͱ͖ͳ͍ɻ -
EC2ߏͷΑ͏ʹnginxͱunicorn͕ಉҰϚγϯ্ʹ͋Δ߹ ͷҰൠతͳํ๏ɻ
UNIXυϝΠϯιέοτ(Socket௨৴) - Rails্ͷunicornͷઃఆϑΝΠϧͷunicorn.rbͱnginx ͷઃఆϑΝΠϧͷnginx.confԼهͷܗʹͳΔɻ - unicorn.rbϦΫΤετΛड͚औΔϦεφʔʹιέοτͷ PathΛࢦఆ͢Δɻ - nginx.confserverʹunicornͰࢦఆͨ͠UNIXυϝΠϯι έοτͷPathΛࢦఆ͢Δɻ
- nginx.confͷઃఆ - unicorn.rbͷઃఆ
ϦόʔεϓϩΩγ(HTTP௨৴) - ϦόʔεϓϩΩγ௨ৗͷTCP௨৴Λ༻͍ͯɺunicorn ʹϦΫΤετΛߦ͏௨৴ΠϯλʔϑΣʔεɻ - UNIXυϝΠϯιέοτΑΓɻ - nginxͱunicorn͕ผϚγϯ্ʹ͋Δ߹ͷҰൠతͳํ๏ɻ →ECSߏͰɺಉҰλεΫ͕ͩnginxͱRailsผίϯςφͳ ͷͰͪ͜ΒΛ࠾༻͢Δඞཁ͕͋ͬͨɻ
ϦόʔεϓϩΩγ(HTTP௨৴) - Rails্ͷunicornͷઃఆϑΝΠϧͷunicorn.rbͱnginx ͷઃఆϑΝΠϧͷnginx.confԼهͷܗʹͳΔɻ - unicorn.rbϦΫΤετΛड͚औΔϦεφʔʹϙʔτ൪߸Λ ࢦఆ͢Δɻ - nginx.confserverʹ`υϝΠϯ:ϙʔτ൪߸`ͷܗࣜͰunicorn ͕͋ΔRailsΞϓϦΛసૹઌͱͯ͠ࢦఆ͢Δɻ
→ಉҰECSλεΫͷίϯςφؒ௨৴localhostܦ༝Ͱߦ͏ɻ - nginx.confͷઃఆ - unicorn.rbͷઃఆ
RailsΞϓϦʹΞΫηεग़དྷͨʂ
ิɿFargateͰSocket௨৴͍ͨ͠ - FargateͰߴͳ௨৴͕ٻΊΒΕSocket௨৴ʹ ͍ͨ͠߹FargateͷλεΫετϨʔδΛ༻͢Δɻ - Fargate֤ECSλεΫͷϓϩϏδϣχϯά࣌ʹ20GBͷΤ ϑΣϝϥϧετϨʔδׂ͕ΓͯΒΕΔɻ - ͜ͷΤϑΣϝϥϧετϨʔδʹSocketϑΝΠϧΛஔ͠ɺ֤ ίϯςφؒͰڞ༗͢ΔΑ͏ʹઃఆ͢Δ͜ͱͰSocket௨৴͕Մ
ೳʹͳΔɻ
Τϥʔൃੜʂ Ͱɺ3BJMTΞϓϦͷϩά͕$MPVE8BUDI-PHT ʹग़ͯͳ͍͔ΒݪҼෆ໌ʂ
ϋϚΓᶄɿCloudWatch Logsʹϩάग़ྗ - RailsΞϓϦʹ͕ى͖ͨ߹ɺCloudWatch Logs ܦ༝ͰΞϓϦϩάΛ֬ೝ͢Δඞཁ͕͋Δɻ - ECS on EC2ͰSSHग़དྷ͠ίϯςφʹΞΫηεग़དྷΔͨΊ
ϩάϑΝΠϧΛ֬ೝग़དྷΔ͕ɺFargateSSHग़དྷͳ͍ͨ Ίࢀর͕ग़དྷͳ͍ɻ - ͜ΕΛߟྀ͍ͯ͠ͳ͔ͬͨͨΊɺRailsͷΤϥʔ͕ൃੜͨ͠ࡍ ʹϩάΛ֬ೝͰ͖ͣʹࠔͬͨɻ
EC2ɿಛఆͷϩάϑΝΠϧʹग़ྗ - unicorn.rbͷԼهͷՕॴͰunicornͷϩάͷग़ྗઌΛ ఆٛ͢Δɻ - stderr_pathɾstdout_pathʹϩάͷग़ྗઌϑΝΠϧΛࢦఆ ͠ɺͦΕΛखಈͰࢀর͢Δɻ
ECSɿCloudWatch Logsʹग़ྗ - unicornͷϩάΛϩάϑΝΠϧͰͳ͘ɺඪ४ग़ྗ͢ ΔΑ͏ʹ͢Δɻ - unicorn.rbͷstdout_pathstderr_pathΛهࡌ͠ͳ͍͜ͱͰ unicornଆඪ४ग़ྗͱͳΔɻ - ඪ४ग़ྗͷॻ͖ग़͠ઌͱͯ͠ɺECSͷTaskఆٛJSONͰRails
ίϯςφͷlogConfiguration߲ͷϩάग़ྗઌͷ CloudWatch LogsΛࢦఆ͢Δɻ
CloudWatch Logsʹग़ྗग़དྷͨʂ
·ͱΊ - ECSΛ༻͍ͯίϯςφؒͰnginxͱunicornͷ௨৴Λߦ ͏߹ɺݫ֨ͳߴ௨৴͕ٻΊΒΕΔ߹Ҏ֎ HTTP௨৴Λ༻͢Δɻ - Fargateͷ߹SSHଓग़དྷͳ͍ͨΊɺΞϓϦϩά Λඪ४ग़ྗͱͯ͠ɺCloudWatch Logsʹग़ྗ͢Δɻ
͓ΘΓʹ - EC2͔ΒECS on FargateʹRailsΞϓϦΛͤ͑Δͷ ຊհͨ͠ՕॴҎ֎Ͱ୯७Ͱͳ͔͚ͬͨΕͲ ɺख࡞ۀͷഉআɾڥΛҙࣝͤͣʹ։ൃʹूதग़དྷ Δͷ͔ͳΓͷϝϦοτͩͱײͨ͡ɻ - ॳΊͯͷίϯςφԽͳΒɺSSHଓ͕Ͱ͖ͯσόοΫ
͕Γ͍͢ECS on EC2ʹ͢Εྑ͔ͬͨ…ͱ10ճ ޙչͨ͠ɻɻɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ