Slide 1

Slide 1 text

αʔόʔϨεγεςϜͷෳࡶԽʹཱͪ޲͔͏ IoTΛྫʹΈΔAWSͱDDDΛۦ࢖ͨ͠ΞϓϦέʔγϣϯઃܭ 4FSWFSMFTTDPOG

Slide 2

Slide 2 text

͋Δ։ൃऀ͕

Slide 3

Slide 3 text

αʔόʔϨεͱ͔"84ͷ࿩ͰΑ͘ग़Δ͜͏͍͏ߏ੒ਤ HUB-Device table Amazon DynamoDB media- bucket LIXIL workers $,&) Browser 3rd party users Lambda function $,&) pre-signed URL Amazon API Gateway* HUB mobile client %$ IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table #+ ( +& IoT HTTP protocol IoT shadow "*, $,&) BOX media- bucket backup Amazon Kinesis Firehose ', !" Amazon API Gateway* API device- manage-SPA Amazon CloudFront Cognito *+ IoT

Slide 4

Slide 4 text

αʔόʔϨεͱ͔"84ͷ࿩ͰΑ͘ग़Δ͜͏͍͏ߏ੒ਤ ͕Μ͹ͬͯͭͬͨ͘ʂ

Slide 5

Slide 5 text

͞Βʹ ػೳ௥Ճʂ

Slide 6

Slide 6 text

͞Βʹ ػೳ௥Ճʂ ػೳ௥Ճʂ

Slide 7

Slide 7 text

͞Βʹ ػೳ௥Ճʂ ػೳ௥Ճʂ ػೳ௥Ճʂ . . . . . .

Slide 8

Slide 8 text

͋Εʁ …͋Εʁ

Slide 9

Slide 9 text

͋Εʁ …ͳΜ΍͜Ε

Slide 10

Slide 10 text

͋Εʁ ΞΠίϯͪͬ͞ ͍Ζ͍Ζ͔Β·Γ͗͢΍Ζ

Slide 11

Slide 11 text

͋Εʁ …ػೳ௥Ճʁվमʁ ͲΕ͕Կ΍ͬͯΜ͚ͩͬ

Slide 12

Slide 12 text

ࠓ೔࣋ͪؼ͍͖͍ͬͯͨͩͨ͜ͱ ҭͯΑ͏ʂ AWSαʔόʔϨεΞϓϦέʔγϣϯ

Slide 13

Slide 13 text

ҭ͍ͯͯͨ͘Ίʹ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯཁૉ

Slide 14

Slide 14 text

ҭ͍ͯͯͨ͘Ίʹ "84-BNCEBͷϩδοΫ ΛϨΠϠԽ͢Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯཁૉ

Slide 15

Slide 15 text

ҭ͍ͯͯͨ͘Ίʹ "84-BNCEBͷϩδοΫ ΛϨΠϠԽ͢Δ "84؀ڥͰ&&ςετΛ࣮ ߦ͢Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯཁૉ

Slide 16

Slide 16 text

"84-BNCEBͷϩδοΫ ΛϨΠϠԽ͢Δ "84؀ڥͰ&&ςετΛ࣮ ߦ͢Δ -BNCEB'VODUJPOͷϩ άΛ"84"UIFOBͰݟΒ ΕΔΑ͏ʹ͢Δ ҭ͍ͯͯͨ͘Ίʹ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯཁૉ

Slide 17

Slide 17 text

ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ҭ͍ͯͯͨ͘Ίʹ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯཁૉ "84-BNCEBͷϩδοΫ ΛϨΠϠԽ͢Δ "84؀ڥͰ&&ςετΛ࣮ ߦ͢Δ -BNCEB'VODUJPOͷϩ άΛ"84"UIFOBͰݟΒ ΕΔΑ͏ʹ͢Δ

Slide 18

Slide 18 text

ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ͱʹ͔͘͜Ε͕໎ࢠʹͳΓ͕ͪ ҭ͍ͯͯͨ͘Ίʹ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯཁૉ "84-BNCEBͷϩδοΫ ΛϨΠϠԽ͢Δ "84؀ڥͰ&&ςετΛ࣮ ߦ͢Δ -BNCEB'VODUJPOͷϩ άΛ"84"UIFOBͰݟΒ ΕΔΑ͏ʹ͢Δ

Slide 19

Slide 19 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 20

Slide 20 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 21

Slide 21 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ ͜ΕΛظ଴ͯ͠ ͬͪ͜Λ࣮ફͯ͠Έͨ࿩

Slide 22

Slide 22 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 23

Slide 23 text

ࣗݾ঺հ ࿨ా༞հ Ϋϥεϝιουגࣜձࣾ αʔόʔϨε։ൃ෦ΤϯδχΞ ޷͖4DBMB1MBZ 5XJUUFS!XBEEZ@V

Slide 24

Slide 24 text

͝஫ҙ • εϥΠυ͸ެ։͠·͢ • AWSݶఆͰ͢ɻGCPɺAzure͸Ұ੾ొ৔͠·ͤΜ • ྫࣔ͢Δۀ຿΍ιʔείʔυ͸ɺ
 ࣮ࡍͷ΋ͷ͔Βվม͍ͯ͠·͢

Slide 25

Slide 25 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 26

Slide 26 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO ཧ࿦తͳ࿩

Slide 27

Slide 27 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO ࣮ફతͳ࿩

Slide 28

Slide 28 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 29

Slide 29 text

͜Ε·Ͱ΍͖ͬͯͨαʔόʔϨεΞϓϦέʔγϣϯ ܭଌσόΠεͷσʔλΛ஝ੵ 41"ͰՄࢹԽ1P$ ίϯςϯπμ΢ϯϩʔυαΠτ

Slide 30

Slide 30 text

גࣜձࣾ-*9*-༷εϚʔτΤΫεςϦΞ*P5αʔόʔ HUB-Device table Amazon DynamoDB media- bucket LIXIL workers $,&) Browser 3rd party users Lambda function $,&) pre-signed URL Amazon API Gateway* HUB mobile client %$ IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table #+ ( +& IoT HTTP protocol IoT shadow "*, $,&) BOX media- bucket backup Amazon Kinesis Firehose ', !" Amazon API Gateway* API device- manage-SPA Amazon CloudFront Cognito *+ IoT

Slide 31

Slide 31 text

ײ͡ΔʜʂαʔόʔϨεΞϓϦέʔγϣϯͷಘखෆಘख ಘҙ ୯Ұͳ͍͠਺ݸͷୡ੒͍ͨ͠Ϗδωε্ͷཁ݅Λຬͨ͢Ξϓ ϦΛߴ଎ʹ࣮ݱ͢Δɻ
 ྫɿ1P$։ൃɺ*P5αʔόʔɺμ΢ϯϩʔυαΠτ ۤख ෳ਺ͷཁ͕݅བྷΈ߹͏γεςϜΛ࿅Γ্࣮͛ͯݱ͢Δɻ
 ྫɿ&$αΠτɺސ٬؅ཧγεςϜ

Slide 32

Slide 32 text

ཧ༝

Slide 33

Slide 33 text

ΞϓϦέʔγϣϯߏஙखॱͷҧ͍

Slide 34

Slide 34 text

Ұൠతͳ8FCΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ ΞϓϦέʔγϣϯ

Slide 35

Slide 35 text

Ұൠతͳ8FCΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ ΞϓϦέʔγϣϯ OS

Slide 36

Slide 36 text

Ұൠతͳ8FCΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ ΞϓϦέʔγϣϯ OS ϛυϧ΢ΣΞ

Slide 37

Slide 37 text

Ұൠతͳ8FCΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ ΞϓϦέʔγϣϯ OS ϛυϧ΢ΣΞ ΞϓϦέʔγϣϯ

Slide 38

Slide 38 text

Ұൠతͳ8FCΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ OS ϛυϧ΢ΣΞ ΞϓϦέʔγϣϯ 1SPT Ұ౓؀ڥ͕ܾ·ΓσϓϩΠ͠ ͑͢͞Ε͹ɺ͋ͱ͸ΞϓϦέʔ γϣϯͱσʔλϕʔεΛҭͯͯ ͍͚͹ྑ͍ $POT ͨͱ͑γϯϓϧͳػೳͰ͋ͬͯ ΋࣮ݱ͢ΔͨΊʹ͸ࠨهͷߏ ੒ΛσϓϩΠ͢Δඞཁ͕͋Δ

