Slide 1

Slide 1 text

҆શ͔ͭߴ଎ʹਐΊΔ ϚΠΫϩαʔϏεԽ 3BJMT%FWFMPQFST.FFUVQ !LLVCVO

Slide 2

Slide 2 text

ࣗݾ঺հ • GitHub, Twitter: @k0kubun • Treasure Data ॴଐ • Site Reliability Engineer • Ruby 2.6ͷJITίϯύΠϥ։ൃத

Slide 3

Slide 3 text

Treasure Data Ͱͷ1೥ؒ • 2017 1Q: TD APIͷ։ൃ • 2017 2Q: bigdam-queue • 2017 3Q: Fluentd Enterprise • 2017 4Q: Embulk Config Microservice • 2018 1Q: SRE: AutoScaling, Deployment

Slide 4

Slide 4 text

ࠓ೔࿩͢͜ͱ 1. αʔϏε෼ׂͷલʹߟ͑Δ΂͖͜ͱ 2. ҆શ͔ͭߴ଎ʹ෼ׂ͢ΔͨΊͷςετख๏ 3. Railsʹ͓͚ΔϦτϥΠͷ࣮૷ύλʔϯ 4. RailsΞϓϦͷ੾Γग़͠Ͱࠔ೉ͳ఺ 5. ҆શʹσϓϩΠ؀ڥΛվળ͍ͯ͘͠࿩

Slide 5

Slide 5 text

1. αʔϏε෼ׂͷલʹߟ͑Δ΂͖͜ͱ

Slide 6

Slide 6 text

ϚΠΫϩαʔϏεԽͰ ԿΛղܾ͠·͔͢? Q1.

Slide 7

Slide 7 text

ฐࣾͷࠓճͷαʔϏε෼ׂͷܦҢ ஫: ࠓճͷ੾Γग़͠ͰͲΕ΋طʹେମղܾࡁͰ͢!!!

Slide 8

Slide 8 text

Ϟσϧͷ࣮૷ͷఆ͕ٛYAMLͱͯ͠ ผϦϙδτϦʹ੾Γग़͞Ε͍ͯΔ

Slide 9

Slide 9 text

ຊମͷRailsΞϓϦͱ͸ผʹϦϦʔε͢ΔͨΊɺ ͦͷYAMLΛDBʹͭͬ͜ΜͰಈతʹڍಈΛมߋ + APIͰͦΕ͕ϦϦʔεͰ͖Δঢ়ଶ

Slide 10

Slide 10 text

APIʹΑΔYAMLͷϦϦʔεͰϝιουͷఆ͕ٛ ಈతʹมΘΔͷͰɺϝιουΛݺͼग़͢౓ʹΫ ΤϦ͕ඞཁʹͳΓ஗͍

Slide 11

Slide 11 text

ͦ΋ͦ΋੾Γग़͞Ε͍ͯͳ͍Railsͷίʔυ ͱYAML͕ڧ݁߹ͳ͜ͱʹΑΔϦϦʔεॱং ґଘͷൃੜͱͦΕʹΑΔো֐

Slide 12

Slide 12 text

ຊ౰͸1ͭͷϦϙδτϦʹͨ͠ํ͕͍͍ʹܾ·͍ͬͯΔ͕ɺ Ͱ͖Ε͹੹຿Λ໌֬ʹ෼཭ͯ͠νʔϜؒͷίϛϡχέʔγϣ ϯίετΛԼ͛ͨΓಠཱʹϦϦʔεͨ͠Γ͍ͨ͠

Slide 13

Slide 13 text

=> YAML͡Όͳͯͪ͘ΌΜͱαʔϏεͱͯ͠෼཭͠Α͏

Slide 14

Slide 14 text

ϚΠΫϩαʔϏεԽͰൃੜ͢Δ ໰୊͸શͯڐ༰Ͱ͖·͔͢? Q2.

Slide 15

Slide 15 text

ڥքΛލ͍ͰJOIN͕Ͱ͖ͳ͍

Slide 16

Slide 16 text

DBΛ෼཭͢ΔͱɺͦΕΛލ͙τϥ ϯβΫγϣϯ͕͔͚ΒΕͣҰ؏ੑ͕ ୲อͰ͖ͳ͘ͳΔ

Slide 17

Slide 17 text

