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
350
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
250
定期リリースの導入
hiroki_tanaka
0
180
noteの品質課題に立ち上げ直後のQAチームが挑んだ軌跡
hiroki_tanaka
1
1.5k
note初のBug Bashを やってみた
hiroki_tanaka
1
1.5k
コロナ禍の1年間でAWSの資格を 3つ取得した話
hiroki_tanaka
0
400
Rubocop対応のすゝめ
hiroki_tanaka
0
72
Gotanda.rb#47 Mailgun3分クッキング
hiroki_tanaka
1
7.2k
Gotanda.rb#46 権限管理のつらみとPundit
hiroki_tanaka
1
7.3k
Other Decks in Technology
See All in Technology
ヘブンバーンズレッドのレンダリングパイプライン刷新
gree_tech
PRO
0
520
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
170
まだ間に合う! StrandsとBedrock AgentCoreでAIエージェント構築に入門しよう
minorun365
PRO
11
860
フィンテック養成勉強会#56
finengine
0
120
Agile PBL at New Grads Trainings
kawaguti
PRO
1
230
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
110
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
220
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
9.9k
『FailNet~やらかし共有SNS~』エレベーターピッチ
yokomachi
1
200
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
30k
【 LLMエンジニアがヒューマノイド開発に挑んでみた 】 - 第104回 Machine Learning 15minutes! Hybrid
soneo1127
0
280
AI開発ツールCreateがAnythingになったよ
tendasato
0
100
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Docker and Python
trallard
45
3.5k
Producing Creativity
orderedlist
PRO
347
40k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Building an army of robots
kneath
306
46k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Fireside Chat
paigeccino
39
3.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
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ճ ޙչͨ͠ɻɻɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