Slide 1

Slide 1 text

ඇಉظॲཧΛ࢖ͬͨԠ౴ੑೳ վળ ServerlessLTॳ৺ऀ޲͚ LTେձ #24

Slide 2

Slide 2 text

ࣗݾ঺հ • Hyuga Tsukuiʢ@hy_twenʣ • γΣϧϑΟʔʢגʣͰݐઃۀք޲͚SaaSΛ։ൃ͍ͯ͠·͢ • ࣾ֎LTॳ௅ઓͰ͢👋

Slide 3

Slide 3 text

ࠓ೔఻͍͑ͨ͜ͱ • ೔ৗ͔Βݟ͑Δඇಉظॲཧͱ͸ʁ • ඇಉظॲཧͷ࢖͍ॴ • ߴίετͳॲཧͷऔΓѻ͍ͱγϯϓϧͳղܾࡦͷ঺հ

Slide 4

Slide 4 text

ඇಉظॲཧͱ͸ • ޙͰ݁ՌΛฦ͢͜ͱΛ໿ଋ͠ɺҰ౓ॲཧΛ׬ྃͤ͞Δɻ݁Ռ͕༻ҙͰ ͖ͨΒݺͼग़͠ݩʹ͋ΒͨΊͯ݁ՌΛ௨஌͢Δ࢓૊Έͷ͜ͱʢࢀߟ https://www.htmlhi fi ve.com ඇಉظॲཧͱPromiseΛഎܠ͔Βཧղ͠Α͏ʣ

Slide 5

Slide 5 text

͋Δ೔ͷ͓ങ͍෺Λߟ͑ͯΈ·͢ • εʔύʔซઃͷༀہͰɺॲํᝦ͔ΒༀΛ࡞ͬͯ΋Β͏ʢλεΫAʣ • ͖ΐ͏ͷ൩͝͸Μͷ৯ࡐΛങ͏ʢλεΫBʣ

Slide 6

Slide 6 text

ಉظॲཧVer. ॲํᝦड෇ ௐࡎʢNJOʣ ଴ػʢNJOʣ ௐࡎ׬ྃ ങ͍෺ NJO

Slide 7

Slide 7 text

ඇಉظॲཧVer. ॲํᝦड෇ ௐࡎʢNJOʣ ങ͍෺ NJO ௐࡎ׬ྃ ड෇൪߸ൃߦ

Slide 8

Slide 8 text

྆ऀͷҧ͍ • ಉظVer.͸ௐࡎ͕ऴΘͬͨΒങ͍෺Λ։࢝͢Δ • ඇಉظVer.͸ௐࡎதʹങ͍෺Λ։࢝͢Δ

Slide 9

Slide 9 text

ಉظॲཧVer. ॲํᝦड෇ ௐࡎʢNJOʣ ଴ػʢNJOʣ ௐࡎ׬ྃ ങ͍෺ NJO Ұ࿈ͷॲཧ͕׬ྃ͢Δ·ͰNJO͔͔Δ

Slide 10

Slide 10 text

ඇಉظॲཧVer. ॲํᝦड෇ ௐࡎʢNJOʣ ങ͍෺ NJO ௐࡎ׬ྃ ड෇൪߸ൃߦ Ұ࿈ͷॲཧ͕׬ྃ͢Δ·ͰNJO͔͔Δ

Slide 11

Slide 11 text

ௐࡎΛຊ౰ʹ଴ͭඞཁ͕͋Δ͔ʁ

Slide 12

Slide 12 text