ϦιʔεΛऔΔͨΊʹී௨ͷ ActiveRecordͷίʔυ͕࢖͑ͳ͍

Slide 18

Slide 18 text

ো֐ൃੜݯͷ૿Ճ

Slide 19

Slide 19 text

αʔϏε͕૿͑Δ͜ͱʹΑΔ Πϯϑϥ؅ཧ/ӡ༻ίετͷ૿େ

Slide 20

Slide 20 text

ΤϯυϙΠϯτؙ͝ͱ෼཭͢Δ? ಺෦APIʹ͍ͯ͠ΖΜͳ৔ॴ͔Βୟ͘? Q3.

Slide 21

Slide 21 text

ࠓճ͸಺෦APIدΓͷɺ͔͠΋ ࠷ॳ͔Βͦ͏࡞ΔͷͰ͸ͳ్͘ தͰ੾Γग़࣌͢ͷ࿩Λ͠·͢

Slide 22

Slide 22 text

2. ҆શ͔ͭߴ଎ʹ෼ׂ͢ΔͨΊͷςετख๏

Slide 23

Slide 23 text

ϚΠΫϩαʔϏεԽͷ࠷த ͲͷΑ͏ʹςετ͠·͔͢?

Slide 24

Slide 24 text

ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ Consumer Driven Contract Testing ࢀߟ: https://medium.com/@copyconstruct/testing-microservices-the-sane-way-9bb31d158c16

Slide 25

Slide 25 text

ςετͰ۩ମతʹԿΛୡ੒͍ͨ͠ͷ͔ • ୯ͳΔίϐϖͰࡁΈͦ͏ʹͳ͘ɺ੾Γग़͢ॠ͕ؒҰ൪Ϧε Ϋ͕ߴ͍ͷͰɺͲ͏ʹ͔͚ͯͦͩ҆͜͠શʹࡁ·͍ͤͨ • ͔ͱ͍ͬͯઐ༻ͷςετΛҰ͔Βॻ͖·͘Δ΄ͲՋͰ͸ͳ ͍ͷͰɺۃྗطଘͷςετࢿ࢈Λྲྀ༻͍ͨ͠ • ͦͯ͠ଞͷ։ൃΛશ͘ࢭΊͨ͘ͳ͍ͷͰςετ͕ৗʹ࢓༷ ͷมߋʹ௥ैͰ͖ͳ͍ͱ͍͚ͳ͍

Slide 26

Slide 26 text

ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ Consumer Driven Contract Testing ࢓༷มߋʹର͢Δ ελϒͷ௥ैΛ๨Εͦ͏

Slide 27

Slide 27 text

ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ Consumer Driven Contract Testing ୭͕Χηοτߋ৽͢Δͷ? ࣗಈͰߋ৽͢Δ ͳΒΧηοτʹͯ͠Δҙຯͳ͘ͳ͍?

Slide 28

Slide 28 text

ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ Consumer Driven Contract Testing ͜Ε͸ݩ͔Β͋ͬͯɺϝϯςίετ ͸ߴ͍͕ҰԠͦͷ··࢖͑Δ

Slide 29

Slide 29 text

ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ Consumer Driven Contract Testing ࢓༷มߋΛ͢Δਓͨͪʹ͜ΕΛֶशͯ͠΋Β͏ίετ͕ߴ ͗͢Δ + Pact Brokerͷ༻ҙ΍ӡ༻΋ඞཁͳͷͰɺҰճͷ ੾Γग़͠Ͱಋೖ͢Δʹ͸ΦʔόʔΩϧ (௕ظతʹ͸ཉ͍͠)

Slide 30

Slide 30 text

͡Ό͋݁߹ςετ͚ͩΛཔΓʹͰ͖Δͷ͔? • ݱঢ়ɺ݁߹ςετ͸ओʹΫϦςΟΧϧͳڍಈʹରͯ͠ͷΈ ॻ͔Ε͓ͯΓɺͦΕ͚ͩͩͱखബ͍ • ͔ͱ͍ͬͯແҋʹ݁߹ςετΛ૿΍͢ͱอक͕͠ΜͲ͍ • ςετࣗମͷอक͕νʔϜʹด͡ͳ͘ͳΔͷͰίϛϡχ έʔγϣϯίετ͕ൃੜ • ނো఺͕ଟͯ͘ෆ҆ఆʹͳΓ͕ͪ (ಛʹCapybaraͱ͔)

