スタートアップに入ってまずやったインフラTIPS

2b061d517e360c493bb567aa6c3e540d?s=47 kotamat
May 30, 2018

 スタートアップに入ってまずやったインフラTIPS

2b061d517e360c493bb567aa6c3e540d?s=128

kotamat

May 30, 2018
Tweet

Transcript

  1. ελʔτΞοϓʹೖͬ ͯ·ͣ΍ͬͨΠϯϑϥ TIPS 2018/05/30 ελʔτΞοϓ × Πϯϑϥ ʙര଎։ൃΛߦ͏4ࣾͷ։ൃΛࢧ͑ΔΠϯϑϥઓུʙ @kotamat

  2. ࣗݾ঺հ • SCOUTER CTO • @kotamat • twitter͸@kotamats •

  3. ೔ຊॳ঺հ໔ڐͳ͠Ͱਓࡐ঺հ͕Ͱ͖Δ
 ෭ۀܕιʔγϟϧϔουϋϯςΟϯά
 ݱࡏ ໊͕ొ࿥͠਎ۙͳస৬ر๬ऀΛ
 ܝࡌاۀʹ঺հ͢Δ͜ͱͰใु͕ൃੜ ਓࡐ঺հձࣾ ϓϩ ޲͚Ϋϥ΢υαʔϏε
 ໿ ࣾͷٻਓ%#Λఏڙ


    ঺հྉΛड͚औΕΔ ۀքॳͷ4BB4αʔϏε ̎ͭͷ)35FDIαʔϏεΛల։
  4.   4$065&3ͱ͸ ແྉͰ
 ܝࡌٻਓ ϓϩͷ ΤʔδΣϯτ
 ࣾ  ਓ௒ͷΤʔδΣϯτωοτϫʔΫΛ׆༻ͨ͠ਓࡐ঺հ

    ͭͷ૭ޱͰ͝঺հऀͷ฼ूஂΛ࠷େԽ͢Δ͜ͱ͕Ͱ͖·͢ ݸਓͷ
 εΧ΢λʔ
  ਓ ٻਓΛ৐ͤΔ͚ͩʂ
  5.   ঺հձࣾͷ਺ʹ൐ͬͯ૿͑Δ؅ཧίετ ࣮ࡍʹ঺հ͕དྷΔͷ͸Ұ෦ͷձࣾͷΈ ໿ࣾ  ਓ͔ΒҰׅ঺հ ෭ۀΤʔδΣϯτ ϓϩΤʔδΣϯτ ਓࡐ঺հͷޮՌΛ࠷େԽӡ༻ίετΛ࠷খԽ

    4$065&3ͱ͸
  6.   ೥Ͱٻਓاۀ͸ ࣾ ٻਓʹ·Ͱ੒௕த ಋೖࣄྫ

  7. લ৬·Ͱ͸ʝ • ιγϟήձࣾͰαʔόʔαΠυΤϯδχΞ • جຊతʹӡ༻ϑΣʔζ͕ओ • ߴෛՙͳαʔϏεͷνϡʔχϯά͕ಘҙ • ৽نࣄۀܥͰ͸ɺΠϯϑϥͷߏங͔Β৭ʑ΍ͬͯͨ •

    ϒϩοΫνΣʔϯΫϥελͷߏ੒ɺελʔτΞοϓ ͷAWSߏ੒౳ͳͲ
  8. ೖࣾ࣌ͷSCOUTER • Laravel, Vue.jsΛઌਐతʹऔΓೖΕ͍ͯΔʮٕ ज़తʹΠέͯΔʯձࣾ • ։ൃϑΣʔζ͕͋Δఔ౓མͪண͍͖ͯͯɺӡ ༻ϑΣʔζʹֻ͔͍ࠩͬͯͨ͠ • →ӡ༻ϑΣʔζʹ͓͚Δ։ൃମ੍ͷߏங͕ෆ

    ଍͍ͯͨ͠ɻ
  9.     

  10.      ։ൃϑΣʔζ

  11.      ։ൃϑΣʔζ ӡ༻ɾվળ ϑΣʔζ

  12.      ։ൃϑΣʔζ ӡ༻ɾվળ ϑΣʔζ ͜͜Ͱೖࣾ

  13.      ։ൃϑΣʔζ ӡ༻ɾվળ ϑΣʔζ ͜͜Ͱೖࣾ ։ൃϑΣʔζ

    →ӡ༻ϑΣʔζͷ ΠϯϑϥTips ࿩͠·͢
  14. ࿩͢͜ͱ • εςʔδϯά • IaC • ͦͷଞ΍ͬͨ͜ͱ • ·ͱΊ

  15. εςʔδϯά

  16. εςʔδϯάͱ͸ • ຊ൪൓өલʹ࠷ऴ֬ೝ͢ΔͨΊͷຊ൪ͱྨࣅ ͨ͠ςετ؀ڥ εςʔδϯά ຊ൪ ≒ Ϣʔβ ࣾһ

  17. εςʔδϯάͱ͸ • ຊ൪൓өલʹ࠷ऴ֬ೝ͢ΔͨΊͷຊ൪ͱྨࣅ ͨ͠ςετ؀ڥ εςʔδϯά ຊ൪ ≒ Ϣʔβ ࣾһ

  18. εςʔδϯάͱ͸ • ຊ൪൓өલʹ࠷ऴ֬ೝ͢ΔͨΊͷຊ൪ͱྨࣅ ͨ͠ςετ؀ڥ εςʔδϯά ຊ൪ ≒ Ϣʔβ ࣾһ

  19. Before

  20. Before • masterϒϥϯνʹϚʔδ͞ΕͨΒଈຊ൪ʹ൓ө • ҰԠϑϩϯτ͚ͩ͸Heroku Review App্ཱ͕͕͍ͪͬͯͨ ͕ɺॏ͗ͯ͢࢖͑ͳ͍ʝ • ෆ۩߹ใࠂ͕͋ͬͨͱͯ͠΋ɺ࠶ݱ·Ͱʹ͕͔͔࣌ؒΔ

    or ࠶ݱ Ͱ͖ͳ͍ • ࣾһʹϦϦʔεલʹ֬ೝͯ͠΋Β͏ͱ͖͸ɺࣗ෼ͷ1$͔Β 0.0.0.0ͰϏϧυͯ͠ϩʔΧϧωοτϫʔΫͰݟͯ΋Β͏ɻ
  21. σϓϩΠϑϩʔ

  22. σϓϩΠϑϩʔ

  23. push σϓϩΠϑϩʔ

  24. push σϓϩΠϑϩʔ

  25. push CodeDeploy Λىಈ σϓϩΠϑϩʔ

  26. push CodeDeploy Λىಈ S3ʹzip ͰݻΊΔ σϓϩΠϑϩʔ

  27. push CodeDeploy Λىಈ S3ʹzip ͰݻΊΔ σϓϩΠϑϩʔ

  28. push CodeDeploy Λىಈ S3ʹzip ͰݻΊΔ zipΛEC2 ʹల։ σϓϩΠϑϩʔ

  29. push CodeDeploy Λىಈ S3ʹzip ͰݻΊΔ zipΛEC2 ʹల։ σϓϩΠϑϩʔ

  30. After

  31. ߏ੒ਤ εςʔδϯά ຊ൪ σΠϦʔͰsync

  32. pushޙ SlackίϚϯυ࣮ߦ σϓϩΠϑϩʔ(εςʔδϯά) hubot͕ݕग़ capistranoىಈ σϓϩΠ

  33. None
  34. ର৅ϒϥϯνΛࢦఆ

  35. ී௨ʁ

  36. 匠技

  37. ঊٕ() • ຊ൪؀ڥ͔ΒεςʔδϯάDB΁ͷγϯΫ࣌͸ɺ ػີ৘ใΛϚεΩϯάͯ͠ಉظ • ϩάΠϯύεϫʔυ͸։ൃ͕ϩάΠϯՄೳͳܗ ʹ੔ܗ • εςʔδϯάσϓϩΠ࣌ or

    ਂ໷ʹຊ൪؀ڥ͔ ΒDBγϯΫͰ͖ΔΑ͏ʹ
  38. DBϚεΩϯά • ݸਓ৘ใΛӅͨ͢ΊͷγϯΫલॲཧ • ςʔϒϧ໊ɺΧϥϜ໊ɺՃ޻ํ๏Λࢦఆͯ͠ϚεΩϯάΛߦ͏ • Ճ޻ํ๏ • ࢦఆͨ͠஋ʹॻ͖׵͑ •

    จࣈྻ຤ඌʹsuffixΛ௥Ճ • ਺஋ΛϥϯμϜͳ΋ͷʹॻ͖׵͑ • 3จࣈ໨Ҏ߱Λଞͷจࣈʹॻ͖׵͑ • yamlͰઃఆ
  39. yamlྫ - table_name: users columns: - name: email suffix: x

    - name: numeric_data calc: true - name: last_name len: 1 - name: tel - name: default default: 18793jjdiaerheihu3qoh4u3qh4u3i2qhu43qh - name: uri conditions: - condition: "`status`='active'" value: some/path/of/uri - condition: "`status`='pending'" value: other/path/of/uri - table_name: companies columns:
  40. ϩάΠϯύεϫʔυͷ੔ܗ • Ϣʔβ͔Βͷෆ۩߹ใࠂͷதͰɺ࠶ݱͰ͖ͳ ͍Τϥʔ͕ൃੜ͢Δ͜ͱ͕͋Δɻ • ຊ൪σʔλͱಉ͡σʔλͰϩάΠϯͰ͖Ε͹ ࠶ݱ͕Մೳͳࣄ͕ଟ͍ • ύεϫʔυΛࣾһ͕ΞΫηεՄೳͳܗʹ੔ܗ ͓ͯ͘͠

  41. DBͷγϯΫλΠϛϯά • σϓϩΠ࣌ʹຊ൪DBΛ͍ͭͰ΋γϯΫͰ͖ΔΑ ͏ʹ͍ͯ͠Δ • migration౳ͰͷΤϥʔ͕ൃੜͨ͠ͱͯ͠΋ɺ ͍ͭͰ΋ݩͷঢ়ଶʹ໭ͤΔ • ෆ۩߹ௐࠪ౳͙͢ʹ֬ೝ͍ͨ͠ͱ͖ͷͨΊʹɺ σΠϦʔͰຊ൪DB͔ΒͷγϯΫΛߦ͍ͬͯΔ

  42. DBγϯΫ

  43. DBγϯΫ γϯΫ࣌ͷίϚϯυʹ Φϓγϣϯࢦఆ͢Δ͚ͩ

  44. なんという 事でしょう

  45. ͳΜͱ͍͏ࣄͰ͠ΐ͏(·ͱΊ) • ຊ൪؀ڥͷྨࣅ؀ڥʹྨࣅ͍ͯ͠Δ͕ɺ৘ใ తʹ҆શͳ؀ڥΛ੔උͰ͖ͨ • ڍಈ֬ೝ౳ͷඞཁ࠷௿ݶ΍Γ͍ͨ͜ͱͷΈ ϑΥʔΧεͰ͖ΔΑ͏ʹͳͬͨ • Ϣʔεέʔεʹ߹Θͤͯɺ೚ҙͷλΠϛϯάͰ ٻΊΔ؀ڥΛߏஙͰ͖ΔΑ͏ʹͳͬͨɻ

  46. ࿩͢͜ͱ • εςʔδϯά • IaC • ͦͷଞ΍ͬͨ͜ͱ • ·ͱΊ

  47. IaC

  48. IaCͱ͸ • Infrastructure as Codeͷུ • ΠϯϑϥߏஙΛίʔυͰهड़͠Α͏ͥ

  49. Before

  50. Before • AWSͷWebίϯιʔϧ্Ͱϙνϙν؀ڥઃఆ • αʔϏε͕૿͑ͯ͘Δͨͼʹಉ͜͡ͱΛ͍ͯͨ͠ɻ • ‥͕ɺґଘαʔϏε͕ଟ͘ɺߏஙʹ͕͔͔࣌ؒΔ • ͞Βʹɺ಺෦ߏ଄͕ϒϥοΫϘοΫεԽ͢Δ͜ͱͰҾ ͖ܧ͕͗େมɻ

    • ݁Ռ࠷ॳʹߏஙͨ͠ਓ͕୯Ұো֐఺ʹ
  51. ߏ੒ਤ

  52. ߏ੒ਤ ×αʔϏε෼

  53. After

  54. After • AWSͷߏ੒ˠTerraformʹҠߦ • EC2಺ͷϛυϧ΢ΣΞͷઃఆˠAnsibleʹҠߦ

  55. 匠技

  56. ঊٕ? • ߏ੒ͷίʔυ༻ͷϦϙδτϦΛ༻ҙ • αʔϏεؒͰڞ༗͍ͯ͠ΔϦιʔεͱɺαʔ Ϗε͝ͱͷϦιʔε͸σΟϨΫτϦ෼͚Δ • Terraformͷ؀ڥม਺͸gitignore͢Δ • Terraformͷ࣮ߦεΫϦϓτ΋gitʹ৐͚ͬΔ

  57. ߏ੒ͷίʔυ༻ͷϦϙδτϦΛ ༻ҙ • Github্ʹίʔυ؅ཧ༻ͷϦϙδτϦΛ༻ҙ • PRϕʔεͰίʔυΛ؅ཧ͢Δ͜ͱͰɺͲ͏͍ ͏ҙਤͰͦͷมߋΛߦ͔ͬͨΛՄࢹԽ • ଐਓੑͷഉআ

  58. σΟϨΫτϦߏ੒ ᵓᴷᴷ global ᵓᴷᴷ service1 ᴹ ᵓᴷᴷ ansible ᴹ ᴹ

    ᵓᴷᴷ app ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ec2-boot ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ecs ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ nginx ᴹ ᴹ ᴹ ᵓᴷᴷ defaults ᴹ ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᴹ ᵓᴷᴷ tasks ᴹ ᴹ ᴹ ᵋᴷᴷ templates ᴹ ᴹ ᵋᴷᴷ php ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᵋᴷᴷ policies ᵓᴷᴷ service2 ڞ௨෦෼ͷهड़
  59. σΟϨΫτϦߏ੒ ᵓᴷᴷ global ᵓᴷᴷ service1 ᴹ ᵓᴷᴷ ansible ᴹ ᴹ

    ᵓᴷᴷ app ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ec2-boot ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ecs ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ nginx ᴹ ᴹ ᴹ ᵓᴷᴷ defaults ᴹ ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᴹ ᵓᴷᴷ tasks ᴹ ᴹ ᴹ ᵋᴷᴷ templates ᴹ ᴹ ᵋᴷᴷ php ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᵋᴷᴷ policies ᵓᴷᴷ service2 αʔϏεͷUGϑΝΠ ϧͷ؅ཧ
  60. σΟϨΫτϦߏ੒ ᵓᴷᴷ global ᵓᴷᴷ service1 ᴹ ᵓᴷᴷ ansible ᴹ ᴹ

    ᵓᴷᴷ app ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ec2-boot ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ecs ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ nginx ᴹ ᴹ ᴹ ᵓᴷᴷ defaults ᴹ ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᴹ ᵓᴷᴷ tasks ᴹ ᴹ ᴹ ᵋᴷᴷ templates ᴹ ᴹ ᵋᴷᴷ php ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᵋᴷᴷ policies ᵓᴷᴷ service2 "OTJCMFͷ؅ཧ
  61. σΟϨΫτϦߏ੒ ᵓᴷᴷ global ᵓᴷᴷ service1 ᴹ ᵓᴷᴷ ansible ᴹ ᴹ

    ᵓᴷᴷ app ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ec2-boot ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ ecs ᴹ ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᴹ ᵓᴷᴷ nginx ᴹ ᴹ ᴹ ᵓᴷᴷ defaults ᴹ ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᴹ ᵓᴷᴷ tasks ᴹ ᴹ ᴹ ᵋᴷᴷ templates ᴹ ᴹ ᵋᴷᴷ php ᴹ ᴹ ᵓᴷᴷ handlers ᴹ ᴹ ᵋᴷᴷ tasks ᴹ ᵋᴷᴷ policies ᵓᴷᴷ service2 ͭ໨Ҏ߱ͷαʔϏε
  62. ؀ڥม਺ͷgitignore • ϦϙδτϦ؅ཧͷ౎߹্ɺ୭Ͱ΋clone͢Ε͹ ίʔυΛऔಘͰ͖ΔΑ͏ʹͳ͍ͬͯΔɻ • ࣮ߦݖݶ͸AWSͷkeyΛอ༗͍ͯ͠Δඞཁ͕͋ Δ • AWSͷkey౳ͷσʔλ͸git؅ཧͤͣɺඞཁͳλ ΠϛϯάͰݸʑਓ͕ઃఆ͢Δඞཁ͕͋Δɻ

  63. Terraformͷ࣮ߦεΫϦϓτ΋git ʹ৐͚ͬΔ • SCOUTERࣾ͸PhpStormΛશһ࢖༻͍ͯ͠Δ • PhpStorm༻ͷ࣮ߦεΫϦϓτ΋อଘ͓ͯ͘͠ ͜ͱͰɺ୭Ͱ΋࣮ߦ͕Մೳͳܗʹ͍ͯ͠Δɻ • ΋ͪΖΜAWSͷkey౳͸ඞཁͳਓʹͷΈ෇༩͠ ͍ͯΔͷͰɺͩΕͰ΋࣮ߦͰ͖ΔΘ͚Ͱ͸ͳ͍

  64. gitignore͸Jetbrains੡඼͕ੜ੒͢Δ΋ͷΛ࢖༻͢Δ

  65. None
  66. なんという 事でしょう

  67. ͳΜͱ͍͏ࣄͰ͠ΐ͏(·ͱΊ) • IaCʹ͢Δ͜ͱʹΑͬͯɺଐਓੑΛഉআͰ͖Δ • IaC͢Δ৔߹΋΋ͪΖΜ࣮ߦՄೳͳਓΛ੍ݶͰ͖ ΔΑ͏ʹɺgitignore͸ઃఆ͠Α͏ • ΤσΟλͷ࣮ߦઃఆΛ͢Δ͜ͱͰ • ͍·͙͢IaC͠Ζʂ

  68. ࿩͢͜ͱ • εςʔδϯά • IaC • ͦͷଞ΍ͬͨ͜ͱ • ·ͱΊ

  69. ͦͷଞ΍ͬͨ͜ͱ

  70. ͦͷଞ΍ͬͨ͜ͱ • ୺຤؅ཧ • ΞΫηεݖݶͷ੍ݶɺ؅ཧ • VPNͷ੔උ • Gsuiteͷ׆༻

  71. ·ͱΊ

  72. ·ͱΊ • ։ൃϑΣʔζ͔Βӡ༻ϑΣʔζʹมΘΔλΠ ϛϯάͰ৭ʑͱ੔උͨ͠ɻ • ։ൃޮ཰Λ͞Βʹര଎ʹ͢Δɺ߈ΊͷΠϯϑ ϥͳͷͰɺ΍ͬͯͳ͍ͱ͜Ζ͸΍ͬͨ΄͏͕ ͍͍ɻ

  73. ࠷ޙʹ SCOUTERࣾͰ͸ɺҰॹʹؤுͬͯ͘ΕΔ 匠 Λืू͓ͯ͠Γ·͢ɻ http://bit.ly/scouter-takumi Πϯϑϥ / Nuxt / Vue

    / Laravel