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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
現場のトークンマネジメント
dak2
1
200
AWS Summit の片隅で、体育座りしながらコミュニティがにぎわう理由を考えた
k_adachi_01
2
270
2026-06-24_人とAIの責務分離に基づく開発プロセスの提案.pdf
takahiromatsui
0
250
週末にループ・エンジニアリングの理解を深めるためのスライド
nagatsu
0
610
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.6k
元・セキュリティ学習経験0大学生による業務紹介 / An Introduction to the Job by a Former College Student with Zero Security Training Experience
nttcom
0
960
UIパーツの設計を「型」から読み解く 〜TSKaigiのセッションから得た学び〜
yud0uhu
0
110
Lightning近況報告
kozy4324
0
230
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
4.3k
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
180
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.6k
5分でわかる Amazon Connect_20260608
hwangbyeonghun
0
130
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
210k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Paper Plane
katiecoart
PRO
1
52k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
310
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
First, design no harm
axbom
PRO
2
1.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
440
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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Λฒྻ࣮ߦ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