Slide 31

Slide 31 text

੾Γग़͠ݩΞϓϦͷrspecϓϩηε spec_helper.rb ࠓճ࢖༻ͨ͠ςετख๏: ੾Γग़ͨ͠ΞϓϦ Λىಈͯ͠ϢχοτςετΛ૸ΒͤΔ

Slide 32

Slide 32 text

੾Γग़͠ݩΞϓϦͷrspecϓϩηε spec_helper.rb ੾Γग़ͨ͠RailsΞϓϦ ͷϓϩηε at_exit ࠓճ࢖༻ͨ͠ςετख๏: ੾Γग़ͨ͠ΞϓϦ Λىಈͯ͠ϢχοτςετΛ૸ΒͤΔ Spawn Kill

Slide 33

Slide 33 text

੾Γग़͠ݩΞϓϦͷrspecϓϩηε spec_helper.rb at_exit ڞ༗DB (ޙͰ੾Γ཭͢) ࠓճ࢖༻ͨ͠ςετख๏: ੾Γग़ͨ͠ΞϓϦ Λىಈͯ͠ϢχοτςετΛ૸ΒͤΔ *_spec.rb FactoryBot ੾Γग़͢࠷த͸·ͩDB͕ڞ༗͞ΕͯΔ ͜ͱΛҰ࣌తʹ׆͔ͯ͠ςετΛಈ͔͢ ੾Γग़ͨ͠RailsΞϓϦ ͷϓϩηε

Slide 34

Slide 34 text

੾Γग़͠ݩΞϓϦͷrspecϓϩηε spec_helper.rb at_exit ڞ༗DB (ޙͰ੾Γ཭͢) ࠓճ࢖༻ͨ͠ςετख๏: ੾Γग़ͨ͠ΞϓϦ Λىಈͯ͠ϢχοτςετΛ૸ΒͤΔ *_spec.rb FactoryBot ੾Γग़ͨ͠RailsΞϓϦ ͷϓϩηε ੾Γग़͠ݩ RailsΞϓϦ Կ΋ελϒͤͣϦΫΤετ

Slide 35

Slide 35 text

੾Γग़͠ݩΞϓϦͷrspecϓϩηε spec_helper.rb at_exit ڞ༗DB (ޙͰ੾Γ཭͢) ࠓճ࢖༻ͨ͠ςετख๏: ੾Γग़ͨ͠ΞϓϦ Λىಈͯ͠ϢχοτςετΛ૸ΒͤΔ *_spec.rb FactoryBot ੾Γग़ͨ͠RailsΞϓϦ ͷϓϩηε ੾Γग़͠ݩ RailsΞϓϦ ੾Γग़ͨ͠DB DBͷ੾Γ཭͠ʹ൐͍FactoryBotΛଔۀ ͔ΘΓʹAPIͰϦιʔεΛ࡞Δ

Slide 36

Slide 36 text

͜ͷख๏ͷྑ͍ͱ͜Ζɺѱ͍ͱ͜Ζ • ྑ͍ͱ͜Ζ • ଞͷਓ͕มߋͨ͠ςετΛ΄΅ͦͷ··࢖͑ɺͱʹ͔͘࢓༷มߋʹڧ͍ • Կ΋ελϒ͠ͳ͍͍ͯ͘ͷͰςετΛॻ͘ͷָ͕ • ѱ͍ͱ͜Ζ • ੾Γग़͠ݩͷCIͷ͕࣌ؒ৳ͼΔ • ੾Γग़ͨ͠ΞϓϦΛىಈ͢ΔखஈΛϝϯς͢Δίετ͕͔͔Δ • ੾Γग़ͨ͠ΞϓϦ಺ͰյΕͨ࣌ͷσόοάํ๏͕গ͠มΘΔͷͰ໘౗

Slide 37

Slide 37 text

ۜͷ஄ؙ͸ͳ͍ͷͰࣗ෼ͨͪͷϑΣʔζ΍ཁ݅ ʹ߹ΘͤͯॊೈʹղܾࡦΛม͑ଓ͚·͠ΐ͏

Slide 38

Slide 38 text

3. Railsʹ͓͚ΔϦτϥΠͷ࣮૷ύλʔϯ

Slide 39

Slide 39 text

