Slide 1

Slide 1 text

ϗεςΟϯάαʔϏεͷ Πϯϑϥ؀ڥΛ࠶ߏஙʂ 5BLBZVLJ:PTIJPLB 'BS&OE5FDIOPMPHJFT$PSQPSBUJPO ʙAWS Fargateͷ͓͔͛Ͱ޾ͤʹͳΕͨ࿩ʙ

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

٢Ԭོߦ 5BLBZVLJ:PTIJPLB ॴଐ ϑΝʔΤϯυςΫϊϩδʔʢגʣ ίϛϡχςΟʔ .BUTVFSC εϓϥ΢τSC +"846(4IJNBOF ޷͖ͳαʔϏε "NQMJGZ

Slide 4

Slide 4 text

ΞδΣϯμ ߏங ߏ੒ਤͷ঺հʢ#FGPSF "GUFSʣ ϙΠϯτ 3FENJOF 3BJMT ͷίϯςφԽ Ϛϧνςφϯτʹ͍ͭͯ ӡ༻ $PEF1JQFMJOF 4UFQ'VODUJPOT .JHSBUJPOͷ࣮ࢪํ๏ ϗεςΟϯάαʔϏεͷΠϯϑϥ؀ڥΛ࠶ߏஙʂ

Slide 5

Slide 5 text

ߏஙͷ࿩ .Z3FENJOFͷΠϯϑϥͷ࠶ߏங

Slide 6

Slide 6 text

w 3FENJOFͷϗεςΟϯάαʔϏεʢ4BB4ʣ w ਺ඦͷ͓٬༷ʹ͝ར༻͍͍͍ͨͩͯΔαʔϏε w 3FE.JDBͱͯ͠ఏڙத ϑΝʔΤϯυςΫϊϩδʔ͕։ൃ͢Δ3FENJOFޓ׵ͷσΟετϦϏϡʔγϣϯ 3FENJOFͷ࣍ظόʔδϣϯͷ৽ػೳΛઌߦͯ͠ར༻Ͱ͖·͢ɻ

Slide 7

Slide 7 text

αʔϏεબఆͷํ਑ ӡ༻ίετΛݮΒ͍ͨ͠ͷͰ ϚωʔδυαʔϏεத৺Ͱߏங͢Δʂ ʢ͓ۚΑΓ΋ਓతϦιʔεͷ࿩ʣ

Slide 8

Slide 8 text

#FGPSF

Slide 9

Slide 9 text

AWS Cloud Internet Amazon RDS Proxy Server (EC2) App Server (EC2) ϗεςΟϯάαʔϏε αʔϏεఏڙதͷγεςϜͳͷͰৄࡉ΅΍͔͠ؾຯʜ Mail Server (EC2)

Slide 10

Slide 10 text

"GUFS

Slide 11

Slide 11 text

SBJMTDPOTPMF SBLFUBTLʜ

Slide 12

Slide 12 text

࠶ߏஙͷϙΠϯτ ۤ࿑ͨ͠఺ʹ͍ͭͯ 3FENJOFʢ3BJMTʣͷίϯςφԽ ϚϧνςφϯτͷΞʔΩςΫνϟ

Slide 13

Slide 13 text

࠶ߏஙͷϙΠϯτ ۤ࿑ͨ͠఺ʹ͍ͭͯ 3FENJOFʢ3BJMTʣͷίϯςφԽ ϚϧνςφϯτͷΞʔΩςΫνϟ

Slide 14

Slide 14 text

3FENJOFͰߟྀ͕ඞཁͳ͜ͱ ʢӬଓ͕ඞཁͳσʔλʣ w%#ʢσʔλϕʔεʣ wϩά wఴ෇ϑΝΠϧ

Slide 15

Slide 15 text

%#ʢσʔλϕʔεʣʹ͍ͭͯ 3%4"VSPSB1PTUHSF42-ޓ׵ΤσΟγϣϯ

Slide 16

Slide 16 text

-PHͷѻ͍ 4JEFDBS1BUUFSOʢίϯςφΛೋͭ࢖༻ʣͰ ϩάऩू༻ίϯςφʢqVFOUEʣΛ࢖༻ͯ͠ϩάͷऩू

Slide 17

Slide 17 text

