AWS AmplifyとmockmockでIoTバックエンドをスピーディに構築する

9ec05c5a1b9b0ce9cd53ec3a63838b9a?s=47 Y_uuu
October 07, 2020

AWS AmplifyとmockmockでIoTバックエンドをスピーディに構築する

Serverless Meetup Japan Virtual #7 での登壇資料です
https://serverless.connpass.com/event/188880/

9ec05c5a1b9b0ce9cd53ec3a63838b9a?s=128

Y_uuu

October 07, 2020
Tweet

Transcript

  1. AWS AmplifyͱmockmockͰ IoTόοΫΤϯυΛεϐʔσΟʹߏங͢Δ 2020-10-07(Wed) Serverless Meetup Japan Virtual #8 ઌਐٕज़෦໳*P5νʔϜΤϯδχΞ

    Ԭቌ༤ฏ 1
  2. ࣗݾ঺հ Ԭቌ ༤ฏ Okazaki Yuhei ‣ ID - @yuuu @Y_uuu

    ‣ ࣗݾ঺հ wઌਐٕज़෦໳*P5νʔϜΤϯδχΞ w"84ɾ3BJMTΛ࢖ͬͨडୗɾαʔϏε։ൃΛ୲౰ w෱Ԭࡏॅ ຊ೔΋෱Ԭ͔Β͓ૹΓ͍ͯ͠·͢  ‣ Skill 2 image
  3. ຊ೔࿩͢͜ͱ 3 1.IoT x 2.IoT x *P5όοΫΤϯυΛεϐʔσΟʹߏஙʂ

  4. *P5Y

  5. AWS Amplifyͱ͸ 5 w ϞόΠϧ͓ΑͼϑϩϯτΤϯυͷ΢Σϒσϕϩούʔ͕ "84Λར༻ͯ҆͠શͰεέʔϥϒϧͳϑϧελοΫΞϓϦέʔγϣϯΛ ߏஙͰ͖ΔΑ͏ʹ͢ΔπʔϧͱαʔϏεͷηοτ w ӈਤͷΑ͏ͳΞϓϦέʔγϣϯɾΠϯϑϥΛ ؆୯ʹߏஙͰ͖Δ

  6. AWS Amplifyͷྑ͍ͱ͜Ζ 6 w ϑϩϯτΤϯυΞϓϦέʔγϣϯΛ؆୯ʹߏஙͰ͖Δ w (SBQI2-εΩʔϚΛϕʔεʹόοΫΤϯυ͓Αͼ ϑϩϯτΤϯυͷΫϥΠΞϯτΛࣗಈੜ੒͢Δ w $*$%΋؆୯ʹηοτΞοϓͰ͖Δ

    (JU)VC࿈ܞՄ
  7. "NQMJGZͱ*P5ʹԿͷؔ܎͕ʜʁ

  8. ݱࡏIoTγεςϜʹٻΊΒΕ͍ͯΔ͜ͱ 8 σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ ෼ੳ ϑΟʔυόοΫ

  9. ྫ: ΦϑΟεͷԹ౓؂ࢹγεςϜ 9 ΦϑΟεʹ Թ౓ηϯαΛઃஔ (ηϯαͷ؅ཧ) Թ౓Λ ఆظతʹऩू Թ౓Λ σʔλϕʔεʹอଘ

    Թ౓Λάϥϑ౳Ͱ ՄࢹԽ Թ౓ͷมಈཁҼΛ ෼ੳ(ఱؾɺ࣌ؒɺ ਓ਺ͳͲ) ۭௐઃఆΛ ࠷దԽ͠ ίετΛ࡟ݮ ෼ੳ ϑΟʔυόοΫ σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ
  10. ݱࡏIoTγεςϜʹٻΊΒΕ͍ͯΔ͜ͱ 10 σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ ଟ͘ͷΫϥΠΞϯτ͸ ෼ੳɾϑΟʔυόοΫ͢ΔͨΊͷԼ஍͕੔͍ͬͯͳ͍ ˠʮ·ͣ͸ऩूʙՄࢹԽʯͱ͍͏ґཔ͕ଟ͍ ෼ੳ

    ϑΟʔυόοΫ
  11. ݱࡏIoTγεςϜʹٻΊΒΕ͍ͯΔ͜ͱ 11 σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ ؅ཧγεςϜΛࣗ࡞ PS ❓

  12. IoTγεςϜͱRDSͷ૬ੑ͕͋·Γྑ͘ͳ͍ 12 w εέʔϧΞ΢τ͕ۤख w γεςϜͷ੒௕ʹͭΕσόΠεͷ୆਺͸૿͑Δ w $16ϝϞϦσΟεΫ*0ͷ͍ͣΕ͔͕ރׇ͢Δ w 71$ͷதʹ഑ஔ͞ΕΔͷͰ*P5$PSF͔ΒΞΫηεͮ͠Β͍

    w 3%41SPYZΛ࢖͏ͱͯ͠΋-BNCEB͕ඞཁ w 3%4Ͱ͸ͳ͘%ZOBNP%#͕σʔλετΞͷୈީิͱͳΔ
  13. ݱࡏIoTγεςϜʹٻΊΒΕ͍ͯΔ͜ͱ 13 σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ ؅ཧγεςϜΛࣗ࡞ PS ❓

  14. DynamoDBͷ஋ΛಡΈग़͢ͷ͕໘౗ 14 w -BNCEBͷίʔυΛॻ͘ͷ͕໘౗ w "1*(BUFXBZपΓͷઃఆ΋໘౗ ೝূ͕བྷΜͰ͘Δͱಛʹ

  15. AmplifyΛ࢖ͬͯGraphQL APIΛఆٛ 15 w 4DIFNBΛهड़͢Δ͚ͩͰ"1*ɾΫϥΠΞϯτίʔυ͕ࣗಈੜ੒͞ΕΔ w $PHOJUPೝূ΋؆୯ʹ࿈ܞͰ͖Δ

  16. ݱࡏIoTγεςϜʹٻΊΒΕ͍ͯΔ͜ͱ 16 σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ ؅ཧγεςϜΛࣗ࡞ PS

  17. ݱࡏIoTγεςϜʹٻΊΒΕ͍ͯΔ͜ͱ 17 σόΠε؅ཧ σʔλऩू σʔλ஝ੵ ՄࢹԽ ؅ཧγεςϜΛࣗ࡞ PS ΅͕͔͘Μ͕͍͖͑ͨ͞ΐ͏ͷαʔϏεߏ੒

  18. શମߏ੒ 18 w *P5$PSFͷ"$5ϧʔϧΛ࢖ͬͯ "NQMJGZͷόοΫΤϯυ %ZOBNP%# ΁ σʔλΛॻ͖ࠐΉ w "NQMJGZͰ%ZOBNP%#ʹอଘͨ͠σʔλΛ

    ͍͍ײ͡ʹՄࢹԽ͢ΔΞϓϦΛߏங
  19. "NQMJGZʹΑΔ*P5όοΫΤϯυ ߏங࣌ͷϙΠϯτ

  20. جຊతͳखॱ 20  DSFBUFOFYUBQQ ϓϩδΣΫτ࡞੒ɺݸਓతʹ͸XJUIUZQFTDSJQUFTMJOUKFTUָ͕   BNQMJGZJOJU "NQMJGZͷॳظԽ 

     BNQMJGZBEEIPTUJOH ϗεςΟϯάͷ௥Ճ   BNQMJGZBEEBVUI ೝূͷ௥Ճ   BNQMJGZBEEBQJ "1*ͷ௥Ճ  ࢀরʮ/FYUKT 5ZQF4DSJQU "84"NQMJGZ 3FDPJMͰ5P%PϦετΛ࡞Δʯ ɹIUUQT[FOOEFWZ@VVVBSUJDMFTBCDCF
  21. Next.jsΛ࢖ͬͨΞϓϦͷCI/CD 21 ੩తϖʔδͷ&YQPSUઌͱσϓϩΠઌΛ߹ΘͤΔඞཁ͕͋Δ ࢀরʮ"84"NQMJGZͰIPTUJOHͨ͠/FYUKTͷ41"͕ʮ"DDFTT%FOJFEʯͱͳͬͨͱ͖ͷରॲ๏ʯ ɹIUUQTRJJUBDPN:@VVVJUFNTBGBDEDGBE

  22. εΩʔϚઃܭ 22 w TDIFNBHSBQIRMʹεΩʔϚ 㲈ςʔϒϧઃܭ Λهड़͢Δ w σόΠεͷ৘ใ΋%ZOBNP%#ʹอ࣋ w !DPOOFDUJPOσΟϨΫςΟϒͰIBTNBOZͷؔ࿈ΛఆٛͰ͖Δ

    w !BVUIσΟϨΫςΟϒͰݖݶೝূ΋௥ՃͰ͖Δ
  23. εΩʔϚઃܭ 23 w !LFZͰ(4*Λఆٛ͠ɺύʔςΟγϣϯΩʔEFWJDF*E ιʔτΩʔUJNFTUBNQʹ w !DPOOFDUJPOͰCFMPOHTUPͷؔ࿈Λఆٛ

  24. ΧελϜΧςΰϦ 24 w "NQMJGZͰ͸ΧςΰϦ୯ҐͰػೳΛ௥Ճ͢Δ͜ͱ͕Ͱ͖Δ

  25. ΧελϜΧςΰϦ 25 w "1* (SBQI2- ɺೝূɺϗεςΟϯά͸ "NQMJGZ$-*Λ࢖ͬͯ؆୯ʹ௥ՃͰ͖Δ w *P5$PSF͸ΧςΰϦͱͯ͠௥ՃͰ͖ͳ͍ ˠΧελϜΧςΰϦΛ࡞੒

  26. ΧελϜΧςΰϦ 26 w $GOςϯϓϨʔτΛࣗ࡞͢Δ͜ͱͰɺଞΧςΰϦͱಉ༷ʹ؅ཧͰ͖Δ w BNQMJGZBEEJPUFOEQPJOUͱίϚϯυΛୟ͘͜ͱͰόοΫΤϯυͷػೳΛ௥Ճ

  27. IoT Core→DynamoDB 27 w *P5$PSFͰ͸ϧʔϧΛ࡞੒͠ɺ42-ͱΞΫγϣϯΛఆٛ͢Δ͜ͱͰ ଞαʔϏε΁ड৴σʔλΛड͚౉͢

  28. IoT Core→DynamoDB 28 w "NQMJGZͰੜ੒͞ΕΔ(SBQI2-ͷ࢓্༷ɺJE͸ඞਢͳͷͰ OFXVVJE ͱ͍͏'VODUJPOΛ࢖ͬͯੜ੒

  29. IoT Core→DynamoDB 29 w ಉ༷ʹDSFBUFE"UɺVQEBUFE"U΋ඞਢ w ࣌ࠁͷจࣈྻΛ͍͍ײ͡ʹੜ੒͢Δ'VODUJPO͕ແͦ͞͏ͳͷͰμϛʔͷ஋Λࢦఆ

  30. GraphQLͷݺͼग़͠ 30 w "NQMJGZ$-*͕TDIFNBHSBQIRMʹରԠͨ͠ΫϥΠΞϯτΛࣗಈੜ੒ͯ͘͠ΕΔ w ݺͼग़͚ͩ͢ͰόοΫΤϯυ͔Β৘ใΛऔಘͰ͖Δ

  31. ग़དྷ্͕ͬͨը໘ 31 w /FYUKT .BUFSJBM6*ͰσόΠεͷ$36%ը໘Λߏங w άϥϑ͸SFBDUDIBSUKTΛ࢖༻

  32. *P5Y

  33. IoTόοΫΤϯυͷಈ࡞֬ೝʹ͸σόΠε͕ඞཁ 33 w%FWJDF͕σʔλΛૹ৴͠ͳ͍ͱ %ZOBNP%#͕ۭͬΆͷ··

  34. σόΠεΛ༻ҙ͢Δͷ͸େม 34 wσόΠεࣗମͷௐୡʹ͕͔͔࣌ؒΔ wσόΠεͷ։ൃʹ͕͔͔࣌ؒΔ w୅ΘΓʹγϛϡϨʔλΛ࡞Δʁ wे෼ͳ͕࣌ؒऔΕͣยखؒʹͳΓ͕ͪ wࡉ͔͘৚݅Λม͑ΒΕΔ͔ʁ

  35. mockmockͱ͸ 35 w *P5։ൃʹ͓͚ΔςετΛࢧԉ͢ΔαʔϏε w σόΠεͷ୅ΘΓʹԾ૝σόΠε NPDL ͕όοΫΤϯυ΁σʔλΛૹ৴͢Δ w NPDL͸࠷େສ୆·ͰىಈՄೳ

    Ͱݕࡧͯ͠Έ͍ͯͩ͘͞ NPDLNPDL ৄࡉ͸
  36. mockmockΛ࢖͏ͱσόΠεແ͠Ͱಈ࡞֬ೝ͕Ͱ͖Δ 36 wNPDLNPDL͔ΒσʔλΛૹ৴͢Δ͜ͱͰ &&ͰγεςϜͷಈ࡞Λ֬ೝͰ͖Δ

  37. NPDLNPDLͰσʔλΛૹ৴͢Δखॱ

  38. ૹ৴ઌΛઃఆ͢Δ 38 w*P5$PSFͷΤϯυϙΠϯτʹ.255ͰσʔλΛૹ৴͢Δ w9ূ໌ॻʹରԠ

  39. ૹΔσʔλΛઃఆ͢Δ 39 wηϯαͷ஋Λ࠶ݱ͢ΔάϥϑΛඳ͘ w࣮ࡍͷηϯαΒ͘͠ɺ஋ʹΏΒ͗Λ࣋ͨͤΔ͜ͱ΋Մೳ

  40. ૹ৴ઌͷTopic΍ૹ৴ස౓Λઃఆ 40 w5PQJD͸NPDLຖʹม͍͑ͨͷͰɺม਺ΛຒΊࠐΉ wૹ৴ස౓΋೚ҙʹઃఆՄೳ ࠓճ͸ඵݻఆ

  41. mockΛىಈ 41 wNPDLΛىಈ͢Δͱσʔλૹ৴͕։࢝ wҰఆ࣌ؒܦաޙʹࣗಈఀࢭ

  42. άϥϑͷத਎͕දࣔ 42 wNPDLNPDLͰઃఆͨ͠άϥϑͱɺΞϓϦͰදࣔͨ͠άϥϑ͕Ұக ˠਖ਼͘͠ද͍ࣔͯ͠Δ͜ͱ͕֬ೝͰ͖ͨʂ

  43. mockmockΛར༻͢ΔϝϦοτ: IoTγεςϜͷෛՙࢼݧ͕Ͱ͖Δ 43 w༗ྉϓϥϯͰ࠷େສ୆·ͰNPDLΛ૿΍ͤΔͷͰෛՙࢼݧʹ΋࢖͑Δ w%ZOBNP%#ͷΩϟύγςΟෆ଍΍"VUP4DBMJOHͷಈ࡞Λӡ༻લʹݕग़Ͱ͖Δ

  44. mockmockΛར༻͢ΔϝϦοτ: ՄࢹԽํ๏ͷଥ౰ੑΛ֬ೝͰ͖Δ 44 wຊ෺ʹ͍ۙσʔλ͕ଘࡏ͢Δঢ়ଶͰը໘Λ֬ೝ͢Δͱɺؾ෇͖͕ಘΒΕ΍͍͢ wͦ΋ͦ΋ંΕઢάϥϑͰྑ͍ͷ͔ʁ wଞͷηϯαͷ஋Λಉ͡ը໘Ͱ֬ೝͰ͖ΔͱΘ͔Γ΍͍͢ͷͰ͸ʁ

  45. "NQMJGZͱNPDLNPDLͰ *P5όοΫΤϯυΛεϐʔσΟʹߏஙͰ͖ͨʂ

  46. ·ͱΊ 46 w "NQMJGZΛ࢖͏͜ͱͰεϐʔσΟʹ*P5γεςϜΛߏஙͰ͖Δ w NPDLNPDLΛ࢖͏͜ͱͰεϐʔσΟʹςετͰ͖Δ w Έͳ͞·΋ͥͻ͓ࢼ͍ͩ͘͠͞ʂ *P5Y Y

  47. ͝ਗ਼ௌ͍͖ͨͩ͋Γ͕ͱ͏͍͟͝·ͨ͠ Thank You We are Hiring ! https://recruit.fusic.co.jp/

  48. ⚡ "QQFOEJY

  49. FAQ: Amplifyͷ࢖͍ํΛֶͿͷʹ໾ཱͬͨίϯςϯπ 49 w EBCJUSFBDUOPUFT w ؆୯ͳ5P%PϦετΛ࡞ΔνϡʔτϦΞϧ w όʔδϣϯ͕গ͠ݹ͍͔΋ w

    IUUQTHJUIVCDPNEBCJUSFBDUOPUFT w "NQMJGZ4/48PSLTIPQ w 5XJUUFSϥΠΫͳΞϓϦέʔγϣϯΛ3FBDU "NQMJGZͰߏங w ͪ͜Β΋όʔδϣϯ͕ݹ͘ͳΓͭͭ͋ΔͷͰߋ৽ʹظ଴ w IUUQTBNQMJGZTOTXPSLTIPQBXTKB w "NQMJGZ'SBNFXPSL%PDVNFOUBUJPO w ެࣜυΩϡϝϯτɺࠔͬͨΒ͜͜ΛಡΉ w IUUQTEPDTBNQMJGZBXT
  50. FAQ: Next.jsΛ࢖ͬͨײ૝ 50 wࠓճ͸3FBDUͷϑϨʔϜϫʔΫͱ͍͏Ґஔ͚ͮͰ࢖͍ͬͯΔ wSFBDUSPVUFSͷಋೖ΍ઃఆΛ؆ུԽͰ͖Δ w443ʹ΋ରԠ ࠓճ͸࢖͍ͬͯͳ͍  w".1ରԠ ࠓճ͸࢖͍ͬͯͳ͍

     w18"ରԠ ࠓճ͸࢖͍ͬͯͳ͍  w3FBDU͚ͩͰ։ൃ͢ΔΑΓ΋εϐʔσΟ wग़དྷ্͕ͬͨΞϓϦέʔγϣϯ΋αΫαΫಈ͘
  51. FAQ: Firebaseͱൺ΂ͯͲ͏ʁ 51 wϑϩϯτΤϯυϞόΠϧΞϓϦΛ࡞Δͱ͍͏ҙຯͰ͸ 'JSFCBTF΋༗ྗީิ wҰํɺ"84*P5$PSFʹ૬౰͢ΔαʔϏε΍ػೳ͕ແ͍ҹ৅ w($1*P5$PSF͸ศརͰ͸͋Δ͕ 'JSFTUPSFͱ࿈ܞ͢Δʹ͸ $MPVE'VODUJPOT͕ඞཁͦ͏

  52. FAQ: ElasticsearchΛ࢖Θͳ͍ཧ༝ 52 wऩू஋ͷՄࢹԽ͚ͩΛ࠷଎Ͱ࣮ݱ͢ΔͳΒ&MBTUJDTFBSDI͕࠷ద wݸผΧελϚΠζ͕೉͍͠ wσόΠε؅ཧͷ࢓૊Έͷ௥Ճ͕೉͍͠ wσβΠϯͷΧελϚΠζ͕೉͍͠ wىಈ࣌ؒʹൺྫͯ͠ίετ͕͔͔Δ

  53. FAQ: Amazon Timestream͸Ͳ͏ͳͷ͔ʁ 53 wࢲ΋ؾʹͳΓ·͆͢ w*P5$PSFˠ5JNFTUSFBNͷॻ͖ࠐΈ͸Մೳ w"QQ4ZODͱͷ࿈ܞ͕͓ͦΒ͘·ͩ ࿈ܞͯ͘͠ΕΔͱ͍͍ͳʜ

  54. FAQ: mockͷ୆਺Λ૿΍͢৔߹ɺઃఆ͕େมͰ͸ͳ͍͔ʁ 54 w$47ΠϯϙʔτͰҰׅઃఆՄೳ

  55. mockmock: ͜Μͳσʔλ΋ੜ੒Ͱ͖·͢ - όέοτόϦϡʔδΣωϨʔλ 55 w͍͔ͭ͘ͷσʔληοτΛ༻ҙͯ͠ɺͦͷ͏ͪͷҰͭΛબ୒ wॱ൪ͷࢦఆ΍ϥϯμϜબ୒΋Մೳ

  56. mockmock: ͜Μͳσʔλ΋ੜ੒Ͱ͖·͢ - ҐஔδΣωϨʔλ 56 w஍ਤ্ͰҠಈϧʔτΛࢦఆ͠ɺҠಈମͷ࠲ඪ৘ใΛૹ৴