ΤϥʔϋϯυϦϯάͷ؍఺Ͱ ೚ҙͷAPIΫϥΠΞϯτʹٻΊΒΕΔཁ݅ • ඇܾఆతͳΤϥʔʹରͯ͠exponential backoff͖ͭͰϦτ ϥΠͰ͖Δ • λΠϜΞ΢τΛઃ͚͍ͯΔ (ແݶʹϋϯά͠ͳ͍) • αʔϏε͕མ͍ͪͯΔ͜ͱ͕໌Β͔ͳ৔߹ɺҰఆظؒϦ ΫΤετΛεΩοϓͰ͖Δ (Circuit Breaker)

Slide 40

Slide 40 text

Circuit BreakerύλʔϯͷͨΊͷϥΠϒϥϦ • circuit_breaker.gem • γϯϓϧɺ͚ͩͲmix-inͳͷͰݸਓతʹ͸͋·Γ࢖͍ͨ͘ͳ͍ • expeditor.gem • Circuit Breaker͚ͩͰͳ͘ɺϦτϥΠɺλΠϜΞ΢τɺࣦഊ࣌ ͷϑΥʔϧόοΫɺඇಉظԽͳͲ΋࣮૷ • ਖ਼௚expeditorʹඇಉظԽ͸͍Βͳ͔ͬͨΜ͡Όͳ͍͔ͱࢥͬͯ Δ͚ͲɺฐࣾͰ͸makimoto͞Μͱ๻͕ৄ͍͠ͷͰ͜ΕΛ࠾༻

Slide 41

Slide 41 text

࣮ࡍͷAPIΫϥΠΞϯτͷྫ (GET)

Slide 42

Slide 42 text

ϦτϥΠઓུ • exponential backoffΛ͚ͭɺແཧʹෛՙΛ͔͚ͳ͍Α͏ʹ • 5XXͰ΋ɺϦτϥΠՄೳͳ͜ͱ͕໌Β͔Ͱͳ͍Τϥʔ͸ઈରϦτϥΠ͠ͳ͍ • ΫϥΠΞϯτଆͷϫʔΧʔΛແବʹϒϩοΫͨ͠Γɺαʔόʔଆͷো֐࣌ʹෛՙΛ͔͚Α Γঢ়گΛѱԽͤͨ͞Γ͢ΔͨΊ • ྫ͑͹500͸NoMethodErrorͱ͔ͩͬͨΓ͢ΔͷͰϦτϥΠ͢΂͖Ͱͳ͍ • ϦτϥΠࠐΈͷશମͷλΠϜΞ΢τͱɺ֤ϦτϥΠͷλΠϜΞ΢τΛઃ͚Δ • ҰॠͰࢮ͵ΤϥʔΛΑΓଟΊʹϦτϥΠ͢ΔͨΊ • ͲͷΤϥʔ͕ϦτϥΠՄೳ͔͸APIʹΑͬͯҟͳΔ • ֤HTTPϝιου͝ͱʹ᠟౳ੑʹؔ͢ΔڍಈΛαʔόʔଆͰ౷Ұ͓ͯ͘͠ͱָ

Slide 43

Slide 43 text

RailsͰසൟʹ࡞ΒΕͦ͏ͳҎԼͷύλʔϯͰ APIαʔόʔ/ΫϥΠΞϯτΛͲ͏࣮૷͢Δ͔ • GET /embulk_configs (index) • GET /embulk_configs/:id (show) • POST /embulk_configs (create) • PATCH /embulk_configs/:id (update) • DELETE /embulk_configs/:id (destroy) APIͩͱ #new, #edit ͸࡞Γ·ͤΜΑͶ?

Slide 44

Slide 44 text

GET /embulk_configs (index) • αʔόʔ • ౰ͨΓલ͚ͩͲGET͸શͯϩάҎ֎ͷ෭࡞༻͕ͳ͍Α͏ʹ͢Δ • ΫϥΠΞϯτ • ΄΅ϦτϥΠ͠์୊͚ͩͲɺલड़ͷཧ༝ʹΑΓ404, 422, 500 ͱ͔͸΍Ί͓͖ͯ·͠ΐ͏ • αʔόʔ͕མͪͯΔܥ(502, 503)ͱΫϥΠΞϯτͰλΠϜΞ΢ τͨ͠ܥΛϦτϥΠ͢Δ