Slide 39

Slide 39 text

αʔόʔϨεΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ

Slide 40

Slide 40 text

αʔόʔϨεΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ

Slide 41

Slide 41 text

αʔόʔϨεΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ

Slide 42

Slide 42 text

αʔόʔϨεΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ . . .

Slide 43

Slide 43 text

αʔόʔϨεΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ . . . 1SPT ͻͱͭͷػೳΛσϓϩΠͯ͠ ར༻Ͱ͖ΔΑ͏ʹͳΔ·Ͱ௒ ߴ଎ $POT ϩδοΫ͕෺ཧతʹ཭Ε͍ͯ ΔͷͰɺԿ΋ߟ͑ͣʹػೳΛ ૿΍͢ͱϝϯςίετ͕ઇͩ Δ·ࣜʹ૿͍͑ͯ͘

Slide 44

Slide 44 text

αʔόʔϨεΞϓϦέʔγϣϯͷ৔߹ γεςϜશମ . . . 1SPT ͻͱͭͷػೳΛσϓϩΠͯ͠ ར༻Ͱ͖ΔΑ͏ʹͳΔ·Ͱ௒ ߴ଎ $POT ϩδοΫ͕෺ཧతʹ཭Ε͍ͯ ΔͷͰɺԿ΋ߟ͑ͣʹػೳɾ ۀ຿Λ૿΍͢ͱϝϯςίετ ͕ઇͩΔ·ࣜʹ૿͍͑ͯ͘ Ͳͷίʔυ͕Կͷۀ຿Λୡ੒͢Δͷ͔ ϩδοΫ͸Ͳ͜ʹ͋Δͷ͔ ໎ࢠʹͳͬͯ͠·͏ ෳࡶͳཁ݅͸ۤख

Slide 45

Slide 45 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 46

Slide 46 text

͍·Կ΍ͬͯΔΜ͚ͩͬʁ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 47

Slide 47 text

͍·Կ΍ͬͯΔΜ͚ͩͬʁ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ ͜ΕͷඞཁੑΛ ड़΂ͨ

Slide 48

Slide 48 text

࣍ʹɺ ʮͲ͏΍Δ͔ʯ ͱ͍͏ํ਑ͷ࿩Ͱ͢

Slide 49

Slide 49 text

%%%ɿۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ ͔ͳΓॏްͰந৅తͳઃܭ࿦ͱܯռ͕ͪ͠Ͱ͕͢ʜ ࢲ͸ʮ։ൃαΠΫϧΛճ͠΍͍͢Α͏ʹۀ຿ϩδοΫΛ ෼཭͠·͠ΐ͏ʯఔ౓ͷղऍͰ͢ 'VODUJPOͱͯ͠ͷଆ໘Λͳ͍͕͠Ζʹ͠ͳ͍Α͏ʹ஫ ҙͭͭ͠མͱ͠ॴΛ͙͞Γ·͢

Slide 50

Slide 50 text

%%%ɿۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ ͔ͳΓॏްͰந৅తͳઃܭ࿦ͱܯռ͕ͪ͠Ͱ͕͢ʜ ࢲ͸ʮ։ൃαΠΫϧΛճ͠΍͍͢Α͏ʹۀ຿ϩδοΫΛ ෼཭͠·͠ΐ͏ʯఔ౓ͷղऍͰ͢ 'VODUJPOͱͯ͠ͷଆ໘Λͳ͍͕͠Ζʹ͠ͳ͍Α͏ʹ஫ ҙͭͭ͠མͱ͠ॴΛ͙͞Γ·͢ %%%΁ͷ஧࣮͞ ͱ 'VODUJPOͱͯ͠ͷγϯϓϧ͞

Slide 51

Slide 51 text

෼཭ͷεςοϓ "84ϦιʔεߏஙίʔυΛϦϙδτϦʹ·ͱΊΔ l͜͜ʹ͢΂͕ͯ͋Δz͕ਓΛ҆৺ͤ͞Δ -BNCEB'VODUJPO͚ͩσϓϩΠͰ͖ΔΑ͏ʹ͢Δ lमਖ਼ՕॴҎ֎͸Өڹͳ͠z͸ετϨεΛܰݮͤ͞Δ -BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ lͲ͜ʹ͋Δ͔Θ͔Δz੔ཧ੔಴

Slide 52

Slide 52 text

෼཭ͷεςοϓ "84ϦιʔεߏஙίʔυΛϦϙδτϦʹ·ͱΊΔ l͜͜ʹ͢΂͕ͯ͋Δz͕ਓΛ҆৺ͤ͞Δ -BNCEB'VODUJPO͚ͩσϓϩΠͰ͖ΔΑ͏ʹ͢Δ lमਖ਼ՕॴҎ֎͸Өڹͳ͠z͸ετϨεΛܰݮͤ͞Δ -BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ lͲ͜ʹ͋Δ͔Θ͔Δz੔ཧ੔಴

Slide 53

Slide 53 text

෼཭ͷεςοϓ "84ϦιʔεߏஙίʔυΛϦϙδτϦʹ·ͱΊΔ l͜͜ʹ͢΂͕ͯ͋Δz͕ਓΛ҆৺ͤ͞Δ -BNCEB'VODUJPO͚ͩσϓϩΠͰ͖ΔΑ͏ʹ͢Δ lमਖ਼ՕॴҎ֎͸Өڹͳ͠z͸ετϨεΛܰݮͤ͞Δ -BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ lͲ͜ʹ͋Δ͔Θ͔Δz੔ཧ੔಴

Slide 54

Slide 54 text

෼཭ͷεςοϓ "84ϦιʔεߏஙίʔυΛϦϙδτϦʹ·ͱΊΔ l͜͜ʹ͢΂͕ͯ͋Δz͕ਓΛ҆৺ͤ͞Δ -BNCEB'VODUJPO͚ͩσϓϩΠͰ͖ΔΑ͏ʹ͢Δ lमਖ਼ՕॴҎ֎͸Өڹͳ͠z͸ετϨεΛܰݮͤ͞Δ -BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ lͲ͜ʹ͋Δ͔Θ͔Δz੔ཧ੔಴

Slide 55

Slide 55 text

-BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF

Slide 56

Slide 56 text

-BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF IBOEMFST EPNBJOT JOGSBTUSVDUVSFT

Slide 57

Slide 57 text

-BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF IBOEMFST EPNBJOT JOGSBTUSVDUVSFT w 'VODUJPOͷೖΓޱ w ҙࢥܾఆࢧԉ w EPNBJOTͷར༻खॱΛ ஌Δ

Slide 58

Slide 58 text

-BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF IBOEMFST EPNBJOT JOGSBTUSVDUVSFT w ΞϓϦͷத֩ͱͳΔΫϥε܈ w ۀ຿ w ্Լ૚͔Βੜ੒ɾར༻͞ΕΔ

Slide 59

Slide 59 text

-BNCEB'VODUJPOͷίʔυΛ૚ʹ͢Δ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF IBOEMFST EPNBJOT JOGSBTUSVDUVSFT w "84ϦιʔεΞΫηε w ೳྗ w EPNBJOT͔Βݺ͹ΕΔ

Slide 60

Slide 60 text

lམͱ͠ॴzͷߟ࡯ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF IBOEMFST EPNBJOT JOGSBTUSVDUVSFT ύϥϝʔλͷύʔε ۀ຿ϑϩʔఆٛ Ϩεϙϯεੜ੒ɹ͸͜͜ ۀ຿ϩδοΫ͸͜͜ CPUP͕ඞཁͳॲཧ͸͜͜

Slide 61

Slide 61 text