ड෇൪߸(PromiseʣͳͲͰඇಉظతʹ ॲཧͰ͖Δ

Slide 13

Slide 13 text

ඇಉظॲཧΛݕ౼͢ΔMotivation • λεΫͷ׬ྃΛ଴ͭඞཁ͕ແ͍ͱ͖ • Ұ࿈ͷλεΫͷྲྀΕʢ͋Δ೔ͷ͓ങ͍෺ʣͷதͰɺϘτϧωοΫͱͳ ΔΑ͏ͳλεΫ͕͋Δ࣌

Slide 14

Slide 14 text

γεςϜͷ࿩

Slide 15

Slide 15 text

ϦΞϧͳͷߟ͑·ͨ͠ʂ

Slide 16

Slide 16 text

͋ΔIOTػثͷར༻։࢝αʔϏεΛߟ͑Δ • ػث͸ࡏݿ؅ཧDBͰͲͷސ٬͕ར༻͢Δ͔؅ཧ͍ͯ͠Δ • ػث͕ωοτϫʔΫΛར༻͢Δʹ͸ɺػثఏڙϕϯμͷAPI΁ϓϩϏ δϣχϯάਃ੥Λ͢Δඞཁ͕͋Δ • ϓϩϏδϣχϯάਃ੥׬ྃʹ͸਺෼Λཁ͢Δ • ࣦഊ͢ΔՄೳੑ΋͋Δ

Slide 17

Slide 17 text

ུਤ

Slide 18

Slide 18 text

λεΫΛ෼͚ͯΈΔͱ • ػثࡏݿʹؔ͢ΔॲཧͱɺϓϩϏδϣχϯάΛ͢Δॲཧ͸෼͚Εͦ͏ • ϓϩϏδϣχϯάॲཧ͸͕͔͔࣌ؒΔͷͰɺλεΫΛ෼͚ͳ͍ͱɺԠ ౴ੑ͕͜͜ʹӨڹΛड͚ͯѱ͘ͳΔ • ࣦഊͨ͠ͱ͖ʹϓϩϏδϣχϯά͔Β͚ͩ΍Γ௚ͤͦ͏

Slide 19

Slide 19 text

ඇಉظॲཧΛݕ౼͢ΔMotivation • λεΫͷ׬ྃΛ଴ͭඞཁ͕ແ͍ͱ͖ • Ұ࿈ͷλεΫͷྲྀΕʢ͋Δ೔ͷ͓ങ͍෺ʣͷதͰɺϘτϧωοΫͱͳ ΔΑ͏ͳλεΫ͕͋Δ࣌

Slide 20

Slide 20 text

ࠓճखܰʹඇಉظԽ͢Δͷ͸͜͜ʂ

Slide 21

Slide 21 text

͍͟ɺServerless΁ʂ

Slide 22

Slide 22 text

࠷ऴߏ੒ਤ

Slide 23

Slide 23 text

࠷ऴߏ੒ਤ ͜͜

Slide 24

Slide 24 text

AWS SimpleQueueService(SQS) • AWS͕ఏڙ͢ΔServerlessͳϝοηʔδΩϡʔΠϯάαʔϏεͰ༷ʑ ͳServerlessͰߏ੒͞ΕͨΞϓϦΛ౷߹Ͱ͖Δ • Lambdaͱͷ࿈ܞ͕༰қ • ϦτϥΠ΍ɺࣦഊͨ͠ϝοηʔδͷอଘ͕Մೳ • ඇৗʹߴ଎ʢඪ४ΩϡʔͳΒࣄ্࣮ແ੍ݶ

Slide 25

Slide 25 text

AWS SimpleQueueService(SQS) ͜Μͳײ͡ʹɺൺֱతॊೈͳϝοηʔδΛऔΓѻ͑·͢ɻ(256kb·ͰͷςΩετ) ྫͱͯ͠ɺࠓճͷϓϩϏδϣχϯάAPIʹඞཁͦ͏ͳ஋Λઃఆͯ͠Έ·͠ΐ͏ɻ { “eventId”: “7885ca34-f3ff-4575-b062-da50e9ae746a”, “macAddress”: “00-00-5E-10-00-00-00-00“ // document༻ʹ͋Δར༻Մೳͳ஋Ͱ͢ }

Slide 26

Slide 26 text

AWS SimpleQueueService(SQS) ·ͨࠓճཁ݅ͱͯ͠ɺ֎෦APIͷࣦഊՄೳੑ͕͋ΔͷͰɺDeadLetterQueueͷઃఆ΋ΦεεϝͰ͢ɻ Πϝʔδͱͯ͠͸ɺࣦഊͨ͠ϝοηʔδΛࣗಈͰҰ࣌తʹผͷQueue΁֨ೲ͠ɺܾΊΒΕͨϧʔϧͰ࠶PushʢReDriveʣ͠·͢ɻ ·ͨࢦఆͷճ਺࣮ߦͯ͠΋ফԽͰ͖ͳ͔ͬͨ৔߹͸ɺDeadLetterQueue΁อଘ͞Εɺࢦఆظؒܦաޙ࡟আ͞Ε·͢ɻ

Slide 27

Slide 27 text

࠷ऴߏ੒ਤ ͜͜

Slide 28

Slide 28 text

AWS Lambda • AWS͕ఏڙ͢ΔServerlessͷίϯϐϡʔςΟϯάϦιʔε • ๛෋ͳରԠݴޠɺϥϯλΠϜΛ࣋ͭͷͰϏδωεϩδοΫͷ࣮૷ίε τ͕௿ • ࣮ߦ࣌ؒͰͷ՝ۚͷͨΊɺॲཧʹΑͬͯ͸௿ίετ • ߴεέʔϥϏϦςΟ • ࠓճͰ͍͏ͱSQSͱͷ૬ੑ͕ൈ܈ͰɺࣗલͰϙʔϦϯάج൫Λ࣋ͭ

Slide 29

Slide 29 text

AWS Lambda Lambda͸ଟ͘ͷىಈτϦΨʔΠϕϯτΛ͍࣋ͬͯΔͷͰɺSQSʹϝοηʔδ͕PUT͞ΕͨͷΛܖػʹɺىಈ͢ΔͳͲ͕ઃఆҰͭͰߦ͑ ·͢ɻ

Slide 30

Slide 30 text

ࠓճߏ੒ͷ஫ҙ఺ ɾSQSʹඪ४ΩϡʔΛࢦఆͨ͠৔߹ɺat least once ͷ࢓༷ʹΑΓɺಉ͡ϝοηʔδ͕ෳ਺PULL͞ΕΔՄೳੑ͕͋Γ·͢ɻ { “eventId”: “7885ca34-f3ff-4575-b062-da50e9ae746a”, “macAddress”: “00-00-5E-10-00-00-00-00“ // document༻ʹ͋Δར༻Մೳͳ஋Ͱ͢ } 👆͜ͷϝοηʔδ͕ೋճPULL͞ΕΔͷͰɺಉ͡macAddressΛॲཧ͢ΔLambda͕ෳ਺ճ࣮ߦ͞ΕΔՄೳੑ͕͋Δɻ

Slide 31

Slide 31 text

ࠓճߏ੒ͷ஫ҙ఺ ɾͦͷͨΊɺႈ౳ੑ֬อ·ͨ͸ɺϩοΫػߏΛඞ࣮ͣ૷͢Δඞཁ͕͋Γ·͢ɻ EX. DynamoDBΛར༻ָͨ͠؍Lockʢٙࣅίʔυʣ status = dynamoDB.GetItem(eventId=1) if (status === 0) { api.call(macAddress); }else { return }

Slide 32

Slide 32 text

͋Δ͔΋͠Εͳ͍ٙ໰఺

Slide 33

Slide 33 text

͋Δ͔΋͠Εͳ͍ٙ໰఺ Q1. Lambda΋ࣗಈϦτϥΠ͋Δ͡ΌΜɺͳΜͰSQS? A1. ͦͷͱ͓ΓͰ͕͢ɺ࠷ऴతʹ࣮ߦͰ͖ͳ͔ͬͨevent͕SQSͷ΄͏͕௥͍΍͍ͨ͢ΊͰ͢ɻLambdaͰ΋ࣦഊͨ͠eventΛ DeadLetterQueueʹஷΊ͓ͯ͘ߏ੒͸͋ΔΑ͏Ͱ͢ɻ Q2. ͳΜͰDynamoDBʁRDSͰ͸ବ໨ͳͷ͔ A1. LambdaͱRDSͷ૬ੑ͸ྑ͘ͳ͍ͱ͢Δͷ͕ҰൠతͰ͢ɻཧ༝͸ɺRDS͸ࣄ্࣮εέʔϧΞοϓͰͷରԠ͔͠Ͱ͖ͳ͍ͨΊݶք͕ۙ ͍Ͱ͕͢ɺLambda͸ແ੍ݶͷεέʔϧΞ΢τͳͷͰɺ͜͜ͰRDS͕ϘτϧωοΫʹͳΔͨΊͰ͢ɻ ίωΫγϣϯϓʔϧͷ໰୊౳͸Amazon RDS ProxyͳͲΛར༻͢Δ͜ͱͰଧ։Ͱ͖Δ͔΋͠Ε·ͤΜʢ΍ͬͨ͜ͱͳ͍Ͱ͢ɻ

Slide 34

Slide 34 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