Slide 45

Slide 45 text

GET /embulk_configs/:id (show) • GETͳͷͰ#indexͱಉ͡ঢ়ଶʹ͓ͯ͘͠

Slide 46

Slide 46 text

POST /embulk_configs (create) • αʔόʔ • ࡞੒ର৅ͷϦιʔεʹunique index͕͋Δ: RecordNotUnique࣌ͷϨεϙϯεΛ ۠ผՄೳʹ͢Δ (409ฦ͢ͱ͔) • ͳ͍: ϦΫΤετIDΈ͍ͨͳ΋ͷΛΫϥΠΞϯτʹ༻ҙͤ͞ɺͦΕΛ͚࣋ͭͩͷ ςʔϒϧͷϨίʔυͱ࡞੒ର৅ͷϦιʔεΛτϥϯβΫγϣϯͰίϛοτ͢Δ • ΫϥΠΞϯτ • 409 Conflictͷ৔߹͸ϦτϥΠ͠ͳ͍ • ϦΫΤετIDΛ༻ҙ͢Δ৔߹͸SecureRandom.uuidͱ͔Λ༻ҙ͠ɺϦτϥΠͷ ؒͰ͸ಉ͡஋͕౉ΔΑ͏ʹ͢Δ 409ͷ࿩ͷݩωλ: http://frsyuki.hatenablog.com/entry/2014/06/09/164559

Slide 47

Slide 47 text

PATCH /embulk_configs/:id (update) • αʔόʔ • ؾ߹Ͱ᠟౳ʹ͢Δ • ΞϓϦέʔγϣϯ࣍ୈ͕ͩɺ͘͝γϯϓϧͳཁ݅Ͱ͋Ε͹ ᠟౳ʹͳΔΑ͏ʹ࣮૷͢Δͷ͸೉͘͠ͳ͍ • ΫϥΠΞϯτ • ᠟౳ʹ͑͞ͳ͍ͬͯΕ͹ɺGETͱ͔ͱϦτϥΠ͢΂͖Τ ϥʔ͸มΘΒͳ͍ (ͳͬͯͳ͍ͳΒৗʹϦτϥΠ͠ͳ͍) UPDATEͷ᠟౳ੑʹؔͯ͠͸ͪ͜Β΋ࢀߟʹ: http://frsyuki.hatenablog.com/entry/2017/08/10/140416

Slide 48

Slide 48 text

DELETE /embulk_configs/:id (destroy) • αʔόʔ • ඞͣ͠΋ϦτϥΠͰਖ਼ৗͳϨεϙϯε͕ظ଴Ͱ͖Δํ๏Ͱ͸ͳ͍͕ɺී௨ʹfind͠ ͯdestroyͨ͠ΒϦιʔεʹର͢Δૢ࡞͸গͳ͘ͱ΋᠟౳ʹͳΔ • Ͳ͏ͯ͠΋᠟౳ʹ͍ͨ͠ͳΒɺ࿦ཧ࡟আ͔ͭաڈʹϨίʔυ͸ଘࡏ͚ͨ͠Ͳ࡟আ ࡁͰ͋Δ͜ͱ͕Θ͔Δ৔߹͸ɺ੒ޭΛฦͯ͠΋͍͍͔΋ • ෺ཧ࡟আͷ৔߹͸ͦ΋ͦ΋࡞ΒΕ͍ͯͳ͔ͬͨ৔߹ͱ൑ผͰ͖ͳ͍ͷͰ404 • ΫϥΠΞϯτ • ্هͷڍಈͰ͋Ε͹GETͱಉ͡ΤϥʔΛϦτϥΠͯ͠Ε͹͋·ΓࠔΒͳ͍͸ͣ • طʹ࡟আࡁͷ৔߹(404)͸ϦτϥΠ͠ͳ͍

Slide 49

Slide 49 text

4. RailsΞϓϦͷ੾Γग़͠Ͱࠔ೉ͳ఺

Slide 50

Slide 50 text