lམͱ͠ॴzͷߟ࡯ FOWJSPONFOUT JUFTU TSD UFNQMBUFT .BLFpMF IBOEMFST EPNBJOT JOGSBTUSVDUVSFT ύϥϝʔλͷύʔε ۀ຿ϑϩʔఆٛ Ϩεϙϯεੜ੒ɹ͸͜͜ ۀ຿ϩδοΫ͸͜͜ CPUP͕ඞཁͳॲཧ͸͜͜ ԿΑΓ΋ʮ෼ྨΛ͕Μ͹Γ͗͢ͳ͍ʯ͜ͱ

Slide 62

Slide 62 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT

Slide 63

Slide 63 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS create_user.py

Slide 64

Slide 64 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS create_user.py get_users.py def lambda_handler(event, context): try: email = event['email'] company = event['company'] display_user_name = event['display_user_name'] user_level = event['user_level'] except Exception as e: logger.exception(str(e)) raise invalid_request_response(e) try: user = CreateUser( email=email, company=company, display_user_name=display_user_name, user_level=user_level ) user.insert() except Exception as e: logger.exception(str(e)) if type(e) == UserAlreadyExistsException: raise conflict_response(e) else: raise server_error(e) create_user.py

Slide 65

Slide 65 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS create_user.py get_users.py def lambda_handler(event, context): try: email = event['email'] company = event['company'] display_user_name = event['display_user_name'] user_level = event['user_level'] except Exception as e: logger.exception(str(e)) raise invalid_request_response(e) try: user = CreateUser( email=email, company=company, display_user_name=display_user_name, user_level=user_level ) user.insert() except Exception as e: logger.exception(str(e)) if type(e) == UserAlreadyExistsException: raise conflict_response(e) else: raise server_error(e) create_user.py ԿΛ΍Δ΂͖͔͸஌ͬͯΔ͚Ͳ ۩ମతͳ࡞ۀ͸EPNBJOTʹ೚ͤΔ

Slide 66

Slide 66 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user.py

Slide 67

Slide 67 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user.py class CreateUser: def __init__(self, email, company, display_user_name, user_level): self.user_uuid = str(uuid.uuid4()) self.email = email self.company = company self.display_user_name = display_user_name self.user_level = user_level def insert(self): import infrastructures.user.user_repository as user_repository import infrastructures.user.auth_repository as auth_repository auth_repository.admin_create_user(self.user_uuid, self.email) user_repository.create(self) user.py

Slide 68

Slide 68 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user.py class CreateUser: def __init__(self, email, company, display_user_name, user_level): self.user_uuid = str(uuid.uuid4()) self.email = email self.company = company self.display_user_name = display_user_name self.user_level = user_level def insert(self): import infrastructures.user.user_repository as user_repository import infrastructures.user.auth_repository as auth_repository auth_repository.admin_create_user(self.user_uuid, self.email) user_repository.create(self) user.py Ϣʔβʔ*%66**%Λ࢖͏

Slide 69

Slide 69 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user.py class CreateUser: def __init__(self, email, company, display_user_name, user_level): self.user_uuid = str(uuid.uuid4()) self.email = email self.company = company self.display_user_name = display_user_name self.user_level = user_level def insert(self): import infrastructures.user.user_repository as user_repository import infrastructures.user.auth_repository as auth_repository auth_repository.admin_create_user(self.user_uuid, self.email) user_repository.create(self) user.py ೝূϦϙδτϦͱ ϢʔβʔϦϙδτϦʹ σʔλΛ࡞Δ

Slide 70

Slide 70 text

ྫɿϢʔβʔ৘ใΛ$SFBUF͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user_repository.py auth_repository.py

Slide 71

Slide 71 text

ྫɿϢʔβʔ৘ใΛ$36%͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user_repository.py auth_repository.py def create(user: CreateUser): updated_at = epoc_second_now() try: DYNAMODB_TABLE.put_item( Item={ 'user_uuid': user.user_uuid, 'email': user.email, 'company': user.company, 'display_user_name': user.display_user_name, 'created_at': updated_at, 'updated_at': updated_at }, ConditionExpression='attribute_not_exists(user_uuid)' ) except ClientError as error: if error.response['Error']['Code'] == 'ConditionalCheckFailedException': raise UserAlreadyExistsException(user.user_uuid, error) else: raise error user_repository.py

Slide 72

Slide 72 text

ྫɿϢʔβʔ৘ใΛ$36%͢Δ-BNCEB'VODUJPO IBOEMFST EPNBJOT JOGSBTUSVDUVSFT VTFS user_repository.py auth_repository.py def create(user: CreateUser): updated_at = epoc_second_now() try: DYNAMODB_TABLE.put_item( Item={ 'user_uuid': user.user_uuid, 'email': user.email, 'company': user.company, 'display_user_name': user.display_user_name, 'created_at': updated_at, 'updated_at': updated_at }, ConditionExpression='attribute_not_exists(user_uuid)' ) except ClientError as error: if error.response['Error']['Code'] == 'ConditionalCheckFailedException': raise UserAlreadyExistsException(user.user_uuid, error) else: raise error υϝΠϯΦϒδΣΫτΛ࢖ͬͯ %ZOBNP%#ʹอଘ͢Δ CPUPΛ࢖͍͍ͬͯͷ͸͚ͩ͜͜ user_repository.py

Slide 73

Slide 73 text

͜͜·Ͱͷ·ͱΊ αʔόʔϨεΞϓϦέʔγϣϯͷಛੑ Ϗδωε͕੒௕͢Δͱۀ຿ϩδοΫ͕໎ࢠʹͳΓ͕ͪ ϨΠϠԽͷεςοϓ ·ͣඞཁͳૉࡐΛҰՕॴʹूΊɺ-BNCEB'VODUJPOͷΈσ ϓϩΠͰ͖ΔΑ͏ʹ͠ɺϨΠϠʔυΞʔΩςΫνϟͷEPNBJO ૚ʹʢࡶͰ΋͍͍ͷͰʣϏδωεϩδοΫΛूΊΔ

Slide 74

Slide 74 text

͜͜·Ͱͷ·ͱΊ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 75

Slide 75 text

͜͜·Ͱͷ·ͱΊ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ ͜Εͷํ਑Λड़΂ͨ

Slide 76

Slide 76 text

࿩͢಺༰ NJO NJO NJO NJO NJO NJO NJO w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ

Slide 77

Slide 77 text

ΞϓϦέʔγϣϯ঺հ גࣜձࣾLIXIL༷ εϚʔτ୐഑ϙετ LIXILʗIoTରԠܕ୐഑ϘοΫεΛൃച | ̡̨̣̬̚ https://lnews.jp/2018/09/k092706.html

Slide 78

Slide 78 text

ΞϓϦέʔγϣϯ঺հ גࣜձࣾLIXIL༷ εϚʔτ୐഑ϙετ ͷɺIoT αʔόʔ

Slide 79

Slide 79 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol

Slide 80

Slide 80 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol

Slide 81

Slide 81 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol

Slide 82

Slide 82 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol

Slide 83

Slide 83 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol

Slide 84

Slide 84 text

࣮ફฤ

Slide 85

Slide 85 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 86

Slide 86 text

ద༻͍͖ͯ͠·͢ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 87

Slide 87 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol

Slide 88

Slide 88 text

εϚʔτ୐഑ϙετొ࿥ϑϩʔ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ Device table Amazon DynamoDB Lambda function Amazon API Gateway* HUB mobile client IoT certificate HUB IoT policy Thing Registry IoT topic Amazon Kinesis Streams Event Table IoT HTTP protocol ϐοΫΞοϓ

Slide 89

Slide 89 text

୐഑ϙετొ࿥ॲཧͷϨΠϠʔԽ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ B %ZOBNP%#νΣοΫ C ొ࿥ঢ়گͷه࿥ D *P55IJOH3FHJTUSZొ ࿥ E 5IJOH(SPVQ΁ࢀՃ F 1PMJDZͷߋ৽ G ొ࿥ঢ়گͷه࿥

Slide 90

Slide 90 text

