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
インフラエンジニアがConsulとStretcherをつかったデプロイ改善で開発効率の向上に貢...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shuichi Ohsawa
April 05, 2018
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
インフラエンジニアがConsulとStretcherをつかったデプロイ改善で開発効率の向上に貢献した話(短縮版 + α) / omotesando.rb #33
Shuichi Ohsawa
April 05, 2018
More Decks by Shuichi Ohsawa
See All by Shuichi Ohsawa
実践的データ基盤への処方箋 輪読会 / round-reading-jissennteki-data-kiban
ohsawa0515
1
280
datatech-jp Casual Talks #1 「BigQueryのネイティブJSON型がサポートされたので触ってみた」 / support-bigquery-native-json-and-try-it
ohsawa0515
0
2.8k
技書博後夜祭 第一夜「AWSのコスト最適化をはじめよう!」 / gishohaku5-koyasai-starting-aws-cost-optimization
ohsawa0515
0
430
JAWS-UG 初心者支部#36 「AWSで高額請求やらかした話」 / story-about-high-billing-on-aws
ohsawa0515
0
1.4k
インフラエンジニアBooks #7 「Amazon Web Servicesコスト最適化入門」 / infra-engineer-books-aws-cost-optimization
ohsawa0515
12
5.2k
ECSでGPUを使う 2020年版 / jawsug-container18-lt-using-gpu-on-ecs-2020
ohsawa0515
0
2.4k
急成長するシステムに追いつくためのインフラ改善への取り組み / sansan-m3-tech-night-improve-infrastructure
ohsawa0515
0
3k
AWS SDK for GoのContextパターン / aws sdk for go context pattern
ohsawa0515
3
830
サーバレスVulsアーキテクチャ再び / serverless-vuls-again
ohsawa0515
1
4.2k
Other Decks in Technology
See All in Technology
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
0
130
8bit CPU 2026
koba789
7
2.8k
安全性・開発速度・ユーザー体験の あいだで考える 事業会社のプロダクトセキュリティ
mixi_engineers
PRO
0
110
Digital Credentials API × OpenID4VP ブラウザ完結型本人確認の実装知見(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
130
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
140
Oracle MCP Servers Explained
thatjeffsmith
1
480
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
130
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
VLMで2.3万枚のPyCon JP写真を検索!
terapyon
1
480
現場回帰したデータエンジニアが考える AI 時代のキャリア開発 / Career Development in the Age of AI Perspectives from a Hands-on Data Engineer
medley
0
330
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Rails Girls Zürich Keynote
gr2m
96
14k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Everyday Curiosity
cassininazir
0
290
Designing for humans not robots
tammielis
254
26k
Being A Developer After 40
akosma
91
590k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
660
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
Transcript
ΠϯϑϥΤϯδχΞ͕ ConsulͱStretcherΛ͔ͭͬͨσϓϩΠվળͰ ։ൃޮͷ্ʹߩݙͨ͠ (ॖ൛ + α) දࢀಓ.rb #33 ~Deploy~ Shuichi
Ohsawa (@ohsawa0515) 1/20
ࣗݾհ • େᖒलҰ (@ohsawa0515) • Blogͬͯ·͢ http://blog.jicoman.info/ • Sansanגࣜձࣾ Data
Strategy & Operation Center • σʔλԽγεςϜͷΠϯϑϥߏஙɾӡ༻ɾվળɺ͓ۚ ͷܭࢉͳͲΛ୲ • AWSϦιʔεͷແବݣ͍͍ͯ͠ΔਓΛಛఆ͠ҙ͢Δਓ • ༻ݴޠ: PHP(ݩͪͺʔ), Golang(গ͠), Ruby(গ͠) • RubyFluentdϓϥάΠϯͱ͔ͭͬͨ͘͜ͱ͋Δ͚Ͳ͋·Γॻ͚ͳ͍ • GolangͰAutoScaling + Blue-Green Deployment πʔϧ͚ͭͬͨ͘Ͳ͋·Γॻ͚ͳ͍ 2/20
ຊεϥΠυʹ͍ͭͯ July Tech Festa 2017Ͱͨ͠ࢿྉΛॖ൛+αͱͯ͠·ͱΊͨͷ Ͱ͢ɻ ίϯςφͷͰ·ͤΜɻͯ͢EC2Ͱ͢ɻ ৄࡉαϯϓϧίʔυͳͲͪ͜ΒͷεϥΠυΛ͝ࢀরͩ͘͞ ͍ɻ https://speakerdeck.com/ohsawa0515/jtf2017-consul-stretcher-
deploy 3/20
ΞδΣϯμ • αʔόߏ • ΞϓϦέʔγϣϯߏ • ैདྷͷσϓϩΠͱ՝ • ৽σϓϩΠ •
σϓϩΠϑϩʔ • ൿಗใͷ҉߸Խɾ෮߸ (+αͷ෦) 4/20
αʔόߏ • ϩʔϧ • WebɺBatchɺDeploy etc • Webαʔό • ELB
+ EC2(c3.2xlarge × 20ऑ) • Batchαʔό • EC2(r3.xlarge × 20ڧ) • Deployαʔό • Web/BatchαʔόʹσϓϩΠ 5/20
ΞϓϦέʔγϣϯߏ • Web/Batchαʔόͱʹ20ऑͷRailsΞϓϦ͕ಉډ • ίετݮ • සൟʹϦΫΤετ͞Εͳ͍αʔϏε • Apache +
Passenger 6/20
ैདྷͷσϓϩΠ • ఆظϦϦʔε(िҰ) • ͯ͢ͷRailsΞϓϦΛσϓϩΠ • ඞཁʹԠͯ͡hotfixϦϦʔε(िʹճ) • ඞཁͳΞϓϦ͚ͩσϓϩΠ •
Web/BatchαʔόશҰ੪ʹσϓϩΠ • σϓϩΠαʔό͔Β࣮ߦ • PushܕσϓϩΠ/In place/All at once 7/20
ैདྷͷσϓϩΠ • σϓϩΠεΫϦϓτ(Rakefile)ͰσϓϩΠ࣮ߦ • Capistrano 2ϕʔε • ΞϓϦຖʹCapλεΫϑΝΠϧͷੜ • ฒྻͰෳΞϓϦΛσϓϩΠ
• ϩʔϧChef ServerͷλάͰཧ • Web, BatchͰॲཧ͕ҟͳΔͨΊϩʔϧͰ۠ผ • knife tagίϚϯυͰ͚֎͢͠Δ 8/20
՝ 1. σϓϩΠʹ͕͔͔࣌ؒΔ 2. αʔόͷՃ͕໘ 3. GitHub/RubyGems͕མͪΔͱσϓϩΠͰ͖ͳ͍ 9/20
Capistrano + Stretchr + Consul • PullܕσϓϩΠ • αʔό͕ࣗσϓϩΠ͢Δ •
σϓϩΠ͕࣌ؒҰఆ(ʹൺྫ͠ͳ͍) • Amazon S3ʹϏϧυࡁͷϑΝΠϧΛஔ • μϯϩʔυ͠ஔɺ࠶ىಈ͢Δ͚ͩͰσϓϩΠྃ • S3ͷՄ༻ੑ99.99ˋ • In place/All at once • CapistarnoͷΈ(γϯϘϦοΫϦϯΫʹΑΔΓସ͑)Λ׆༻ • ConsulʹΑΔαʔϏεσΟεΧόϦػೳͰϗετͷొɾআࣗಈ 10/20
Capistrano • ݱߦͷCapistrano 2ͷεΫϦϓτΛվम • capistrano-stretcher Capistrano 3ͷΈରԠͳͷͰݟૹΓ •
https://github.com/pepabo/capistrano-stretcher • Capistrano͔ΒStretcher + ConsulΛݺͼग़ͯ͠σϓϩΠ • ࢀߟʹͭͭ͠ॲཧΛ࣮ • ࠓ·Ͱ࣮ߦ͖ͯͨ͠capίϚϯυΛେ͖͘ม͑͗͢ͳ͍Α͏ʹ 11/20
Stretcher • https://github.com/fujiwara/stretcher • ConsulͱΈ߹ΘͤΔ͜ͱͰɺΠϕϯτΛτϦΨʔͱͨ͠PullܕσϓϩΠ͕Մೳ • ࠾༻ͨ͠ཧ༝ ! • ෳΞϓϦΛҰ੪ʹσϓϩΠͯ͠ૣ͍
• 20ऑͷRailsΞϓϦΛฒྻσϓϩΠ͢Δͱ1ʙ2ఔͰऴΘΔ • ෳͷઃఆϑΝΠϧ(ϚχϑΣετϑΝΠϧ)Λ༻ҙ͢Δ͜ͱͰɺৼΔ͍Λม͑Δ͜ͱ͕Ͱ͖Δ • σϓϩΠϑΝΠϧஔ༻ • γϯϘϦοΫϦϯΫସ༻ • Consulͱͷੑ͕ߴ͍ 12/20
Consul • https://www.consul.io/ • HashiCorpࣾఏڙͷΦʔέετϨʔγϣϯπʔϧ • αʔόͱΫϥΠΞϯτͱ͍͏̎ͭͷׂͰߏ͞ΕɺΫϥελΛܗ͢Δ • োݕɺ෦DNSɺKey/ValueετΞ(KVS) •
Πϕϯτൃߦ • ֤ConsulΫϥΠΞϯτΠϕϯτΛͪड͚͍ͯΔঢ়ଶͰɺಛఆͷΠϕϯτ͕ൃߦ͞ΕͨΒҙͷΞΫγϣϯΛ࣮ ߦ • αʔϏελάʹΑΔϩʔϧཧ • αʔϏεσΟεΧόϦ • ىಈ࣌ʹΫϥελࣗಈδϣΠϯ 13/20
σϓϩΠϑϩʔ 14/20
·ͱΊͯσϓϩΠ͢Δ ͯ͢ͷΞϓϦΛϚϧνεϨουͰฒྻσϓϩΠ task deploy_all: :setup do deploy_projects = "application_A,apllication_B,..." threads_count
= ENV['THREADS'] Parallel.map(deploy_projects, in_threads: threads_count.to_i) do |project| # ϏϧυαʔόͷσϓϩΠ # ϚχϑΣετϑΝΠϧͷੜ # S3ͷΞοϓϩʔυ # ΞϓϦέʔγϣϯαʔόʹ end end task release_all: :setup do deploy_projects = "application_A,apllication_B,..." threads_count = ENV['THREADS'] Parallel.map(deploy_projects, in_threads: threads_count.to_i) do |project| # σϓϩΠ(γϯϘϦοΫϦϯΫସ) end end 15/20
Slack SlackͰσϓϩΠঢ়گ͕֬ೝͰ͖Δ ͕ੜͨ͡߹όοΫτϨʔε͕ද ࣔ 16/20
݁Ռ 1. σϓϩΠʹ͕͔͔࣌ؒΔ • => ϦϦʔε࣌ؒͷॖ(30->5) 2. αʔόͷՃ͕໘ • =>
࠷৽ͷσϓϩΠϑΝΠϧΛ࣋ͬͯ͘Δ͚ͩ 3. GitHub/RubyGems͕མͪΔͱσϓϩΠͰ͖ͳ͍ • => S3ͳͷͰ΄΅ͳ͠ 17/20
ൿಗใͷ҉߸Խɾ෮߸ • DBύεϫʔυΩʔใΛઃఆϑΝΠϧ(YAML)ʹੜͰॻ͍͓ͯ ͘ͷةݥ • ൿಗใΛEC2 Parameter Storeʹอ͓͖࣋ͯ͠ɺઃఆϑΝΠϧ ʹEC2 Parameter
Storeͷσʔλ໊ʹஔ͖͑ • σϓϩΠ࣌ʹ෮߸͠ઃఆϑΝΠϧΛॻ͖͑ • σϓϩΠαʔό͔͠෮߸Ͱ͖ͳ͍Α͏ʹKMSͷIAMݖݶΛઃఆ 18/20
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 19/20
20/20