੾Γग़͠ઌʹ͍͚࣋ͬͯͳ͍ ΞιγΤʔγϣϯ • ྫ͑͹੾Γग़ͦ͏ͱ͍ͯ͠ΔϞσϧ͕ belongs_to :user Λ࣋ͭ৔ ߹ • ֎෦ʹݟ͑Δܗͱͯ͠αʔϏε͕෼͔Ε͍ͯΔ৔߹͸usersςʔ ϒϧͷߋ৽ΛPubSubͰ௨஌ͯ͠੾Γग़͠ઌʹίϐʔΛ࣋ͭͱ͔ • ͋Δ͍͸ɺDBΛ෼཭͢Δ౎߹Ͳ͏΍ͬͯ΋Ұ؏ੑ͸ଛͳΘΕΔ ͷͰɺׂΓ੾ͬͯuser_id͚ͩ΍ΓऔΓ͢Δ౳ • JOINͰ͖ͳ͍͠ΧϥϜͷ஋ͷҙຯ͸ෆ໌ʹͳΔ͕ɺߏ੒͸ γϯϓϧʹอͯΔ

Slide 51

Slide 51 text

JOINͷඞཁͳιʔτ • A.belongs_to :b ͰBΛผαʔϏεʹ੾Γग़͍͕ͨ͠ɺb.nameͰAΛ ιʔτ͢ΔAPI͕͋Δ৔߹ • ࢮ͋ΔͷΈ • ͦ΋ͦ΋ͦΜͳΠϯλʔϑΣʔεΛ࡞ΔͷΛ΍ΊΖ • DBͷ஋ͷҰ؏ੑΛ͋Δఔ౓͖͋ΒΊɺb.nameͷίϐʔͰ͋Δ a.b_nameΛੜ΍ͯ͠ϝϯς͢Δ͔͠ͳ͍ • ྫ͑͹ιʔτʹa.b_nameΛ࢖͏͕஋͸b.nameΛฦ͢ͳͲ͢Δɻ ͨ·ʹॱং͕͓͔͍͠ͷΛڐ༰Ͱ͖ͳ͍ͳΒ੾Γग़͠͸ఘΊΔ

Slide 52

Slide 52 text

ؾܰʹղܾͰ͖ͳ͘ͳΔN+1໰୊ • ActiveRecordͷΫΤϦΛAPIݺͼग़͠ʹͨ͠ॠؒ includes/preload/eager_load ͕࢖͑ͣਏ͍໰୊ • ઈରʹ΍ΊΑ͏: ࢥߟఀࢭΩϟογϡ • ී௨ʹidͷϦετΛऔͬͯฦ͢APIΛੜ΍͠ɺฦ͖ͬͯͨ ࢠϦιʔεΛ਌ϦιʔεͷΠϯελϯεม਺ʹ২͑Δ͔ɺ { ਌Ϧιʔε => ࢠϦιʔε } ͳHashΛ࡞Δ • ΍͍͔ͬͯ͘͠ͳ͍͕ɺ͜ͷ໰୊͸ൺֱత؆୯ͳํ

Slide 53

Slide 53 text

ೝূೝՄͲ͏͢Δͷ໰୊ • ී௨ʹ֎෦ʹݟ͑ͯΔ৔߹͸ී௨ʹೝূΛ࣮૷͢Ε͹͍͍ ͚ͩ • ಺෦Ͱୟ͘API͸ɺ֎෦͔Βୟ͚ͳ͍Α͏ʹ্ͨ͠Ͱɺཁ ݅ʹΑͬͯ͸ϕʔγοΫͳೝূೝՄΛεΩοϓͰ͖Δ • ͕ɺ੾Γग़͠ઌͷೝՄʹ੾Γग़͠ݩͷϦιʔε͕ඞཁ ͳ৔߹ɺ͕Μ͹ͬͯ෼୲͠੾Γ཭͍͔ͯ͘͠͠ͳ͍ • ʮେมͰ͢ΑͶɺ͜ΕʯҎ্ͷؾ࣋ͪ͸ಛʹͳ͍

Slide 54

Slide 54 text

࠷ߴͷղܾࡦ: ΈΜͳͰҰͭͷνʔϜʹͳΓ શһ͕શͯΛϝϯςͰ͖ΔΑ͏ʹͳΓ ͦ΋ͦ΋ϚΠΫϩαʔϏεԽΛෆཁʹ͢Δ ·͋ͦΕ͕Ͱ͖ͳ͍͔Β͜Μͳ໘౗ͳ໰୊Λղܾ͠ͳ͍ͱ͍͚ͳ͍Θ͚Ͱ͢