୐഑ϙετొ࿥ॲཧͷϨΠϠʔԽ %ZOBNP%#΁ࣄલొ࿥ ূ໌ॻͷ
 δϟετΠϯλΠϜొ࿥ ϗʔϜϢχοτొ࿥ ୐഑ϙετొ࿥ ҎޙɺΠϕϯτ௨৴ B %ZOBNP%#νΣοΫ C ొ࿥ঢ়گͷه࿥ D *P55IJOH3FHJTUSZొ ࿥ E 5IJOH(SPVQ΁ࢀՃ F 1PMJDZͷߋ৽ G ొ࿥ঢ়گͷه࿥ 1 Function Ͱ΍ͬͯΈΔ͜ͱʹͨ͠

Slide 91

Slide 91 text

ϨΠϠʔԽલʢҰ෦ʣ def lambda_handler(event, context): device_id = event[‘device_id’] uuid = event['uuid'] nodes = event['nodes'] types = get_device_types() groups = list_thing_groups_for_hub(uuid) group_name = groups['thingGroups'][0]['groupName'] if check_device(device_id, uuid): for node in nodes: # create thing created_node = create_node(node, types) # add thing to the group node_uuid = created_node['thingName'] add_node_to_thing_group(group_name, node_uuid) else: return nodes = list_nodes_in_hub_group(group_name) update_hub_attribute_nodes(uuid, len(nodes))

Slide 92

Slide 92 text

ϨΠϠʔԽલʢҰ෦ʣ def lambda_handler(event, context): device_id = event[‘device_id’] uuid = event['uuid'] nodes = event['nodes'] types = get_device_types() groups = list_thing_groups_for_hub(uuid) group_name = groups['thingGroups'][0]['groupName'] if check_device(device_id, uuid): for node in nodes: # create thing created_node = create_node(node, types) # add thing to the group node_uuid = created_node['thingName'] add_node_to_thing_group(group_name, node_uuid) else: return nodes = list_nodes_in_hub_group(group_name) update_hub_attribute_nodes(uuid, len(nodes)) ϋϯυϥͷΠϕϯτΛ ஌͍ͬͯΔ

Slide 93

Slide 93 text

ϨΠϠʔԽલʢҰ෦ʣ def lambda_handler(event, context): device_id = event[‘device_id’] uuid = event['uuid'] nodes = event['nodes'] types = get_device_types() groups = list_thing_groups_for_hub(uuid) group_name = groups['thingGroups'][0]['groupName'] if check_device(device_id, uuid): for node in nodes: # create thing created_node = create_node(node, types) # add thing to the group node_uuid = created_node['thingName'] add_node_to_thing_group(group_name, node_uuid) else: return nodes = list_nodes_in_hub_group(group_name) update_hub_attribute_nodes(uuid, len(nodes)) *P5ͷ࢓༷΋஌ͬͯΔ

Slide 94

Slide 94 text

ϨΠϠʔԽલʢҰ෦ʣ def lambda_handler(event, context): device_id = event[‘device_id’] uuid = event['uuid'] nodes = event['nodes'] types = get_device_types() groups = list_thing_groups_for_hub(uuid) group_name = groups['thingGroups'][0]['groupName'] if check_device(device_id, uuid): for node in nodes: # create thing created_node = create_node(node, types) # add thing to the group node_uuid = created_node['thingName'] add_node_to_thing_group(group_name, node_uuid) else: return nodes = list_nodes_in_hub_group(group_name) update_hub_attribute_nodes(uuid, len(nodes)) ϩδοΫʁ Կ͔νΣοΫͯ͠ ʜԿΛ܁Γฦ͍ͯ͠Δͷʁ

Slide 95

Slide 95 text

ϨΠϠʔԽલʢҰ෦ʣ def lambda_handler(event, context): device_id = event[‘device_id’] uuid = event['uuid'] nodes = event['nodes'] types = get_device_types() groups = list_thing_groups_for_hub(uuid) group_name = groups['thingGroups'][0]['groupName'] if check_device(device_id, uuid): for node in nodes: # create thing created_node = create_node(node, types) # add thing to the group node_uuid = created_node['thingName'] add_node_to_thing_group(group_name, node_uuid) else: return nodes = list_nodes_in_hub_group(group_name) update_hub_attribute_nodes(uuid, len(nodes)) ϩδοΫʁ Կ͔νΣοΫͯ͠ ʜԿΛ܁Γฦ͍ͯ͠Δͷʁ Կ͕͍ͨ͠ͷ͔͕ݟ͑ͳ͍ ػೳ௥Ճ͕೉͍͠

Slide 96

Slide 96 text

ϨΠϠʔԽޙϋϯυϥ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register_handler.py

Slide 97

Slide 97 text

ϨΠϠʔԽޙʢҰ෦ʣ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register_handler.py def lambda_handler(event, context): try: #ύϥϝʔλऔಘ nodes = NodeFactory.nodes_provider(param_hub_uuid, param_nodes) except Exception as e: # handle return try: task_manager = TaskManager(task_uuid, param_hub_uuid) task_manager.start() signin = SignIn(device_id, certificate_id) hub_uuid = signin.signin() service = NodeRegisterService(hub_uuid, account_id, certificate_id, nodes) node_things = service.node_register() reason = 'NodeRegisterFinished' task_manager.finish(reason) InfoLogger(node_things).log() except Exception as e: # handle return

Slide 98

Slide 98 text

ϨΠϠʔԽޙʢҰ෦ʣ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register_handler.py def lambda_handler(event, context): try: #ύϥϝʔλऔಘ nodes = NodeFactory.nodes_provider(param_hub_uuid, param_nodes) except Exception as e: # handle return try: task_manager = TaskManager(task_uuid, param_hub_uuid) task_manager.start() signin = SignIn(device_id, certificate_id) hub_uuid = signin.signin() service = NodeRegisterService(hub_uuid, account_id, certificate_id, nodes) node_things = service.node_register() reason = 'NodeRegisterFinished' task_manager.finish(reason) InfoLogger(node_things).log() except Exception as e: # handle return λεΫ؅ཧ

Slide 99

Slide 99 text

ϨΠϠʔԽޙʢҰ෦ʣ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register_handler.py def lambda_handler(event, context): try: #ύϥϝʔλऔಘ nodes = NodeFactory.nodes_provider(param_hub_uuid, param_nodes) except Exception as e: # handle return try: task_manager = TaskManager(task_uuid, param_hub_uuid) task_manager.start() signin = SignIn(device_id, certificate_id) hub_uuid = signin.signin() service = NodeRegisterService(hub_uuid, account_id, certificate_id, nodes) node_things = service.node_register() reason = 'NodeRegisterFinished' task_manager.finish(reason) InfoLogger(node_things).log() except Exception as e: # handle return ΫϥΠΞϯτ νΣοΫ

Slide 100

Slide 100 text

ϨΠϠʔԽޙʢҰ෦ʣ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register_handler.py def lambda_handler(event, context): try: #ύϥϝʔλऔಘ nodes = NodeFactory.nodes_provider(param_hub_uuid, param_nodes) except Exception as e: # handle return try: task_manager = TaskManager(task_uuid, param_hub_uuid) task_manager.start() signin = SignIn(device_id, certificate_id) hub_uuid = signin.signin() service = NodeRegisterService(hub_uuid, account_id, certificate_id, nodes) node_things = service.node_register() reason = 'NodeRegisterFinished' task_manager.finish(reason) InfoLogger(node_things).log() except Exception as e: # handle return ୐഑ϙετొ࿥

Slide 101

Slide 101 text

ϨΠϠʔԽޙʢҰ෦ʣ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register_handler.py def lambda_handler(event, context): try: #ύϥϝʔλऔಘ nodes = NodeFactory.nodes_provider(param_hub_uuid, param_nodes) except Exception as e: # handle return try: task_manager = TaskManager(task_uuid, param_hub_uuid) task_manager.start() signin = SignIn(device_id, code, param_hub_uuid, certificate_id) hub_uuid = signin.signin() service = NodeRegisterService(hub_uuid, account_id, certificate_id, nodes) node_things = service.node_register() reason = 'NodeRegisterFinished' task_manager.finish(reason) InfoLogger(node_things).log() except Exception as e: # handle return ୐഑ϙετొ࿥ ۩ମతͳ࡞ۀ͸ߦ͍ͬͯͳ͍͕ ॲཧͷॱংΛ஌͍ͬͯΔ ॱং͕ݟͯΘ͔Δ

Slide 102

Slide 102 text

