安全かつ高速に進めるマイクロサービス化 / railsdm2018

安全かつ高速に進めるマイクロサービス化 / railsdm2018

Rails Developers Meetup 2018
https://railsdm.github.io/

08d5432a5bc31e6d9edec87b94cb1db1?s=128

Takashi Kokubun

March 24, 2018
Tweet

Transcript

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

  2. ࣗݾ঺հ • GitHub, Twitter: @k0kubun • Treasure Data ॴଐ •

    Site Reliability Engineer • Ruby 2.6ͷJITίϯύΠϥ։ൃத
  3. 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
  4. ࠓ೔࿩͢͜ͱ 1. αʔϏε෼ׂͷલʹߟ͑Δ΂͖͜ͱ 2. ҆શ͔ͭߴ଎ʹ෼ׂ͢ΔͨΊͷςετख๏ 3. Railsʹ͓͚ΔϦτϥΠͷ࣮૷ύλʔϯ 4. RailsΞϓϦͷ੾Γग़͠Ͱࠔ೉ͳ఺ 5.

    ҆શʹσϓϩΠ؀ڥΛվળ͍ͯ͘͠࿩
  5. 1. αʔϏε෼ׂͷલʹߟ͑Δ΂͖͜ͱ

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

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

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

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

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

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

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

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

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

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

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

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

  18. ো֐ൃੜݯͷ૿Ճ

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

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

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

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

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

  24. ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ

    Consumer Driven Contract Testing ࢀߟ: https://medium.com/@copyconstruct/testing-microservices-the-sane-way-9bb31d158c16
  25. ςετͰ۩ମతʹԿΛୡ੒͍ͨ͠ͷ͔ • ୯ͳΔίϐϖͰࡁΈͦ͏ʹͳ͘ɺ੾Γग़͢ॠ͕ؒҰ൪Ϧε Ϋ͕ߴ͍ͷͰɺͲ͏ʹ͔͚ͯͦͩ҆͜͠શʹࡁ·͍ͤͨ • ͔ͱ͍ͬͯઐ༻ͷςετΛҰ͔Βॻ͖·͘Δ΄ͲՋͰ͸ͳ ͍ͷͰɺۃྗطଘͷςετࢿ࢈Λྲྀ༻͍ͨ͠ • ͦͯ͠ଞͷ։ൃΛશ͘ࢭΊͨ͘ͳ͍ͷͰςετ͕ৗʹ࢓༷ ͷมߋʹ௥ैͰ͖ͳ͍ͱ͍͚ͳ͍

  26. ओͳςετͷબ୒ࢶ • ϝιουݺͼग़͠୯ҐͰڥքΛશͯελϒ͢Δ • VCRͰ֎෦ͷϦΫΤετΛશͯελϒ͢Δ • ಈ͔͢ίϯϙʔωϯτΛશͯ༻ҙͯ݁͠߹ςετ • Pact Ͱ

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

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

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

    Consumer Driven Contract Testing ࢓༷มߋΛ͢Δਓͨͪʹ͜ΕΛֶशͯ͠΋Β͏ίετ͕ߴ ͗͢Δ + Pact Brokerͷ༻ҙ΍ӡ༻΋ඞཁͳͷͰɺҰճͷ ੾Γग़͠Ͱಋೖ͢Δʹ͸ΦʔόʔΩϧ (௕ظతʹ͸ཉ͍͠)
  30. ͡Ό͋݁߹ςετ͚ͩΛཔΓʹͰ͖Δͷ͔? • ݱঢ়ɺ݁߹ςετ͸ओʹΫϦςΟΧϧͳڍಈʹରͯ͠ͷΈ ॻ͔Ε͓ͯΓɺͦΕ͚ͩͩͱखബ͍ • ͔ͱ͍ͬͯແҋʹ݁߹ςετΛ૿΍͢ͱอक͕͠ΜͲ͍ • ςετࣗମͷอक͕νʔϜʹด͡ͳ͘ͳΔͷͰίϛϡχ έʔγϣϯίετ͕ൃੜ •

    ނো఺͕ଟͯ͘ෆ҆ఆʹͳΓ͕ͪ (ಛʹCapybaraͱ͔)
  31. ੾Γग़͠ݩΞϓϦͷrspecϓϩηε spec_helper.rb ࠓճ࢖༻ͨ͠ςετख๏: ੾Γग़ͨ͠ΞϓϦ Λىಈͯ͠ϢχοτςετΛ૸ΒͤΔ

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

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

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

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

    ੾Γग़ͨ͠RailsΞϓϦ ͷϓϩηε ੾Γग़͠ݩ RailsΞϓϦ ੾Γग़ͨ͠DB DBͷ੾Γ཭͠ʹ൐͍FactoryBotΛଔۀ ͔ΘΓʹAPIͰϦιʔεΛ࡞Δ
  36. ͜ͷख๏ͷྑ͍ͱ͜Ζɺѱ͍ͱ͜Ζ • ྑ͍ͱ͜Ζ • ଞͷਓ͕มߋͨ͠ςετΛ΄΅ͦͷ··࢖͑ɺͱʹ͔͘࢓༷มߋʹڧ͍ • Կ΋ελϒ͠ͳ͍͍ͯ͘ͷͰςετΛॻ͘ͷָ͕ • ѱ͍ͱ͜Ζ •

    ੾Γग़͠ݩͷCIͷ͕࣌ؒ৳ͼΔ • ੾Γग़ͨ͠ΞϓϦΛىಈ͢ΔखஈΛϝϯς͢Δίετ͕͔͔Δ • ੾Γग़ͨ͠ΞϓϦ಺ͰյΕͨ࣌ͷσόοάํ๏͕গ͠มΘΔͷͰ໘౗
  37. ۜͷ஄ؙ͸ͳ͍ͷͰࣗ෼ͨͪͷϑΣʔζ΍ཁ݅ ʹ߹ΘͤͯॊೈʹղܾࡦΛม͑ଓ͚·͠ΐ͏

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

  39. ΤϥʔϋϯυϦϯάͷ؍఺Ͱ ೚ҙͷAPIΫϥΠΞϯτʹٻΊΒΕΔཁ݅ • ඇܾఆతͳΤϥʔʹରͯ͠exponential backoff͖ͭͰϦτ ϥΠͰ͖Δ • λΠϜΞ΢τΛઃ͚͍ͯΔ (ແݶʹϋϯά͠ͳ͍) •

    αʔϏε͕མ͍ͪͯΔ͜ͱ͕໌Β͔ͳ৔߹ɺҰఆظؒϦ ΫΤετΛεΩοϓͰ͖Δ (Circuit Breaker)
  40. Circuit BreakerύλʔϯͷͨΊͷϥΠϒϥϦ • circuit_breaker.gem • γϯϓϧɺ͚ͩͲmix-inͳͷͰݸਓతʹ͸͋·Γ࢖͍ͨ͘ͳ͍ • expeditor.gem • Circuit

    Breaker͚ͩͰͳ͘ɺϦτϥΠɺλΠϜΞ΢τɺࣦഊ࣌ ͷϑΥʔϧόοΫɺඇಉظԽͳͲ΋࣮૷ • ਖ਼௚expeditorʹඇಉظԽ͸͍Βͳ͔ͬͨΜ͡Όͳ͍͔ͱࢥͬͯ Δ͚ͲɺฐࣾͰ͸makimoto͞Μͱ๻͕ৄ͍͠ͷͰ͜ΕΛ࠾༻
  41. ࣮ࡍͷAPIΫϥΠΞϯτͷྫ (GET)

  42. ϦτϥΠઓུ • exponential backoffΛ͚ͭɺແཧʹෛՙΛ͔͚ͳ͍Α͏ʹ • 5XXͰ΋ɺϦτϥΠՄೳͳ͜ͱ͕໌Β͔Ͱͳ͍Τϥʔ͸ઈରϦτϥΠ͠ͳ͍ • ΫϥΠΞϯτଆͷϫʔΧʔΛແବʹϒϩοΫͨ͠Γɺαʔόʔଆͷো֐࣌ʹෛՙΛ͔͚Α Γঢ়گΛѱԽͤͨ͞Γ͢ΔͨΊ •

    ྫ͑͹500͸NoMethodErrorͱ͔ͩͬͨΓ͢ΔͷͰϦτϥΠ͢΂͖Ͱͳ͍ • ϦτϥΠࠐΈͷશମͷλΠϜΞ΢τͱɺ֤ϦτϥΠͷλΠϜΞ΢τΛઃ͚Δ • ҰॠͰࢮ͵ΤϥʔΛΑΓଟΊʹϦτϥΠ͢ΔͨΊ • ͲͷΤϥʔ͕ϦτϥΠՄೳ͔͸APIʹΑͬͯҟͳΔ • ֤HTTPϝιου͝ͱʹ᠟౳ੑʹؔ͢ΔڍಈΛαʔόʔଆͰ౷Ұ͓ͯ͘͠ͱָ
  43. 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 ͸࡞Γ·ͤΜΑͶ?
  44. GET /embulk_configs (index) • αʔόʔ • ౰ͨΓલ͚ͩͲGET͸શͯϩάҎ֎ͷ෭࡞༻͕ͳ͍Α͏ʹ͢Δ • ΫϥΠΞϯτ •

    ΄΅ϦτϥΠ͠์୊͚ͩͲɺલड़ͷཧ༝ʹΑΓ404, 422, 500 ͱ͔͸΍Ί͓͖ͯ·͠ΐ͏ • αʔόʔ͕མͪͯΔܥ(502, 503)ͱΫϥΠΞϯτͰλΠϜΞ΢ τͨ͠ܥΛϦτϥΠ͢Δ
  45. GET /embulk_configs/:id (show) • GETͳͷͰ#indexͱಉ͡ঢ়ଶʹ͓ͯ͘͠

  46. POST /embulk_configs (create) • αʔόʔ • ࡞੒ର৅ͷϦιʔεʹunique index͕͋Δ: RecordNotUnique࣌ͷϨεϙϯεΛ ۠ผՄೳʹ͢Δ

    (409ฦ͢ͱ͔) • ͳ͍: ϦΫΤετIDΈ͍ͨͳ΋ͷΛΫϥΠΞϯτʹ༻ҙͤ͞ɺͦΕΛ͚࣋ͭͩͷ ςʔϒϧͷϨίʔυͱ࡞੒ର৅ͷϦιʔεΛτϥϯβΫγϣϯͰίϛοτ͢Δ • ΫϥΠΞϯτ • 409 Conflictͷ৔߹͸ϦτϥΠ͠ͳ͍ • ϦΫΤετIDΛ༻ҙ͢Δ৔߹͸SecureRandom.uuidͱ͔Λ༻ҙ͠ɺϦτϥΠͷ ؒͰ͸ಉ͡஋͕౉ΔΑ͏ʹ͢Δ 409ͷ࿩ͷݩωλ: http://frsyuki.hatenablog.com/entry/2014/06/09/164559
  47. PATCH /embulk_configs/:id (update) • αʔόʔ • ؾ߹Ͱ᠟౳ʹ͢Δ • ΞϓϦέʔγϣϯ࣍ୈ͕ͩɺ͘͝γϯϓϧͳཁ݅Ͱ͋Ε͹ ᠟౳ʹͳΔΑ͏ʹ࣮૷͢Δͷ͸೉͘͠ͳ͍

    • ΫϥΠΞϯτ • ᠟౳ʹ͑͞ͳ͍ͬͯΕ͹ɺGETͱ͔ͱϦτϥΠ͢΂͖Τ ϥʔ͸มΘΒͳ͍ (ͳͬͯͳ͍ͳΒৗʹϦτϥΠ͠ͳ͍) UPDATEͷ᠟౳ੑʹؔͯ͠͸ͪ͜Β΋ࢀߟʹ: http://frsyuki.hatenablog.com/entry/2017/08/10/140416
  48. DELETE /embulk_configs/:id (destroy) • αʔόʔ • ඞͣ͠΋ϦτϥΠͰਖ਼ৗͳϨεϙϯε͕ظ଴Ͱ͖Δํ๏Ͱ͸ͳ͍͕ɺී௨ʹfind͠ ͯdestroyͨ͠ΒϦιʔεʹର͢Δૢ࡞͸গͳ͘ͱ΋᠟౳ʹͳΔ • Ͳ͏ͯ͠΋᠟౳ʹ͍ͨ͠ͳΒɺ࿦ཧ࡟আ͔ͭաڈʹϨίʔυ͸ଘࡏ͚ͨ͠Ͳ࡟আ

    ࡁͰ͋Δ͜ͱ͕Θ͔Δ৔߹͸ɺ੒ޭΛฦͯ͠΋͍͍͔΋ • ෺ཧ࡟আͷ৔߹͸ͦ΋ͦ΋࡞ΒΕ͍ͯͳ͔ͬͨ৔߹ͱ൑ผͰ͖ͳ͍ͷͰ404 • ΫϥΠΞϯτ • ্هͷڍಈͰ͋Ε͹GETͱಉ͡ΤϥʔΛϦτϥΠͯ͠Ε͹͋·ΓࠔΒͳ͍͸ͣ • طʹ࡟আࡁͷ৔߹(404)͸ϦτϥΠ͠ͳ͍
  49. 4. RailsΞϓϦͷ੾Γग़͠Ͱࠔ೉ͳ఺

  50. ੾Γग़͠ઌʹ͍͚࣋ͬͯͳ͍ ΞιγΤʔγϣϯ • ྫ͑͹੾Γग़ͦ͏ͱ͍ͯ͠ΔϞσϧ͕ belongs_to :user Λ࣋ͭ৔ ߹ • ֎෦ʹݟ͑Δܗͱͯ͠αʔϏε͕෼͔Ε͍ͯΔ৔߹͸usersςʔ

    ϒϧͷߋ৽ΛPubSubͰ௨஌ͯ͠੾Γग़͠ઌʹίϐʔΛ࣋ͭͱ͔ • ͋Δ͍͸ɺDBΛ෼཭͢Δ౎߹Ͳ͏΍ͬͯ΋Ұ؏ੑ͸ଛͳΘΕΔ ͷͰɺׂΓ੾ͬͯuser_id͚ͩ΍ΓऔΓ͢Δ౳ • JOINͰ͖ͳ͍͠ΧϥϜͷ஋ͷҙຯ͸ෆ໌ʹͳΔ͕ɺߏ੒͸ γϯϓϧʹอͯΔ
  51. JOINͷඞཁͳιʔτ • A.belongs_to :b ͰBΛผαʔϏεʹ੾Γग़͍͕ͨ͠ɺb.nameͰAΛ ιʔτ͢ΔAPI͕͋Δ৔߹ • ࢮ͋ΔͷΈ • ͦ΋ͦ΋ͦΜͳΠϯλʔϑΣʔεΛ࡞ΔͷΛ΍ΊΖ

    • DBͷ஋ͷҰ؏ੑΛ͋Δఔ౓͖͋ΒΊɺb.nameͷίϐʔͰ͋Δ a.b_nameΛੜ΍ͯ͠ϝϯς͢Δ͔͠ͳ͍ • ྫ͑͹ιʔτʹa.b_nameΛ࢖͏͕஋͸b.nameΛฦ͢ͳͲ͢Δɻ ͨ·ʹॱং͕͓͔͍͠ͷΛڐ༰Ͱ͖ͳ͍ͳΒ੾Γग़͠͸ఘΊΔ
  52. ؾܰʹղܾͰ͖ͳ͘ͳΔN+1໰୊ • ActiveRecordͷΫΤϦΛAPIݺͼग़͠ʹͨ͠ॠؒ includes/preload/eager_load ͕࢖͑ͣਏ͍໰୊ • ઈରʹ΍ΊΑ͏: ࢥߟఀࢭΩϟογϡ • ී௨ʹidͷϦετΛऔͬͯฦ͢APIΛੜ΍͠ɺฦ͖ͬͯͨ

    ࢠϦιʔεΛ਌ϦιʔεͷΠϯελϯεม਺ʹ২͑Δ͔ɺ { ਌Ϧιʔε => ࢠϦιʔε } ͳHashΛ࡞Δ • ΍͍͔ͬͯ͘͠ͳ͍͕ɺ͜ͷ໰୊͸ൺֱత؆୯ͳํ
  53. ೝূೝՄͲ͏͢Δͷ໰୊ • ී௨ʹ֎෦ʹݟ͑ͯΔ৔߹͸ී௨ʹೝূΛ࣮૷͢Ε͹͍͍ ͚ͩ • ಺෦Ͱୟ͘API͸ɺ֎෦͔Βୟ͚ͳ͍Α͏ʹ্ͨ͠Ͱɺཁ ݅ʹΑͬͯ͸ϕʔγοΫͳೝূೝՄΛεΩοϓͰ͖Δ • ͕ɺ੾Γग़͠ઌͷೝՄʹ੾Γग़͠ݩͷϦιʔε͕ඞཁ ͳ৔߹ɺ͕Μ͹ͬͯ෼୲͠੾Γ཭͍͔ͯ͘͠͠ͳ͍

    • ʮେมͰ͢ΑͶɺ͜ΕʯҎ্ͷؾ࣋ͪ͸ಛʹͳ͍
  54. ࠷ߴͷղܾࡦ: ΈΜͳͰҰͭͷνʔϜʹͳΓ શһ͕શͯΛϝϯςͰ͖ΔΑ͏ʹͳΓ ͦ΋ͦ΋ϚΠΫϩαʔϏεԽΛෆཁʹ͢Δ ·͋ͦΕ͕Ͱ͖ͳ͍͔Β͜Μͳ໘౗ͳ໰୊Λղܾ͠ͳ͍ͱ͍͚ͳ͍Θ͚Ͱ͢

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

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

  57. ਓྨͷσϓϩΠͷจ໌ͷൃల • ssh + git pull σϓϩΠ (capistrano) • ΞʔΧΠϒΛpull͢ΔλΠϓͷσϓϩΠ

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

    • DockerίϯςφͷσϓϩΠ • ίϯςφΫϥελ΁ͷσϓϩΠ (ECS, k8s) զʑ͸ݱࡏͲ͔ͬͪΛ ਐΊͯΔঢ়ଶ
  59. ϚϧνΫϥ΢υɺ DockerԽʹੑೳ໰୊ͷ͋ΔHadoop => CodeDeploy

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

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

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

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

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

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

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

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

  68. We’re hiring

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

    • We’re hiring