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
ホスティングサービスのインフラ環境を再構築!
Search
Takayuki Yoshioka
June 24, 2020
Technology
4.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ホスティングサービスのインフラ環境を再構築!
Takayuki Yoshioka
June 24, 2020
More Decks by Takayuki Yoshioka
See All by Takayuki Yoshioka
RedmineをAIで効率的に使う検証
yoshiokacb
0
210
AWSで実現する進化する WEBサービス(SaaS)
yoshiokacb
0
71
AWSで実現する進化するWEBサービス(SaaS)の裏話
yoshiokacb
0
180
モノリスウェブアプリケーションのクラウド最適化について - SaaSの運用 -
yoshiokacb
1
1.5k
My Redmine Gen.2を支えるインフラストラクチャー
yoshiokacb
0
2.5k
Scalable structure for AWS
yoshiokacb
1
1.3k
GDG Cloud Shimane #02
yoshiokacb
0
71
GCPUG-Shimane #04 開催レポート
yoshiokacb
0
74
EC2からECSへ移行を始めたお話
yoshiokacb
2
8.1k
Other Decks in Technology
See All in Technology
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
200
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
150
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.9k
UIパーツの設計を「型」から読み解く 〜TSKaigiのセッションから得た学び〜
yud0uhu
0
110
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7.9k
元・セキュリティ学習経験0大学生による業務紹介 / An Introduction to the Job by a Former College Student with Zero Security Training Experience
nttcom
0
950
水を運ぶ人としてのリーダーシップ
izumii19
4
1.1k
Flow 不死:AI 時代 DevOps 的不變本質
cheng_wei_chen
2
550
Why is RC4 still being used?
tamaiyutaro
0
150
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
250
Deep Data Security 機能解説
oracle4engineer
PRO
2
230
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
280
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
170
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Producing Creativity
orderedlist
PRO
348
40k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
400
Game over? The fight for quality and originality in the time of robots
wayneb77
1
210
GraphQLとの向き合い方2022年版
quramy
50
15k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Transcript
ϗεςΟϯάαʔϏεͷ ΠϯϑϥڥΛ࠶ߏஙʂ 5BLBZVLJ:PTIJPLB 'BS&OE5FDIOPMPHJFT$PSQPSBUJPO ʙAWS Fargateͷ͓͔͛ͰͤʹͳΕͨʙ
ࣗݾհ
٢Ԭོߦ 5BLBZVLJ:PTIJPLB ॴଐ ϑΝʔΤϯυςΫϊϩδʔʢגʣ ίϛϡχςΟʔ .BUTVFSC εϓϥτSC +"846(4IJNBOF ͖ͳαʔϏε "NQMJGZ
ΞδΣϯμ ߏங ߏਤͷհʢ#FGPSF "GUFSʣ ϙΠϯτ 3FENJOF
3BJMT ͷίϯςφԽ Ϛϧνςφϯτʹ͍ͭͯ ӡ༻ $PEF1JQFMJOF 4UFQ'VODUJPOT .JHSBUJPOͷ࣮ࢪํ๏ ϗεςΟϯάαʔϏεͷΠϯϑϥڥΛ࠶ߏஙʂ
ߏஙͷ .Z3FENJOFͷΠϯϑϥͷ࠶ߏங
w 3FENJOFͷϗεςΟϯάαʔϏεʢ4BB4ʣ w ඦͷ͓٬༷ʹ͝ར༻͍͍͍ͨͩͯΔαʔϏε w 3FE.JDBͱͯ͠ఏڙத ϑΝʔΤϯυςΫϊϩδʔ͕։ൃ͢Δ3FENJOFޓͷσΟετϦϏϡʔγϣϯ 3FENJOFͷ࣍ظόʔδϣϯͷ৽ػೳΛઌߦͯ͠ར༻Ͱ͖·͢ɻ
αʔϏεબఆͷํ ӡ༻ίετΛݮΒ͍ͨ͠ͷͰ ϚωʔδυαʔϏεத৺Ͱߏங͢Δʂ ʢ͓ۚΑΓਓతϦιʔεͷʣ
#FGPSF
AWS Cloud Internet Amazon RDS Proxy Server (EC2) App Server
(EC2) ϗεςΟϯάαʔϏε αʔϏεఏڙதͷγεςϜͳͷͰৄࡉ΅͔͠ؾຯʜ Mail Server (EC2)
"GUFS
SBJMTDPOTPMF SBLFUBTLʜ
࠶ߏஙͷϙΠϯτ ۤ࿑ͨ͠ʹ͍ͭͯ 3FENJOFʢ3BJMTʣͷίϯςφԽ ϚϧνςφϯτͷΞʔΩςΫνϟ
࠶ߏஙͷϙΠϯτ ۤ࿑ͨ͠ʹ͍ͭͯ 3FENJOFʢ3BJMTʣͷίϯςφԽ ϚϧνςφϯτͷΞʔΩςΫνϟ
3FENJOFͰߟྀ͕ඞཁͳ͜ͱ ʢӬଓ͕ඞཁͳσʔλʣ w%#ʢσʔλϕʔεʣ wϩά wఴϑΝΠϧ
%#ʢσʔλϕʔεʣʹ͍ͭͯ 3%4"VSPSB1PTUHSF42-ޓΤσΟγϣϯ
-PHͷѻ͍ 4JEFDBS1BUUFSOʢίϯςφΛೋͭ༻ʣͰ ϩάऩू༻ίϯςφʢqVFOUEʣΛ༻ͯ͠ϩάͷऩू
ఴϑΝΠϧ "NB[PO4 "NB[PO&'4 ΞϓϦέʔγϣϯͷมߋ͕ෆཁ ΞϓϦέʔγϣϯͷมߋ͕ඞཁ ʢϓϥάΠϯͳͲʣ ϥϯχϯάίετ͕͍҆ ϥϯχϯάίετ͕ߴΊ ͦͦ։ൃ࣌'BSHBUFͰ&'4࿈ܞ͕Ͱ͖ͳ͔ͬͨɻ ީิͷൺֱ
ఴϑΝΠϧ ఴϑΝΠϧͷอଘઌΛ4ʹͰ͖Δ 1MVHJOΛ։ൃʢSFENJDB@Tʣ
https://github.com/redmica/redmica_s3
࠶ߏஙͷϙΠϯτ ۤ࿑ͨ͠ʹ͍ͭͯ 3FENJOFʢ3BJMTʣͷίϯςφԽ ϚϧνςφϯτͷΞʔΩςΫνϟ
ϗεςΟϯάαʔϏε ʢ4BB4ʣ ϏδωεϞσϧͷ γϯάϧςφϯτΑΓϚϧνςφϯτͰ୯ՁΛ͍͑ͨ ʢސ٬αʔόݫ͍͠ɻෳͷސ٬ͰαʔόΛڞ༗͢Δʣ
͓٬͞Μ͝ͱʹ&$4ͷ4FSWJDFΛىಈ ʢސ٬4FSWJDFʣ ಉ͡ίϯςφΠϝʔδΛ͏͜ͱͰίʔυΛڞ௨Խ ߏྫ̍ ίετͷϝϦοτ͕ͳ͍ɻ λεΫఆٛΛސ٬͝ͱʹཧ͢Δͷඍົ
ཧ͢ΔͷͳΔ͘গͳ͍ͨ͘͠
ΞϓϦέʔγϣϯͰରԠΛ͢ΔͨΊʹ "QBSUNFOUʢ(FNʣͷར༻ݕ౼ IUUQTHJUIVCDPNJOqVJUJWFBQBSUNFOU ߏྫ̎ "QBSUNFOUͷϝϯςφϯε NJHSBUJPOؔ࿈Ͱ৭ʑͱͭΒΈ͕ग़ͦ͏ ϝϯςφϯε͕ෆ҆
࠷ऴతͳ࣮ํ๏ "QBDIF 1BTTFOHFSΛબ ϓϩηε͝ͱʹڥมΛସ͑Δʂ "QBDIFͷ7JSUVBM)PTUΛͬͯɺϓϩηε͝ͱʹڥมΛઃఆͯ͠ɺ ଓ͢Δ%#ɺετϨʔδΛΓସ͑ͨΒͰ͖ΔͷͰʁʁ
ߏਤ
ߏਤ %PDLFSىಈ࣌ʹ4͔Β ڥมͷใΛऔಘ
db: name: [db_name] user: [user_name] password: [password] s3: bucket: [user_bucket]
folder: [user_folder] property: sub_domain: [sub_domain] limit_ips: - ‘192.168.xx.xx' - '192.168.xx.xx' ઃఆใ4ʹอଘ ˞αϯϓϧΠϝʔδ
ߏਤ %PDLFSىಈ࣌ʹ4͔Β ڥมͷใΛऔಘ
$POGϑΝΠϧΛੜ ˞αϯϓϧΠϝʔδ <VirtualHost *:80> ServerName siteA.example.jp DocumentRoot /var/lib/siteA/public RailsEnv production
PassengerEnabled on SetEnv RAILS_DB db001 SetEnv RAILS_DB_USERNAME dbuser001 SetEnv RAILS_DB_PASSWORD xxxxxxxx SetEnv S3_FOLDER_NAME user001 ... </VirtualHost>
ߏਤ %PDLFSىಈ࣌ʹ4͔Β ڥมͷใΛऔಘ 4JUF"ΞΫηε
3FENJOFͷઃఆϑΝΠϧͷมߋ # database.yml production: adapter: postgresql database: <%= ENV['RAILS_DB'] %>
username: <%= ENV['RAILS_DB_USERNAME'] %> password: <%= ENV['RAILS_DB_PASSWORD'] %> host: <%= ENV['RAILS_DB_HOST'] %> # s3.yml production: bucket: <%= ENV['S3_BUCKET_NAME'] %> folder: <%= ENV['S3_FOLDER_NAME'] %> ˞αϯϓϧΠϝʔδ
ߏਤ %PDLFSىಈ࣌ʹ4͔Β ڥมͷใΛऔಘ 4JUF"ΞΫηε
4FSWJDF͋ͨΓαΠτΛ҆ʹӡ༻த
ར༻αʔϏεʹ͍ͭͯ 2ͳͥ&$4ʁɹ,VCFSOFUFTʢ&,4ʣʁ w ϓϩδΣΫτ͕ελʔτͨ͠ɺ݄ ࣌ɺ&,4౦ژϦʔδϣϯͳ͔ͬͨɻ w &,4ͷΫϥελʔྉ͕ۚߴ͔ͬͨɻ 2&$Ͱͳ͘'BSHBUFΛͬͯΔཧ༝ w &$ͷཧ໘ɻʢϦιʔεͷܭࢉʣ
'BSHBUF ϝϦοτ σϝϦοτ αʔόʹೖΕͳ͍͜ͱɻ ཧίετ͕͍ɻ ͪΐͬͱߴ͍ɻʢ&$ͱൺֱͯ͠ʣ αʔόʹೖΔඞཁ͕ͳ͍ɻ ো࣌ͷௐࠪൣғΛݶఆͰ͖Δɻ
'BSHBUF ϩάΠϯճආ๏ &$4ʢ&$λΠϓʣಉ࣌ ʹىಈ͓ͯ͘͠ &-#ʢ"-#ʣͰϩάΛΈ͍ͨ ಛఆͷαΠτΛ&$Ͱىಈ͠ ͍ͯΔ&$4ϧʔςΟϯά
&$44)ͰϩάΠϯͰ͖Δ
ӡ༻ʹ͍ͭͯ
$PEF1JQFMJOF ΞϓϦέʔγϣϯͷσϓϩΠʹར༻
None
4UFQ'VODUJPOT ϗεςΟϯάαʔϏεʢ4BB4ʣͷཧʹ༻
%PDLFSͷߏͷ
%PDLFSͷߏͷ … if [ $DB_CREATE = 'true' ]; then bundle
exec rake db:create fi if [ $DB_MIGRATE = 'true' ]; then bundle exec rake db:migrate bundle exec rake redmine:plugins fi … b&/503:10*/5`ʹ%#ઃఆܥͷίϚϯυΛ͋Β͔͡ΊࠐΜͰ͓͘ FOUSZQPJOUTI
%PDLFSͷߏͷ "NB[PO-BNCEB task_prop = { cluster: cluster_name, task_definition: task_def_name, launch_type:
"Fargate", overrides: { container_overrides: [ { name: [redmine_container_name], command: [ "rake", "redmine:load_default_data"], environment: [ { name: "RAILS_DB", value: db }, { name: "RAILS_DB_USERNAME", value: user }, { name: "RAILS_DB_PASSWORD", value: password }, { name: "DB_CREATE", value: 'true'}, { name: "DB_MIGRATE", value: 'true'}, ] }, ], }, network_configuration: network_config, } client = Aws::ECS::Client.new() client.run_task(task_prop) ࡞ࡁΈͷ5BTL%FpOJUJPOΛར༻ͯ͠ ৽نొɺ.JHSBUJPOͷ࣮ߦͳͲ͕Ͱ͖Δɻ
˞αϯϓϧ
αʔϏεΞΧϯτͷ৽نొ ˞αϯϓϧ
αʔϏεΞΧϯτͷઃఆมߋ ˞αϯϓϧ
αʔϏεΞΧϯτͷαϒυϝΠϯมߋ ˞αϯϓϧ
αʔϏεఀࢭ σʔλআ ˞αϯϓϧ
.JHSBUJPO 3BJMTͷ`SBJMTECNJHSBUF`ΛͲ͏࣮ͬͯߦ͢Δ͔
None
4UFQ'VODUJPOT αΠτͷ͚ͩSBLFECNJHSBUFΛฒྻ࣮ߦ
·ͱΊ
·ͱΊ Ϛϧνςφϯτͷ࣮ํ๏ɻ
ߏਤ
·ͱΊ Ϛϧνςφϯτͷ࣮ํ๏ɻ &$λΠϓͷซ༻ɻ
'BSHBUF ϩάΠϯճආ๏ &$4ʢ&$λΠϓʣಉ࣌ ʹىಈ͓ͯ͘͠ &-#ʢ"-#ʣͰϩάΛΈ͍ͨ ಛఆͷαΠτΛ&$Ͱىಈ͠ ͍ͯΔ&$4ϧʔςΟϯά
&$44)ͰϩάΠϯͰ͖Δ
·ͱΊ Ϛϧνςφϯτͷ࣮ํ๏ɻ &$λΠϓͷซ༻ɻ όονॲཧʢNJHSBUJPO SBLFUBTLʣͳͲͷฒྻ࣮ߦɻ
4UFQ'VODUJPOT αΠτͷ͚ͩSBLFECNJHSBUJFΛฒྻ࣮ߦ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