ϨΠϠʔԽޙυϝΠϯ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register.py TJHOVQ device_checker.py UBTL task_manager.py

Slide 103

Slide 103 text

ϨΠϠʔԽޙυϝΠϯ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register.py TJHOVQ device_checker.py UBTL task_manager.py

Slide 104

Slide 104 text

ϨΠϠʔԽޙυϝΠϯ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register.py TJHOVQ device_checker.py UBTL task_manager.py ϋϯυϥʔ͔Βར༻͞ΕΔ ֤ΫϥεΛఏڙ class NodeThings: def __init__(self, aws_account_id, certificate_id, hub_uuid, node_thing_list: List[NodeThing]): self.aws_account_id = aws_account_id self.certificate_id = certificate_id self.policy_name = get_nodes_policy_name(certificate_id) self.hub_uuid = hub_uuid self.node_thing_list = node_thing_list def update_policy(self): import infrastructures.registry.node_policy_repository as repository repository.create_policy_for_nodes(self) repository.attach_policy(self) node_things_register.py

Slide 105

Slide 105 text

ϨΠϠʔԽޙυϝΠϯ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register.py TJHOVQ device_checker.py UBTL task_manager.py ϋϯυϥʔ͔Βར༻͞ΕΔ ֤ΫϥεΛఏڙ class NodeThings: def __init__(self, aws_account_id, certificate_id, hub_uuid, node_thing_list: List[NodeThing]): self.aws_account_id = aws_account_id self.certificate_id = certificate_id self.policy_name = get_nodes_policy_name(certificate_id) self.hub_uuid = hub_uuid self.node_thing_list = node_thing_list def update_policy(self): import infrastructures.registry.node_policy_repository as repository repository.create_policy_for_nodes(self) repository.attach_policy(self) ඞཁͳૉࡐΛ࢖ͬͯ node_things_register.py

Slide 106

Slide 106 text

ϨΠϠʔԽޙυϝΠϯ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_register.py TJHOVQ device_checker.py UBTL task_manager.py ϋϯυϥʔ͔Βར༻͞ΕΔ ֤ΫϥεΛఏڙ class NodeThings: def __init__(self, aws_account_id, certificate_id, hub_uuid, node_thing_list: List[NodeThing]): self.aws_account_id = aws_account_id self.certificate_id = certificate_id self.policy_name = get_nodes_policy_name(certificate_id) self.hub_uuid = hub_uuid self.node_thing_list = node_thing_list def update_policy(self): import infrastructures.registry.node_policy_repository as repository repository.create_policy_for_nodes(self) repository.attach_policy(self) ۀ຿Λ࣮ߦ͢Δ

Slide 107

Slide 107 text

ϨΠϠʔԽޙΠϯϑϥετϥΫνϟ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_thing_register_repository_.py nodes_policy_repository_.py

Slide 108

Slide 108 text

ϨΠϠʔԽޙΠϯϑϥετϥΫνϟ IBOEMFST EPNBJOT JOGSBTUSVDUVSFT SFHJTUSZ nodes_thing_register_repository_.py nodes_policy_repository_.py CPUPͰ"84ͱ΍ΓͱΓ͢Δ ʢίʔυলུʣ

Slide 109

Slide 109 text

-BNCEB'VODUJPOͷίʔυΛϨΠϠԽͰ͖ͨ ୐഑ϙετొ࿥Ͱػೳ௥Ճ͕͋ͬͨ৔߹ Ͳ͜ʹૠೖ͢Δॲཧ͔Λಛఆ͢Δ
 ʢIBOEMFSTʣ ͦͷॲཧΛ࣮ݱ͢ΔυϝΠϯΛઃܭ͠ɺΫϥεͱ͢Δ ʢEPNBJOTʣ ໨తΛୡ੒͢ΔͨΊͷ֎෦௨৴ॲཧΛॻ͘
 ʢJOGSBTUSVDUVSFTʣ

Slide 110

Slide 110 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 111

Slide 111 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 112

Slide 112 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ ͜ΕΛ࣮ݱ͍ͨ͠

Slide 113

Slide 113 text

αʔόʔϨεΞϓϦέʔγϣϯͷςετ ΞϓϦέʔγϣϯߏஙखॱͷҧ͍Λ΋͏Ұ౓ γεςϜશମ OS ϛυϧ΢ΣΞ ΞϓϦέʔγϣϯ γεςϜશମ . . .

Slide 114

Slide 114 text

Ұൠతͳ8FCΞϓϦέʔγϣϯͷςετ ΞϓϦέʔγϣϯςετͷͨΊͷΤίγεςϜ͕ॆ࣮ γεςϜશମ OS ϛυϧ΢ΣΞ ΞϓϦέʔγϣϯ ίϯςφٕज़ʹΑΔந৅Խ ϩʔΧϧͰαʔϏεΛ্ཱͪ͛Δ ·ͨ͸ϞοΫԽ ΞϓϦέʔγϣϯϩδοΫʹରͯ͠ ॆ࣮ͨ͠ςετΛ͔͚Δ

Slide 115

Slide 115 text

αʔόʔϨεΞϓϦέʔγϣϯͷςετ ϩδοΫͷςετΛ͢Δͱͨ͠Βʜ γεςϜશମ . . . SAM Localʁ localstack ϩʔΧϧʹ্ཱͪ͛Δʁ AWS IoT ͸Ͳ͏͢Δʁ Kinesis Streams͸ʁ

Slide 116

Slide 116 text

αʔόʔϨεΞϓϦέʔγϣϯͷςετ ϩδοΫͷςετΛ͢Δͱͨ͠Βʜ γεςϜશମ . . . SAM Localʁ localstack ϩʔΧϧʹ্ཱͪ͛Δʁ AWS IoT ͸Ͳ͏͢Δʁ Kinesis Streams͸ʁ ࿑ྗʹݟ߹͏ͷ͔ʁ

Slide 117

Slide 117 text

͔ͤͬ͘Lambda Funciton ͚ͩσϓϩΠͰ͖ ΔΑ͏ʹͨ͠͠

Slide 118

Slide 118 text

αʔόʔϨεΞϓϦέʔγϣϯͬͯ σϓϩΠͯ͠Έͳ͍ͱ Θ͔Μͳ͍͜ͱͨ͘͞Μ͋Δ͠ IAM ϙϦγʔͱ͔…

Slide 119

Slide 119 text

࠷ॳ͔Β࣮؀ڥͰͷE2Eςετʹ શྗΛ஫͙ͷ͸Ͳ͏͔ʁ

Slide 120

Slide 120 text

ޮ཰Α͘&&ςετΛߦ͏ͨΊʹ ઃܭ͞ΕͨϩάΛग़ྗ͢Δʢ࣍ͷઅͰݴٴʣ -BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ -BNCEB'VODUJPOͷΈσϓϩΠͰ͖ΔΑ͏ʹ͢Δ
 ʢୡ੒ࡁʣ QZUFTUͷ!pYUVSFΛ্ख͘࢖͏

Slide 121

Slide 121 text

ޮ཰Α͘&&ςετΛߦ͏ͨΊʹ ઃܭ͞ΕͨϩάΛग़ྗ͢Δʢ࣍ͷઅͰݴٴʣ -BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ -BNCEB'VODUJPOͷΈσϓϩΠͰ͖ΔΑ͏ʹ͢Δ
 ʢୡ੒ࡁʣ QZUFTUͷ!pYUVSFΛ্ख͘࢖͏

Slide 122

Slide 122 text

-BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ "844ZTUFNT.BOBHFSͷ1BSBNFUFS4UPSFΛ ׆༻͢Δ

Slide 123

Slide 123 text

-BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ "844ZTUFNT.BOBHFSͷ1BSBNFUFS4UPSFΛ ׆༻͢Δ -BNCEB'VODUJPO 4".ςϯϓϨʔτྫ AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Parameters: AwsIotHttpEndpoint: Default: /prd/lambda/AwsIotHttpEndpoint Type: AWS::SSM::Parameter::Value CommitId: Default: '000000000' Type: String DynamoDBEndpoint: Default: /prd/lambda/DynamoDBEndpoint Type: AWS::SSM::Parameter::Value Env: Default: /prd/lambda/Env Type: AWS::SSM::Parameter::Value Resources: NodesRegistry: Type: AWS::Serverless::Function Properties: FunctionName: !Sub ${Env}-iot_nodes_thing_registry …

