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
Gotanda.rb#48 ECS on Fargateでのハマりポイント
Search
Hiroki Tanaka
November 25, 2020
Technology
1
370
Gotanda.rb#48 ECS on Fargateでのハマりポイント
Gotanda.rb#48でLT発表した『ECS on Fargateでのハマりポイント』です。
Hiroki Tanaka
November 25, 2020
Tweet
Share
More Decks by Hiroki Tanaka
See All by Hiroki Tanaka
機能QA会のすゝめ
hiroki_tanaka
0
270
定期リリースの導入
hiroki_tanaka
0
200
noteの品質課題に立ち上げ直後のQAチームが挑んだ軌跡
hiroki_tanaka
1
1.5k
note初のBug Bashを やってみた
hiroki_tanaka
1
1.5k
コロナ禍の1年間でAWSの資格を 3つ取得した話
hiroki_tanaka
0
460
Rubocop対応のすゝめ
hiroki_tanaka
0
76
Gotanda.rb#47 Mailgun3分クッキング
hiroki_tanaka
1
7.3k
Gotanda.rb#46 権限管理のつらみとPundit
hiroki_tanaka
1
7.4k
Other Decks in Technology
See All in Technology
複雑さを受け入れるか、拒むか? - 事業成長とともに育ったモノリスを前に私が考えたこと #RSGT2026
murabayashi
1
1.8k
AI Agent Agentic Workflow の可観測性 / Observability of AI Agent Agentic Workflow
yuzujoe
0
120
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
2.7k
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
1.4k
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
910
SES向け、生成AI時代におけるエンジニアリングとセキュリティ
longbowxxx
0
320
サラリーマンソフトウェアエンジニアのキャリア
yuheinakasaka
38
18k
製造業から学んだ「本質を守り現場に合わせるアジャイル実践」
kamitokusari
0
610
旬のブリと旬の技術で楽しむ AI エージェント設計開発レシピ
chack411
1
230
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
140
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
61k
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
78
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
110
How to build a perfect <img>
jonoalderson
1
4.8k
Design in an AI World
tapps
0
120
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Crafting Experiences
bethany
0
28
Test your architecture with Archunit
thirion
1
2.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Designing for Timeless Needs
cassininazir
0
110
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.5k
It's Worth the Effort
3n
188
29k
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ճ ޙչͨ͠ɻɻɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