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
220
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
72
GCPUG-Shimane #04 開催レポート
yoshiokacb
0
74
EC2からECSへ移行を始めたお話
yoshiokacb
2
8.1k
Other Decks in Technology
See All in Technology
複数プロダクト組織のAIネイティブ化における戦略 / AICon2026_kude
rakus_dev
0
300
発表と総括 / Presentations and Summary
ks91
PRO
0
190
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
210
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
370
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
520
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
170
なぜ、あなたのエージェントは言うことを聞かないのか
segavvy
1
360
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
790
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
390
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
440
キャリアLT会#3
beli68
2
230
Featured
See All Featured
Believing is Seeing
oripsolob
1
170
Optimizing for Happiness
mojombo
378
71k
Unsuck your backbone
ammeep
672
58k
Google's AI Overviews - The New Search
badams
0
1.1k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
270
Paper Plane (Part 1)
katiecoart
PRO
1
9.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
230
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
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Λฒྻ࣮ߦ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