Slide 124

Slide 124 text

-BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ "844ZTUFNT.BOBHFSͷ1BSBNFUFS4UPSFΛ ׆༻͢Δ -BNCEB'VODUJPO 4".ςϯϓϨʔτྫ AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Parameters: AwsIotHttpEndpoint: Default: /prd/lambda/AwsIotHttpEndpoint Type: AWS::SSM::Parameter::Value CommitId: Default: '000000000' Type: String DynamoDBEndpoint: Default: /prd/lambda/DynamoDBEndpoint Type: AWS::SSM::Parameter::Value Env: Default: /prd/lambda/Env Type: AWS::SSM::Parameter::Value Resources: NodesRegistry: Type: AWS::Serverless::Function Properties: FunctionName: !Sub ${Env}-iot_nodes_thing_registry … ؀ڥม਺ͷઃఆ ྫɿ%ZOBNP%#ςʔϒϧ໊

Slide 125

Slide 125 text

-BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ "844ZTUFNT.BOBHFSͷ1BSBNFUFS4UPSFΛ ׆༻͢Δ &&ςετ
 pYUVSFྫ @pytest.fixture(scope='session', autouse=False) def ssm_parameters(request) -> SsmParameters: env = request.config.getoption('--env') yield make_parameters(env) def make_parameters(env) -> SsmParameters: # from SSM function_args = { 'Path': f'/{env}', 'Recursive': True, 'WithDecryption': True, 'MaxResults': 10, } response = SSM.get_parameters_by_path(**function_args) current_batch, next_token = extract_result(response) result = current_batch while next_token is not None: #࠶औಘ parameters_from_ssm = \ {extract_parameter_name(parameter): parameter['Value'] for parameter in result} ssm_parameters = SsmParameters(parameters_from_ssm) return ssm_parameters

Slide 126

Slide 126 text

-BNCEB'VODUJPOͱڞ௨ͷઃఆΛ࢖͏ "844ZTUFNT.BOBHFSͷ1BSBNFUFS4UPSFΛ ׆༻͢Δ &&ςετ
 pYUVSFྫ @pytest.fixture(scope='session', autouse=False) def ssm_parameters(request) -> SsmParameters: env = request.config.getoption('--env') yield make_parameters(env) def make_parameters(env) -> SsmParameters: # from SSM function_args = { 'Path': f'/{env}', 'Recursive': True, 'WithDecryption': True, 'MaxResults': 10, } response = SSM.get_parameters_by_path(**function_args) current_batch, next_token = extract_result(response) result = current_batch while next_token is not None: #࠶औಘ parameters_from_ssm = \ {extract_parameter_name(parameter): parameter['Value'] for parameter in result} ssm_parameters = SsmParameters(parameters_from_ssm) return ssm_parameters ύϥϝʔλετΞ͔ΒσʔλΛऔ ಘ͠ΦϒδΣΫτੜ੒ ֤ςετͰύϥϝʔλ͕ར༻Ͱ͖Δ

Slide 127

Slide 127 text

QZUFTUͷ!pYUVSFΛ্ख͘࢖͏ ໾ׂɿςετσʔλΛఆٛ͢Δ

Slide 128

Slide 128 text

QZUFTUͷ!pYUVSFΛ্ख͘࢖͏ ໾ׂɿςετσʔλΛఆٛ͢Δ ໾ׂɿࣄલ৚݅Λ͋Β͔͡Ίୡ੒͓ͯ͘͠

Slide 129

Slide 129 text

ࣄલ৚݅Λ͋Β͔͡Ίୡ੒͓ͯ͘͠ 1.DynamoDB΁ࣄલొ࿥ 2.ূ໌ॻͷδϟετΠϯλΠϜొ࿥ 3.ϗʔϜϢχοτొ࿥ 4.୐഑ϙετొ࿥ 5.ҎޙɺΠϕϯτ௨৴

Slide 130

Slide 130 text

ࣄલ৚݅ͱͳΔۀ຿Λ͋Β͔͡Ίୡ੒͓ͯ͘͠ 1.DynamoDB΁ࣄલొ࿥ 2.ূ໌ॻͷδϟετΠϯλΠϜొ࿥ 3.ϗʔϜϢχοτొ࿥ 4.୐഑ϙετొ࿥ 5.ҎޙɺΠϕϯτ௨৴ ͜ΕΛςετ͠Α͏ͱ ࢥͬͨΒ

Slide 131

Slide 131 text

ࣄલ৚݅ͱͳΔۀ຿Λ͋Β͔͡Ίୡ੒͓ͯ͘͠ 1.DynamoDB΁ࣄલొ࿥ 2.ূ໌ॻͷδϟετΠϯλΠϜొ࿥ 3.ϗʔϜϢχοτొ࿥ 4.୐഑ϙετొ࿥ 5.ҎޙɺΠϕϯτ௨৴ ͜Ε͸ऴΘ͍ͬͯΔඞ ཁ͕͋Δ

Slide 132

Slide 132 text

ࣄલ৚݅ͱͳΔۀ຿Λ͋Β͔͡Ίୡ੒͓ͯ͘͠ 1.DynamoDB΁ࣄલొ࿥ 2.ূ໌ॻͷδϟετΠϯλΠϜొ࿥ 3.ϗʔϜϢχοτొ࿥ 4.୐഑ϙετొ࿥ 5.ҎޙɺΠϕϯτ௨৴ ͜Ε͸ऴΘ͍ͬͯΔඞ ཁ͕͋Δ @pytest.mark.usefixtures('download_cert_fixture', 'signup_fixture', 'task_fixture', 'jit_second_fixture', 'iot_thing_hub_register_fixture', 'iot_thing_nodes_register_fixture') def test_iot_nodes_register_finished( self, ssm_parameters: SsmParameters, signup_fixture: SignUpFixture, task_fixture: TaskFixture, jit_second_fixture: JitFixture, iot_thing_nodes_register_fixture: List[IotThingNodeRegisterFixture]):

Slide 133

Slide 133 text

ࣄલ৚݅ͱͳΔۀ຿Λ͋Β͔͡Ίୡ੒͓ͯ͘͠ 1.DynamoDB΁ࣄલొ࿥ 2.ূ໌ॻͷδϟετΠϯλΠϜొ࿥ 3.ϗʔϜϢχοτొ࿥ 4.୐഑ϙετొ࿥ 5.ҎޙɺΠϕϯτ௨৴ ͜Ε͸ऴΘ͍ͬͯΔඞ ཁ͕͋Δ @pytest.mark.usefixtures('download_cert_fixture', 'signup_fixture', 'task_fixture', 'jit_second_fixture', 'iot_thing_hub_register_fixture', 'iot_thing_nodes_register_fixture') def test_iot_nodes_register_finished( self, ssm_parameters: SsmParameters, signup_fixture: SignUpFixture, task_fixture: TaskFixture, jit_second_fixture: JitFixture, iot_thing_nodes_register_fixture: List[IotThingNodeRegisterFixture]): ࣄલॲཧ͕ऴΘͬͨঢ়ଶͰ୐഑ ϙετొ࿥ςετΛ։࢝Ͱ͖Δ

Slide 134

Slide 134 text

ςετΛ࣮ߦ͍ͯ͠Δ༷ࢠ > make test-integ-registry env=itg file_prefix=registry_nodes

Slide 135

Slide 135 text

ςετΛ࣮ߦ͍ͯ͠Δ༷ࢠ > make test-integ-registry env=itg file_prefix=registry_nodes &&ςετ͕ύε͢Δ࣮؀ڥͰಈ͘ ҆৺ײ͕͍͢͝ શσϓϩΠ͕ා͘ͳ͍

Slide 136

Slide 136 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 137

Slide 137 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ

Slide 138

Slide 138 text

