サーバーレスアーキテクチャで作ったIoTのバックエンドシステムで遭遇したエラーと対処法
by
yuji nishimura
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
αʔόʔϨεͰ࡞ͬͨ *P5ͷόοΫΤϯυγεςϜͰ ૺ۰ͨ͠Τϥʔͱରॲ๏ $9ࣄۀຊ෦ ଜ༞ೋ
Slide 2
Slide 2 text
#cmdevio2019
Slide 3
Slide 3 text
εϥΠυޙͰೖख͢Δ͜ͱ͕ग़དྷ·͢ͷͰ ൃදதͷ༰ΛϝϞ͢Δඞཁ͋Γ·ͤΜɻ ࣸਅࡱӨΛ͢Δ߹ ϑϥογϡɾγϟολʔԻ͕ग़ͳ͍Α͏ʹྀ͍ͩ͘͝͞ Attention
Slide 4
Slide 4 text
ࣗݾհ 2019 APN AWS Top Engineersೝఆ AWSೝఆ 2017/5 ΫϥεϝιουJoin ౦ژ͔ΒେࡕʹUλʔϯస৬ ೖࣾ࣌γεॴଐ ೖࣾલISPͷձࣾͰӡ༻อक ܦྺ ଜ ༞ೋ(28) CXࣄۀຊ෦ॴଐ େࡕΦϑΟεࡏ੶
Slide 5
Slide 5 text
ൃද༰ αʔόʔϨεͳIoTγεςϜΛ ӡ༻͍ͯ͠·ͨ͠ ͦ͜Ͱɺૺ۰ͨ͠Τϥʔͱରॲ๏ͱ ͔ͦ͜ΒֶΜͩ͜ͱΛڞ༗͠·͢
Slide 6
Slide 6 text
ຊൃදͷରऀɾత ରऀ w"84*P5-BNCEBͰͲ͏͍͏ͱ͜ΖʹؾΛ͚ͭͨΒ͍͍͔ɹ Γ͍ͨਓ w*P5ɺαʔόϨεΛ͜Ε͔Β͍͖͍ͬͯͨਓ త w-BNCEB "84*P5ͷϋϚΓͦ͏ͳಛੑΛͬͯΒ͏ w͜Ε͔Β*P5αʔόʔϨεΛΔਓͷࢀߟʹ
Slide 7
Slide 7 text
ΞδΣϯμ wαʔόʔϨεͱ w"84*P5$PSFͷ֓ཁ wΞʔΩςΫνϟͷઆ໌ wΤϥʔ͔ΒֶΜͩͭͷ͜ͱ wͲΜͳΤϥʔʹૺ۰͔ͨ͠ w·ͱΊ NJO NJO NJO NJO NJO NJO
Slide 8
Slide 8 text
αʔόʔϨεͱ
Slide 9
Slide 9 text
ར༻ऀଆ͕αʔόʔͷଘࡏΛ ҙࣝ͠ͳͯ͘ྑ͍ ΞʔΩςΫνϟ
Slide 10
Slide 10 text
αʔόʔϨεͷಛ wΫϥυϕϯμʔʹΑΔɹ ϚωʔδυαʔϏε wαʔϏεͷӡ༻ཧͯ͢ɹ Ϋϥυϕϯμʔʹ͓·͔ͤ w04ϛυϧΣΞͷύον ࣗಈͰదԠ wશैྔ՝ۚ wΞΠυϧ࣌ؒʹ՝ۚ͞Εͳ͍ wϓϩάϥϜ͕࣮ߦ͞Εͨ࣌ؒʹର͠ ͯ՝ۚ wߴՄ༻ੑ wΫϥυϕϯμʔଆͰউखʹԽ wࣗಈతʹεέʔϧΞοϓ
Slide 11
Slide 11 text
AWS Lambda
Slide 12
Slide 12 text
"84-BNCEBͷಛ wΠϕϯτυϦϒϯ wࣗಈతʹεέʔϧ wϛϦඵ୯Ґͷ՝ۚ αʔόʔϨε։ൃͷίΞαʔϏε αʔόʔΛཧͤͣʹϓϩάϥϜ͕࣮ߦͰ͖Δ ίϯϐϡʔςΟϯάαʔϏε wߴ͍ࣗ༝ͱॊೈੑ w༷ʑͳݴޠʹରԠʢ/PEFKT 1ZUIPO +BWB (P FUDʣ wଟ͘ͷ"84αʔϏεͱ࿈ܞՄೳ
Slide 13
Slide 13 text
"84-BNCEBͷྉۚ wϦΫΤετճʹର͢Δ՝ۚ w݄ສ݅·Ͱແྉɺສ݅͋ͨΓ ౦ژϦʔδϣϯ w࣮ߦ࣌ؒʹର͢Δ՝ۚ ϝϞϦ(MB) ݄ͷແྉ(ඵ) 100ϛϦඵ୯ҐͷՁ֨(USD) 128 3,200,000 0.000000208 192 2,133,333 0.000000313 256 1,600,00 0.000000417 ... ... ... ݸਓϨϕϧͰར༻͢Δʹ΄΅ྉ͔͔ۚΒͳ͍ͷͰؾܰʹར༻Ͱ͖Δ
Slide 14
Slide 14 text
αʔόʔϨε։ൃͱ αʔόʔϨε։ൃ LambdaϚωʔδυαʔϏεΛ Έ߹ΘͤͯγεςϜΛ ߏங͍͖ͯ͠·͢
Slide 15
Slide 15 text
αʔόʔϨεͷϝϦοτ wίετͷ࠷దԽ͕ਤΕΔ wӡ༻ෛՙͷݮ wΞϓϦͷ࣮ߦڥ͕͙͢ʹखʹೖΔ wؾܰʹࢼͤΔ
Slide 16
Slide 16 text
AWS IoT Coreͷ֓ཁ
Slide 17
Slide 17 text
"84*P5$PSFͷ֓ཁ w༷ʑͳσόΠεͱ"84ΛηΩϡΞʹଓ wσόΠεσʔλʹର͢ΔॲཧΞΫγϣϯΛ࣮ߦՄೳ wσόΠεΛϦϞʔτͰ੍ޚɾཧ͢Δ͜ͱ͕Մೳ wෳͷػೳ͔Βߏ͞ΕΔϚωʔδυαʔϏε https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-aws-iot
Slide 18
Slide 18 text
"84*P5$PSFͷશମ૾ https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-aws-iot
Slide 19
Slide 19 text
"84*P5$PSFͷྉۚͷ֓ཁ wैྔ՝ۚɺ࠷ར༻ྉۚͳ͠ wଓ࣌ؒɿ64% ଓສ͋ͨΓ wϝοηʔδɿԯ݅·Ͱ64% ສ݅͋ͨΓ wϨδετϦɺσόΠεγϟυɿ64% ສ݅͋ͨΓ wτϦΨʔϧʔϧɺ࣮ߦΞΫγϣϯɿ64%ɹɹɹɹɹɹ τϦΨʔ͞Εͨϧʔϧສ݅͋ͨΓ࣮ߦ͞ΕͨΞΫ γϣϯສ݅͋ͨΓ https://aws.amazon.com/jp/iot-core/pricing/ ※౦ژϦʔδϣϯͰͷྉۚମܥ
Slide 20
Slide 20 text
"84*P5$PSFͷݟੵΓπʔϧ wެࣜͰݟੵΓπʔϧʢΤΫηϧʣ͕ఏڙ https://aws.amazon.com/jp/iot-core/pricing/
Slide 21
Slide 21 text
ΞʔΩςΫνϟͷઆ໌
Slide 22
Slide 22 text
ΞʔΩςΫνϟͷུ֓ਤͷઆ໌ AWS IoT Core IoT thing Lambda IoT rule Kinesis Data Streams DynamoDB Kinesis Data Firehose Amazon S3 Lambda DynamoDB IoT rule IoT rule Amazon Athena ొॲཧ Πϕϯτอଘ ϩάอଘ σόΠεɿՈͷதʹ͋ΓෳͷσόΠε͕ͭͳ͕ΔϋϒσόΠε ϓϩτίϧɿHTTPS HTTP protocol γεςϜɿσʔλΛੵ͢ΔγεςϜ
Slide 23
Slide 23 text
Τϥʔ͔ΒֶΜͩ5ͭͷ͜ͱ
Slide 24
Slide 24 text
Τϥʔ͔ΒֶΜͩͭͷ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 25
Slide 25 text
ͲΜͳΤϥʔʹૺ۰͔ͨ͠
Slide 26
Slide 26 text
Τϥʔ͔ΒֶΜͩͭͷ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 27
Slide 27 text
ૺ۰ͨ͠໘ σόΠεاۀ ʮAPIίʔϧͯ͠Τϥʔ͕ ฦͬͯ͘Δͱ͖͕͋Δʯ
Slide 28
Slide 28 text
ݪҼ AWS IoTͷAPI ඇಉظॲཧͷͨΊ ޙଓͷॲཧ͕ྃ͢Δલʹ ࣍ͷϦΫΤετ͕དྷ͍ͯͨ
Slide 29
Slide 29 text
w͜ͷॲཧͷޙɺ͜ͷॲཧͱ͍͏࿈ଓతͳϦΫΤετ ϦΫΤετ༰ IoT hardware AWS IoT Core DynamoDB Lambda API Gateway ᶄϨεϙϯε 200ok ᶃϦΫΤετ ᶅ࣮ߦϦΫΤετ ᶆॲཧ࣮ߦத ᶇϦιʔεऔಘϦΫΤετ ᶈॲཧະྃͷͨΊΤϥʔ
Slide 30
Slide 30 text
ରࡦ wγʔέϯγϟϧͳॲཧͷͱ͖ൃੜ w"84*P5͔Β0,͕ฦ͖ͬͯͯɺ"84*P5ʹඥͮ͘ -BNCEBͷॲཧ͕͍ྃͯ͠ΔͱݶΒͳ͍ wޙଓͷॲཧ͕ΤϥʔͱͳΔ͜ͱ͕͋Δ σόΠεଆͰϦτϥΠॲཧΛೖΕ͓ͯ͘͜ͱ
Slide 31
Slide 31 text
wσόΠεଆ͕ϦτϥΠॲཧΛೖΕͯΒ͏ ରࡦ IoT hardware AWS IoT Core DynamoDB Lambda API Gateway ᶄϨεϙϯε 200ok ᶃϦΫΤετ ᶅ࣮ߦϦΫΤετ ᶆॲཧ࣮ߦத ᶇϦιʔεऔಘϦΫΤετ ᶈॲཧະྃͷͨΊΤϥʔ ᶉϦτϥΠ
Slide 32
Slide 32 text
Τϥʔ͔ΒֶΜͩͭͷ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 33
Slide 33 text
ૺ۰ͨ͠໘ كʹLambda͕λΠϜΞτ͢Δ
Slide 34
Slide 34 text
ͲΜͳݱ͔ w௨ৗඵͰऴΘΔॲཧ͕ɺ͋Δͱ͖ҟৗʹॲཧ͕͔͔࣌ؒΓ λΠϜΞτΤϥʔ͢Δͱ͖͕͋Δ wසҰिؒʹҰճ͋Δ͔ͳ͍͔ w-BNCEBͰઃఆͰ͖ΔλΠϜΞτͳ͍
Slide 35
Slide 35 text
ݪҼ Lambda͔ΒผAWSαʔϏεʹ ௨৴͢Δͱ͖ͷωοτϫʔΫΤϥʔ
Slide 36
Slide 36 text
wΤϥʔͰଓཱ͕֬Ͱ͖ͣɺॲཧ͕ਐ·ͣλΠϜΞτ w93BZʹΑΔՄࢹԽʹΑͬͯݪҼಛఆ ݪҼ DynamoDB Lambda ωοτϫʔΫΤϥʔ
Slide 37
Slide 37 text
ରࡦ w"844%,ʹλΠϜΞτͱϦτϥΠճ͕ઃఆͰ͖Δ wͦΕͧΕॳظ͕ઃఆ͞Ε͍ͯΔ AWS SDK ࠷େࢼߦճ ଓλΠϜΞτ ιέοτλΠϜΞτ Python(Boto3) αʔϏεʹΑΓҟͳΔ 60ඵ 60ඵ JavaScript/Node.js αʔϏεʹΑΓҟͳΔ ֘ͳ͠ 120ඵ Java 3 10ඵ 50ඵ .NET 4 100ඵ 300ඵ Go 3 ֘ͳ͠ ֘ͳ͠ https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-function-retry-timeout-sdk/ λΠϜΞτΛมߋ͠దʹϦτϥΠ͞ΕΔΑ͏ʹઃఆมߋ
Slide 38
Slide 38 text
CPUPͷઃఆྫ wDPOOFDU@UJNFPVUଓΛཱ֬͢Δ·Ͱͷػ࣌ؒ wSFBE@UJNFPVUཱ֬ͨ͠ଓ͔ΒϨεϙϯε·Ͱͷػ࣌ؒ wNBY@BUUFNQUTϦτϥΠճ import boto3 from botocore.config import Config config = Config(connect_timeout=5, read_timeout=5, retries={'max_attempts': 10}) DYNAMODB = boto3.resource('dynamodb', config=config) ઃఆྫʣଓλΠϜΞτɺιέοτλΠϜΞτɿ5ඵɹϦτϥΠճɿ10ճ
Slide 39
Slide 39 text
Τϥʔ͔ΒֶΜͩͭͷ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 40
Slide 40 text
ૺ۰ͨ͠໘ Τϥʔͨ͠Lambda͕ ͣͬͱϦτϥΠ͠ଓ͚Δ
Slide 41
Slide 41 text
ঢ়گ w,JOFTJT%BUB4USFBNTͱ-BNCEB͕࿈ܞͨ͠ߏ wଞΤϥʔ͕ൃੜͯͣͬ͠ͱϦτϥΠ͢Δ͜ͱͳ͍ w,JOFTJTͷଞͷσʔλॲཧ͞ΕͣΩϡʔʹͨ·Γଓ͚Δ Kinesis Data Streams AWS IoT Core DynamoDB IoT hardware Lambda
Slide 42
Slide 42 text
ݪҼ ετϦʔϜϕʔεͷΠϕϯτιʔεͷͱ͖ LambdaͷϦτϥΠ σʔλͷ༗ޮظݶ͕ΕΔ·Ͱ ܁Γฦ༷͢ͷͨΊ
Slide 43
Slide 43 text
-BNCEBͷಛੑ Lambdaʹෳͷݺͼग़͠λΠϓ͕͋Δ
Slide 44
Slide 44 text
-BNCEBͷݺͼग़͠ w-BNCEBτϦΨʔʹΑͬͯݺͼग़͠λΠϓ͕ҟͳΔ wλΠϓ wಉظݺͼग़͠ɿ"1*( σϑΥϧτಈ࡞ ɺ4%,ͳͲ͔Β-BNCEBىಈ wετϦʔϜɿ,JOFTJT%BUB4USFBNT %ZOBNP%#4USFBNT wϙʔϦϯάɿ424 wඇಉظݺͼग़͠ɿ4ɺ4/4ɺ$8ͳͲɻϦτϥΠࣗಈతʹճɺԆ͋Γ wݺͼग़͠λΠϓʹΑͬͯϦτϥΠͷํҟͳΔ
Slide 45
Slide 45 text
ಉظݺͼग़͠ʢετϦʔϜʣͷϦτϥΠͷڍಈ wσʔλͷ༗ޮظݶ͕ΕΔ·ͰϦτϥΠ wϦΫΤετͷॱংΛ୲อ͢ΔΈΛͭͨΊ wࣦഊͨ͠ॲཧ͕ޭ͢Δ·Ͱ৽͍͠ϨίʔυͷಡΈࠐΈ͕ɹ ϒϩοΫ͞ΕΔ w,JOFTJT%BUB4USFBNTɿσϑΥϧτ࣌ؒɺ࠷େ w%ZOBNP%#ɿ࣌ؒ
Slide 46
Slide 46 text
ରࡦ ႈੑΛߟྀͨ͠ίʔυʹमਖ਼
Slide 47
Slide 47 text
Τϥʔ͔ΒֶΜͩͭͷ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 48
Slide 48 text
ૺ۰ͨ͠໘ αʔόʔϨεͳγεςϜͰΤϥʔ͕ ൃੜͨ͠ͱ͖ͷݪҼಛఆ͕େม
Slide 49
Slide 49 text
ΤϥʔͷݪҼಛఆେม wෳͷ-BNCEB͕͋Δͱɺ͍ͭɺͲ͜Ͱҟৗ͕ى͖͍ͯΔ͔ൃݟ͕େม wݕ͢ΔΈαʔυύʔςΟαʔϏεΛΘͳͯ͘ɹɹɹɹɹɹ $MPVE8BUDIͰ͋ΔఔΧόʔՄೳ wڽͬͨ͜ͱΛ͢Δͱ-BNCEBΛ͏ඞཁ͕Ͱͯ͘Δ CloudWatch Alarmͷઃఆͱ CloudWatchͰఏڙ͞ΕΔμογϡϘʔυͰ࠷ݶͷ͜ͱͰ͖Δ
Slide 50
Slide 50 text
-BNCEBΤϥʔΛ௨͢ΔΈ Lambda͕Τϥʔͨ͠Β௨͕ඈͿΑ͏ʹΞϥʔϜ࡞Ͱ͖Δ ΞΧϯτϨϕϧͰͷΤϥʔঢ়گ͕Θ͔ΔμογϡϘʔυ͕ఏڙ͞Ε͍ͯΔ
Slide 51
Slide 51 text
ศརͳμογϡϘʔυ͕ఏڙ͞Ε͍ͯΔ γεςϜʹҟৗ͕͋ͬͨͱ͖ɺίίΛݟΔͱྑͦ͞͏
Slide 52
Slide 52 text
Τϥʔͨ͠-BNCEBΛಛఆͨ͠ޙͷमਖ਼େม w-BNCEBෳ"84αʔϏεͱ࿈ܞ͢Δ͜ͱ͕ଟ͘ɺ Ͳ͜ͷॲཧΛमਖ਼ͨ͠Βྑ͍͔ͷΘ͔Βͳ͘ͳΔ w93BZͳͲͷ෦ͷॲཧΛՄࢹԽ͢ΔτϨʔγϯάαʔϏε Λಋೖ͓ͯ͘͠ AWS X-Ray
Slide 53
Slide 53 text
93BZΛಋೖ͢ΔϝϦοτ w-BNCEB෦ͷॲཧΛՄࢹԽͯ͘͠ΕΔ wͲ͜ͷॲཧʹ͕͋Δ͔ͷमਖ਼Օॴͷख͕͔͔Γʹ
Slide 54
Slide 54 text
Τϥʔ͔ΒֶΜͩͭͷ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 55
Slide 55 text
ૺ۰ͨ͠໘ ϚωʔδυαʔϏεͷ ༷ͷѲ͕େม
Slide 56
Slide 56 text
༷ͷѲࠔ wϩδοΫҎ֎ͷΤϥʔͷݪҼαʔϏε༷ͷߟྀ࿙Ε͕େ wυΩϡϝϯτॆ࣮͍ͯ͠Δ͕ɺେͰͯ͢ΛѲ͢Δͷࠔ w"84ʑΞοϓσʔτ͞Ε͍ͯΔ wαʔϏε෦ͷॲཧ͕มΘͬͨӨڹ͋Δ w-BNCEBͷ࣮͕ѱ͍ͷ͔ɺαʔϏε༷ͳͷ͔ΛΓ͚Δ͜ͱ͕ॏཁ ϚωʔδυαʔϏεΛ׆༻ͨ͠γεςϜΛӡ༻͢Δࡍ AWSαϙʔτඞਢ
Slide 57
Slide 57 text
"84αϙʔτ w͍߹Θͤ͢Δʹ༗ྉϓϥϯΛબ͢Δඞཁ͕͋Δ w"84ͷύʔτφʔاۀͷαʔϏεΛ͏·͘׆༻͠અ͠Α͏ AWSΤϯλʔϓϥΠζ૬ͷAWSαϙʔτΛແྉఏڙ AWSར༻අҰ5%OFF
Slide 58
Slide 58 text
·ͱΊ
Slide 59
Slide 59 text
*P5αʔόʔϨεͰؾΛ͚ͭΔ͜ͱ w"1*͕ඇಉظλΠϓ͔ಉظλΠϓ͔ҙࣝ w4%,ʹ͓͚ΔλΠϜΞτɺϦτϥΠઃఆΛΕͣઃఆ w,JOFTJT-BNCEBͷϦτϥΠํ๏ʹ͍ͭͯཧղ w-BNCEBΤϥʔ࣌௨͢ΔΈͱ93BZΛಋೖ͓ͯ͘͠ w"84αϙʔτʹ͍߹ΘͤͰ͖ΔڥΛ͓͑ͯ͘
Slide 60
Slide 60 text
No content