Slide 55

Slide 55 text

5. ҆શʹσϓϩΠ؀ڥΛվળ͍ͯ͘͠࿩

Slide 56

Slide 56 text

ةݥͳσϓϩΠ؀ڥΛվળ͠ ͍ͯͬͨ࿩ • ϚΠΫϩαʔϏε͸ಛʹؔ܎ͳ͍͚Ͳʮ҆શ͔ͭߴ଎ʯʹ ॏཁͳ෦෼ • ͲΜͳʹஸೡʹ࣮૷ͯ͠΋σϓϩΠ؀ڥ͕μϝͩͱ҆શ ʹ΋ߴ଎ʹ΋ਐΊΒΕͳ͍

Slide 57

Slide 57 text

ਓྨͷσϓϩΠͷจ໌ͷൃల • ssh + git pull σϓϩΠ (capistrano) • ΞʔΧΠϒΛpull͢ΔλΠϓͷσϓϩΠ • DockerίϯςφͷσϓϩΠ • ίϯςφΫϥελ΁ͷσϓϩΠ (ECS, k8s)

Slide 58

Slide 58 text

ਓྨͷσϓϩΠͷจ໌ͷൃల • ssh + git pull σϓϩΠ (capistrano) • ΞʔΧΠϒΛpull͢ΔλΠϓͷσϓϩΠ • DockerίϯςφͷσϓϩΠ • ίϯςφΫϥελ΁ͷσϓϩΠ (ECS, k8s) զʑ͸ݱࡏͲ͔ͬͪΛ ਐΊͯΔঢ়ଶ

Slide 59

Slide 59 text

ϚϧνΫϥ΢υɺ DockerԽʹੑೳ໰୊ͷ͋ΔHadoop => CodeDeploy

Slide 60

Slide 60 text

ਓࡐ͕ෆ଍͍ͯ͠Δ͸͕ͣԿ ނ͔ཚཱ͢ΔσϓϩΠ؀ڥ

Slide 61

Slide 61 text

CI͕௨͍ͬͯͳͯ͘΋30෼ʹҰճ ChefͰσϓϩΠ͕૸Δ

Slide 62

Slide 62 text

CI͕௨͍ͬͯͳͯ͘΋30෼ʹҰճ ChefͰσϓϩΠ͕૸Δ => CodeDeploy͔ΒmitamaeΛୟ͘ k0kubun/mitamae-plugin-resource-deploy_revision k0kubun/mitamae-plugin-resource-runit k0kubun/mitamae-plugin-recipe-buildpack

Slide 63

Slide 63 text

Ͳ͏΍ͬͯಈ͍ͯΔ͔શ͘ Θ͔Βͳ͍heroku-buildpack

Slide 64

Slide 64 text

खಈͷఀࢭΦϖϨʔγϣϯ Կ͕Ͳ͜ʹ͋Δ͔͙͢ࢥ͍ग़ͤͳ͘ͳΔrunit

Slide 65

Slide 65 text

खಈͷఀࢭΦϖϨʔγϣϯ Կ͕Ͳ͜ʹ͋Δ͔͙͢ࢥ͍ग़ͤͳ͘ͳΔrunit => ࣗಈఀࢭͰ͖Δsystemd service

Slide 66

Slide 66 text

gemͷόʔδϣϯΛ্͛ΔͱյΕΔ

Slide 67

Slide 67 text

gemͷόʔδϣϯΛ্͛ΔͱյΕΔ => αʔϏεΠϯ/αʔϏεΞ΢τԽ

Slide 68

Slide 68 text

We’re hiring

Slide 69

Slide 69 text

·ͱΊ • ͦ͜Ͱ੾Γग़͢ͷ͕ຊ౰ʹྑ͍ͷ͔Α͘ߟ͑·͠ΐ͏ • Ҡߦத͸ϩʔΧϧͰΞϓϦΛ্ཱͪ͛ͯςετ͢Δͱ͍͏ બ୒ࢶ΋༗ޮ • API͸᠟౳ʹͳΔΑ͏ઃܭɺແҙຯͳϦτϥΠ͸ආ͚Δ • ੾Γग़͠ʹ͓͚Δਏ͍఺ͱͦͷରԠํ਑Λ঺հ͠·ͨ͠ • We’re hiring