͜ͷཁૉΛຬͨ͢ͱ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥ՃมߋՄೳ ΞϓϦέʔγϣϯ։ൃαΠΫϧ ͷεϐʔυΞοϓ ϓϩδΣΫτ։࢝࣌ͷ΢ΥʔϜ Ξοϓ࣌ؒ୹ॖ ͋ͱͰ΋Θ͔ΔɾҾ͖ܧ͛Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ ͜ΕΛ࣮ݱ͍ͨ͠

Slide 139

Slide 139 text

ϩάग़ྗ͸༗ྗͳखஈͷͻͱ͔ͭͩʜ ԿΛग़ͤ͹ྑ͍ʁ Ͳ͜Ͱग़ͤ͹ྑ͍ʁ Ͳ͏΍ͬͯݟΔͷʁ Ͳ͜ʹཷΊΔͷʁ -BNCEB'VODUJPOͷϩά͡ΌͩΊͳͷʁ

Slide 140

Slide 140 text

ϩάग़ྗ͸༗ྗͳखஈͷͻͱ͔ͭͩʜ ԿΛग़ͤ͹ྑ͍ʁ Ͳ͜Ͱग़ͤ͹ྑ͍ʁ Ͳ͏΍ͬͯݟΔͷʁ Ͳ͜ʹཷΊΔͷʁ -BNCEB'VODUJPOͷϩά͡ΌͩΊͳͷʁ ϩάΛग़ͯ͠ԿΛ͍ͨ͠ͷ͔ ੔ཧ͢Δ

Slide 141

Slide 141 text

ϩάΛग़͢໨తΛ੔ཧ͢Δ ΰʔϧɿྲྀΕΛ௥͑ΔΑ͏ʹ͢ΔɹͨΊͷཁ݅ ੒ޭͨ͜͠ͱ͕Θ͔Δ
 ࣦഊͨ͜͠ͱ͕Θ͔Δ ɾͲͷϦΫΤετͰ
 ɾԿͷॲཧ͕
 ɾ͍ͭ
 ɾͳͥ

Slide 142

Slide 142 text

ϩάΛग़͢໨తΛ੔ཧ͢Δ ΰʔϧɿྲྀΕΛ௥͑ΔΑ͏ʹ͢ΔɹͨΊͷཁ݅ w UBTL@VVJE
 ϦΫΤετΛ௥੻Ͱ͖Δ*% w MBNCEB@SFRVFTU@JE
 -BNCEBͷϦΫΤετ*% w EFWJDF@JE
 ΫϥΠΞϯτݻ༗ͷ*% ੒ޭͨ͜͠ͱ͕Θ͔Δ
 ࣦഊͨ͜͠ͱ͕Θ͔Δ ɾͲͷϦΫΤετͰ
 ɾԿͷॲཧ͕
 ɾ͍ͭ
 ɾͳͥ

Slide 143

Slide 143 text

ϩάΛग़͢໨తΛ੔ཧ͢Δ ΰʔϧɿྲྀΕΛ௥͑ΔΑ͏ʹ͢ΔɹͨΊͷཁ݅ w MBNCEB@IBOEMFS
 'VODUJPO໊ w MPH@FWFOU
 ۀ຿Λ۠ผ͢Δ໊લ ੒ޭͨ͜͠ͱ͕Θ͔Δ
 ࣦഊͨ͜͠ͱ͕Θ͔Δ ɾͲͷϦΫΤετͰ
 ɾԿͷॲཧ͕
 ɾ͍ͭ
 ɾͳͥ

Slide 144

Slide 144 text

ϩάΛग़͢໨తΛ੔ཧ͢Δ ΰʔϧɿྲྀΕΛ௥͑ΔΑ͏ʹ͢ΔɹͨΊͷཁ݅ w UJNFTUBNQ
 VOJYUJNFɻιʔτͰ౎߹͕ ྑ͍ w UJNFTUBNQ@KTU
 ਓ͕ؒݟΔ༻ ੒ޭͨ͜͠ͱ͕Θ͔Δ
 ࣦഊͨ͜͠ͱ͕Θ͔Δ ɾͲͷϦΫΤετͰ
 ɾԿͷॲཧ͕
 ɾ͍ͭ
 ɾͳͥ

Slide 145

Slide 145 text

ϩάΛग़͢໨తΛ੔ཧ͢Δ ΰʔϧɿྲྀΕΛ௥͑ΔΑ͏ʹ͢ΔɹͨΊͷཁ݅ ੒ޭͨ͜͠ͱ͕Θ͔Δ
 ࣦഊͨ͜͠ͱ͕Θ͔Δ ɾͲͷϦΫΤετͰ
 ɾԿͷॲཧ͕
 ɾ͍ͭ
 ɾͳͥ w Ͱ͖Δ͚ͩͨ͘͞Μͷ৘ใ w ϋϯυϥͷDPOUFYUɺελο ΫτϨʔεͳͲ

Slide 146

Slide 146 text

ϩάΛग़͢໨తΛ੔ཧ͢Δ ΰʔϧɿྲྀΕΛ௥͑ΔΑ͏ʹ͢ΔɹͨΊͷཁ݅ ͋ͱ͔Βಛఆͷ*%Ͱݕࡧ͍ͨ͠͠ ςετ͍ͯ͠Δͱ͖͸ϦΞϧλΠϜͰ΋ݟ͍ͨ

Slide 147

Slide 147 text

ϩάग़ྗج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams

Slide 148

Slide 148 text

ϩάग़ྗج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams try: … except Exception as e: ErrorLogger( lambda_event=event, lambda_context=context, commit_id=variables.get_commit_id(), param_hub_uuid=None, error=e, traceback=traceback.format_exc() ).log() raise e -BNCEB'VODUJPOͰϩά༻ΦϒδΣΫτΛ࡞ͬͯग़ྗ࣮ߦ

Slide 149

Slide 149 text

ϩάग़ྗج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams try: … except Exception as e: ErrorLogger( lambda_event=event, lambda_context=context, commit_id=variables.get_commit_id(), param_hub_uuid=None, error=e, traceback=traceback.format_exc() ).log() raise e ,JOFTJT4USFBNT΁ϩά౤ೖ -BNCEB'VODUJPOͰϩά༻ΦϒδΣΫτΛ࡞ͬͯग़ྗ࣮ߦ

Slide 150

Slide 150 text

੔ཧ͠·͢

Slide 151

Slide 151 text

ྲྀΕΛ௥͑Δϩάج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams w ϦΫΤετΛಛఆͰ͖ Δ*% w ॲཧΛಛఆͰ͖Δ৘ใ w ೔࣌৘ใ w पลίϯςΩετ৘ใ

Slide 152

Slide 152 text

ྲྀΕΛ௥͑Δϩάج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams w ϦΫΤετΛಛఆͰ͖ Δ*% w ॲཧΛಛఆͰ͖Δ৘ใ w ೔࣌৘ใ w पลίϯςΩετ৘ใ ͜ΕΛ

Slide 153

Slide 153 text

ྲྀΕΛ௥͑Δϩάج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams w ϦΫΤετΛಛఆͰ͖ Δ*% w ॲཧΛಛఆͰ͖Δ৘ใ w ೔࣌৘ใ w पลίϯςΩετ৘ใ ͜͏΍ͬͯग़͢

Slide 154

Slide 154 text

ϩάग़ྗج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams "NB[PO"UIFOBͰͷ ݟ͑ํͲΜͳײ͡ʁ ͅ

Slide 155

Slide 155 text

"84"UIFOBͰݟͯΈΔ ಛఆͷΫϥΠΞϯτ*%ͷྲྀΕΛ௥͍͍ͨ৔߹ SELECT level, log_event, lambda_handler, lambda_commit_id, timestamp_jst FROM application WHERE device_id = ‘123456789’ and timestamp >= 1527744698 ORDER BY timestamp desc

Slide 156

Slide 156 text

"84"UIFOBͰݟͯΈΔ SELECT level, log_event, lambda_handler, lambda_commit_id, timestamp_jst FROM application WHERE device_id = ‘123456789’ and timestamp >= 1527744698 ORDER BY timestamp desc ༨ஊɿ-BNCEB 'VDOUJPO͕ͲͷόʔδϣϯͰಈ͍ͯ ͍Δ͔Θ͔ΔͷͰ $PNNJU*E͓͢͢Ί ಛఆͷΫϥΠΞϯτ*%ͷྲྀΕΛ௥͍͍ͨ৔߹