ఴ෇ϑΝΠϧ "NB[PO4 "NB[PO&'4 ΞϓϦέʔγϣϯͷมߋ͕ෆཁ ΞϓϦέʔγϣϯͷมߋ͕ඞཁ ʢϓϥάΠϯͳͲʣ ϥϯχϯάίετ͕͍҆ ϥϯχϯάίετ͕ߴΊ ͦ΋ͦ΋։ൃ౰࣌'BSHBUFͰ͸&'4࿈ܞ͕Ͱ͖ͳ͔ͬͨɻ ީิͷൺֱ

Slide 18

Slide 18 text

ఴ෇ϑΝΠϧ ఴ෇ϑΝΠϧͷอଘઌΛ4ʹͰ͖Δ 1MVHJOΛ։ൃʢSFENJDB@Tʣ

Slide 19

Slide 19 text

https://github.com/redmica/redmica_s3

Slide 20

Slide 20 text

࠶ߏஙͷϙΠϯτ ۤ࿑ͨ͠఺ʹ͍ͭͯ 3FENJOFʢ3BJMTʣͷίϯςφԽ ϚϧνςφϯτͷΞʔΩςΫνϟ

Slide 21

Slide 21 text

ϗεςΟϯάαʔϏε ʢ4BB4ʣ ϏδωεϞσϧͷ࿩ γϯάϧςφϯτΑΓϚϧνςφϯτͰ୯ՁΛ཈͍͑ͨ ʢސ٬αʔό͸ݫ͍͠ɻෳ਺ͷސ٬ͰαʔόΛڞ༗͢Δʣ

Slide 22

Slide 22 text

͓٬͞Μ͝ͱʹ&$4ͷ4FSWJDFΛىಈ ʢސ٬4FSWJDFʣ ಉ͡ίϯςφΠϝʔδΛ࢖͏͜ͱͰίʔυΛڞ௨Խ ߏ੒ྫ̍ ໰୊఺ ίετͷϝϦοτ͕ͳ͍ɻ λεΫఆٛΛސ٬͝ͱʹ؅ཧ͢Δͷ͸ඍົ ؅ཧ͢Δ΋ͷ͸ͳΔ΂͘গͳ͍ͨ͘͠

Slide 23

Slide 23 text

ΞϓϦέʔγϣϯͰରԠΛ͢ΔͨΊʹ "QBSUNFOUʢ(FNʣͷར༻΋ݕ౼ IUUQTHJUIVCDPNJOqVJUJWFBQBSUNFOU ߏ੒ྫ̎ ໰୊఺ "QBSUNFOUͷϝϯςφϯε NJHSBUJPOؔ࿈Ͱ৭ʑͱͭΒΈ͕ग़ͦ͏ ϝϯςφϯε͕ෆ҆

Slide 24

Slide 24 text

࠷ऴతͳ࣮૷ํ๏ "QBDIF1BTTFOHFSΛબ୒ ϓϩηε͝ͱʹ؀ڥม਺Λ੾ସ͑Δʂ "QBDIFͷ7JSUVBM)PTUΛ࢖ͬͯɺϓϩηε͝ͱʹ؀ڥม਺Λઃఆͯ͠ɺ ઀ଓ͢Δ%#ɺετϨʔδΛ੾Γସ͑ͨΒͰ͖ΔͷͰ͸ʁʁ

Slide 25

Slide 25 text

ߏ੒ਤ

Slide 26

Slide 26 text

ߏ੒ਤ %PDLFSىಈ࣌ʹ4͔Β ؀ڥม਺౳ͷ৘ใΛऔಘ

Slide 27

Slide 27 text

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ʹอଘ ˞αϯϓϧΠϝʔδ

Slide 28

Slide 28 text

ߏ੒ਤ %PDLFSىಈ࣌ʹ4͔Β ؀ڥม਺౳ͷ৘ใΛऔಘ

Slide 29

Slide 29 text

$POGϑΝΠϧΛੜ੒ ˞αϯϓϧΠϝʔδ 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 ...

Slide 30

Slide 30 text

ߏ੒ਤ %PDLFSىಈ࣌ʹ4͔Β ؀ڥม਺౳ͷ৘ใΛऔಘ 4JUF"΁ΞΫηε

Slide 31

Slide 31 text

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'] %> ˞αϯϓϧΠϝʔδ

Slide 32

Slide 32 text

ߏ੒ਤ %PDLFSىಈ࣌ʹ4͔Β ؀ڥม਺౳ͷ৘ใΛऔಘ 4JUF"΁ΞΫηε

Slide 33

Slide 33 text

4FSWJDF͋ͨΓαΠτΛ໨҆ʹӡ༻த

Slide 34

Slide 34 text