Slide 157

Slide 157 text

"84"UIFOBͰݟͯΈΔ ಛఆͷΫϥΠΞϯτ*%ͷྲྀΕΛ௥͍͍ͨ৔߹ δϟετΠϯλΠϜొ࿥׬ྃ

Slide 158

Slide 158 text

"84"UIFOBͰݟͯΈΔ ಛఆͷΫϥΠΞϯτ*%ͷྲྀΕΛ௥͍͍ͨ৔߹ ϗʔϜϢχοτͷొ࿥͕׬ྃ

Slide 159

Slide 159 text

"84"UIFOBͰݟͯΈΔ ಛఆͷΫϥΠΞϯτ*%ͷྲྀΕΛ௥͍͍ͨ৔߹ ୐഑ϙετͷొ࿥͕׬ྃ

Slide 160

Slide 160 text

"84"UIFOBͰݟͯΈΔ ಛఆͷΫϥΠΞϯτ*%ͷྲྀΕΛ௥͍͍ͨ৔߹ ୐഑ϙετͷొ࿥͕׬ྃ ࣮ࡍʹಈ͍͍ͯΔॲཧͷ༷ࢠ͕Θ͔Δʂ

Slide 161

Slide 161 text

ϩάग़ྗج൫ Lambda Amazon SNS Amazon Kinesis Firehose Amazon Athena alarm Amazon CloudWatch Amazon Kinesis Streams $MPVE8BUDI-PHTʹ ྲྀΕΔϩάΛݟ͍ͨ

Slide 162

Slide 162 text

TBXͰݟͯΈΔ TylerBrock/saw: Fast, multi-purpose tool for AWS CloudWatch Logs https://github.com/TylerBrock/saw/releases

Slide 163

Slide 163 text

TBXͰݟͯΈΔ TylerBrock/saw: Fast, multi-purpose tool for AWS CloudWatch Logs https://github.com/TylerBrock/saw/releases $MPVE8BUDI-PHTͷ ϩάάϧʔϓΛ λʔϛφϧͰετϦʔϛϯάͰ͖Δπʔϧ

Slide 164

Slide 164 text

&&ςετΛ࣮ߦ͍ͯ͠Δͱ͖ͷϩά > saw watch /target_log_group_name/application --expand

Slide 165

Slide 165 text

&&ςετΛ࣮ߦ͍ͯ͠Δͱ͖ͷϩάʢ֦େʣ > saw watch /target_log_group_name/application --expand

Slide 166

Slide 166 text

ྲྀΕΛ௥͑ΔΑ͏ʹ͢Δɹ·ͱΊ w ϩάग़ྗ͕༗༻ͳखஈ w ϦΫΤετ৘ใɺ΍Γ͔ͨͬͨ͜ͱɺ೔࣌ɺपลίϯ ςΩετ͕Θ͔ΔࡐྉΛग़͢ͱ਌੾ w +40/ܗ͕ࣜྑ͍ɻ"UIFOB΍TBXͰύʔε͠΍͍͢ w ͋ͱ͔ΒݟΔ༻ʹ4"UIFOBɺϞχλϦϯά༻ʹ $MPVE8BUDI-PHTʹ౉͢

Slide 167

Slide 167 text

࿩͢಺༰ w αʔόʔϨεΞϓϦέʔγϣϯ͸ෳࡶԽʹڧ͘ͳ͍ w ղܾ΁ͷΞϓϩʔνɿϩδοΫΛϨΠϠԽ͢Δ w ΞϓϦ঺հɿ"84*P5ͱܨ͕ΔεϚʔτ୐഑ϙετ w "84-BNCEBͷϨΠϠʔԽ w αʔόʔϨεͷςετΛ&&ςετʹৼΓ͖Δ w "84-BNCEBͷϩάΛ"84"UIFOBͰݟΔ w ૯ׅ NJO NJO NJO NJO NJO NJO NJO

Slide 168

Slide 168 text

͔ͳΓۀ຿ΛؙདʹͰ͖ͨ ۀ຿ͷ৔ॴΛ໌֬ʹ͢Δ
 ۀ຿͕ୡ੒Ͱ͖Δ͜ͱΛࣔ͢
 ۀ຿ͷྲྀΕΛ௥͑ΔΑ͏ʹ͢Δ ௥Ճมߋ͕ා͘ͳ͍"84αʔόʔϨεΞϓϦέʔγϣϯ "84-BNCEBͷϩδοΫ ΛϨΠϠԽ͢Δ "84؀ڥͰ&&ςετΛ࣮ ߦ͢Δ -BNCEB'VODUJPOͷϩ άΛ"84"UIFOBͰݟΒ ΕΔΑ͏ʹ͢Δ

Slide 169

Slide 169 text

΍ͬͯΈͯͲ͏͔ͩͬͨ

Slide 170

Slide 170 text

ྑ͔ͬͨ఺ ػೳ௥Ճɾվमͷϋʔυϧ͕େ෯ʹԼ͕ͬͨ ࠔͬͨΒશσϓϩΠɾશςετɻNBLFͰ୭Ͱ΋࣮ߦՄೳɻ &&ςετ͔ͩΒͦ͜ݟ͔ͭͬͨόά΋͋ͬͨ ಛʹϙϦγʔपΓ͸"84্Ͱಈ͔ͯ͠Έͳ͍ͱΘ͔Βͳ͍ "84"UIFOB͕େ׆༂ εςʔΫϗϧμͱͷ߹ಉςετʹ͓͍ͯɺόάௐ͓ࠪΑͼಈ࡞ূ ੻ͱͯ͠

Slide 171

Slide 171 text

ѱ͔ͬͨ఺ ͜Ε-BNCEB'VODUJPOͰ΍Δඞཁ͋Δʁ ͳΜͲ΋ࢥͬͨɻ ઃܭΛ༏ઌ͍ͯ͠Ζ͍Ζ٘ਜ਼ʹ͍ͯ͠Δ -BNCEBͷ΢ΥʔϜελʔτͳͲɺओʹύϑΥʔϚϯε໘ &&ςετ͸"84্ͷίʔυʹରͯ͠ςετ͢Δ σϓϩΠ͠ͳ͍ͱ͍͚ͳ͍ɺΧόϨοδܭଌ͕Ͱ͖ͳ͍

Slide 172

Slide 172 text

૯ׅ ·ͩ·ͩυϝΠϯۦಈઃܭͷελʔτ஍఺ ࣮ࡍʹ͸͔͜͜Β஌ࣝΛ͔Έ͖ͩ͘ɺυϝΠϯΛҭ͍ͯͯ͘ αʔόʔϨεΞϓϦέʔγϣϯͷઃܭࢦ਑ͷͻͱͭ ΦϯϥΠϯήʔϜͷόοΫΤϯυɺ෼ੳσʔλͷ&5-ɺ೔࣍ όονͳͲɺαʔόʔϨεʹٻΊΒΕΔཁ݅͸͞·͟·ɻࠓ ճͷൃද͸ɺϏδωεͷ֦ॆ͕༧૝͞ΕΔΞϓϦͷઃܭํ਑ ͱͯ͠ࢀߟʹ͍ͯͩ͘͠͞

Slide 173

Slide 173 text

αʔόʔϨεΞϓϦέʔγϣϯͷઃܭ͸ൃల్্ ʮ΢ν͸͜͏΍ͬͯΔͥʂʯ ͥͻڞ༗͠·͠ΐ͏

Slide 174

Slide 174 text

ࢀߟॻ੶ɾར༻ͨ͠πʔϧ w DODGXHTFSWFSMFTT$/$'4FSWFSMFTT8(IUUQTHJUIVCDPNDODGXHTFSWFSMFTT w "844".IUUQTEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHTFSWFSMFTT@BQQIUNM w .BLF(/61SPKFDUIUUQTXXXHOVPSHTPGUXBSFNBLF w QZUFTUEPDVNFOUBUJPOIUUQTEPDTQZUFTUPSHFOMBUFTU