ར༻αʔϏεʹ͍ͭͯ 2ͳͥ&$4ʁɹ,VCFSOFUFTʢ&,4ʣ͸ʁ w ϓϩδΣΫτ͕ελʔτͨ͠ɺ೥݄౰ ࣌ɺ&,4͸౦ژϦʔδϣϯ͸ͳ͔ͬͨɻ w &,4ͷΫϥελʔྉ͕ۚߴ͔ͬͨɻ 2&$Ͱ͸ͳ͘'BSHBUFΛ࢖ͬͯΔཧ༝ w &$ͷ؅ཧ໘౗ɻʢϦιʔεͷܭࢉʣ

Slide 35

Slide 35 text

'BSHBUF ϝϦοτ σϝϦοτ αʔόʹೖΕͳ͍͜ͱɻ ؅ཧίετ͕௿͍ɻ ͪΐͬͱߴ͍ɻʢ&$ͱൺֱͯ͠ʣ αʔόʹೖΔඞཁ͕ͳ͍ɻ ো֐࣌ͷௐࠪൣғΛݶఆͰ͖Δɻ

Slide 36

Slide 36 text

'BSHBUF ϩάΠϯ໰୊ճආ๏ &$4ʢ&$λΠϓʣ΋ಉ࣌ ʹىಈ͓ͯ͘͠ &-#ʢ"-#ʣͰϩάΛΈ͍ͨ ಛఆͷαΠτΛ&$Ͱىಈ͠ ͍ͯΔ&$4΁ϧʔςΟϯά &$΁44)ͰϩάΠϯͰ͖Δ

Slide 37

Slide 37 text

ӡ༻ʹ͍ͭͯ

Slide 38

Slide 38 text

$PEF1JQFMJOF ΞϓϦέʔγϣϯͷσϓϩΠʹར༻

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

4UFQ'VODUJPOT ϗεςΟϯάαʔϏεʢ4BB4ʣͷ؅ཧʹ࢖༻

Slide 41

Slide 41 text

%PDLFSͷߏ੒ͷ࿩

Slide 42

Slide 42 text

%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

Slide 43

Slide 43 text

%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ͷ࣮ߦͳͲ͕Ͱ͖Δɻ

Slide 44

Slide 44 text

˞αϯϓϧ

Slide 45

Slide 45 text

αʔϏεΞΧ΢ϯτͷ৽نొ࿥ ˞αϯϓϧ

Slide 46

Slide 46 text

αʔϏεΞΧ΢ϯτͷઃఆมߋ ˞αϯϓϧ

Slide 47

Slide 47 text

αʔϏεΞΧ΢ϯτͷαϒυϝΠϯมߋ ˞αϯϓϧ

Slide 48

Slide 48 text

αʔϏεఀࢭ σʔλ࡟আ ˞αϯϓϧ

Slide 49

Slide 49 text

.JHSBUJPO໰୊ 3BJMTͷ`SBJMTECNJHSBUF`ΛͲ͏΍࣮ͬͯߦ͢Δ͔

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

4UFQ'VODUJPOT αΠτͷ਺͚ͩSBLFECNJHSBUFΛฒྻ࣮ߦ

Slide 52

Slide 52 text

·ͱΊ

Slide 53

Slide 53 text

·ͱΊ Ϛϧνςφϯτͷ࣮૷ํ๏ɻ

Slide 54

Slide 54 text

ߏ੒ਤ

Slide 55

Slide 55 text

·ͱΊ Ϛϧνςφϯτͷ࣮૷ํ๏ɻ &$λΠϓͷซ༻ɻ

Slide 56

Slide 56 text

'BSHBUF ϩάΠϯ໰୊ճආ๏ &$4ʢ&$λΠϓʣ΋ಉ࣌ ʹىಈ͓ͯ͘͠ &-#ʢ"-#ʣͰϩάΛΈ͍ͨ ಛఆͷαΠτΛ&$Ͱىಈ͠ ͍ͯΔ&$4΁ϧʔςΟϯά &$΁44)ͰϩάΠϯͰ͖Δ

Slide 57

Slide 57 text

·ͱΊ Ϛϧνςφϯτͷ࣮૷ํ๏ɻ &$λΠϓͷซ༻ɻ όονॲཧʢNJHSBUJPO SBLFUBTLʣͳͲͷฒྻ࣮ߦɻ

Slide 58

Slide 58 text

4UFQ'VODUJPOT αΠτͷ਺͚ͩSBLFECNJHSBUJFΛฒྻ࣮ߦ

Slide 59

Slide 59 text

͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