Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバーレスアーキテクチャで作ったIoTのバックエンドシステムで遭遇したエラーと対処法

yuji nishimura
September 12, 2019

 サーバーレスアーキテクチャで作ったIoTのバックエンドシステムで遭遇したエラーと対処法

Developers.IO 2019 in Nagoyaで発表した資料です

yuji nishimura

September 12, 2019
Tweet

More Decks by yuji nishimura

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ   2019 APN AWS Top Engineersೝఆ AWSೝఆ 2017/5

    ΫϥεϝιουJoin ౦ژ͔ΒେࡕʹUλʔϯస৬ ೖࣾ࣌͸৘γεॴଐ ೖࣾલ͸ISPͷձࣾͰӡ༻อक ܦྺ ੢ଜ ༞ೋ(28) CXࣄۀຊ෦ॴଐ େࡕΦϑΟεࡏ੶
  2. αʔόʔϨεͷಛ௃   wΫϥ΢υϕϯμʔʹΑΔɹ ϚωʔδυαʔϏε wαʔϏεͷӡ༻؅ཧ͸͢΂ͯɹ Ϋϥ΢υϕϯμʔʹ͓·͔ͤ w04΍ϛυϧ΢ΣΞͷύον͸ ࣗಈͰదԠ w׬શैྔ՝ۚ

    wΞΠυϧ࣌ؒʹ՝ۚ͞Εͳ͍ wϓϩάϥϜ͕࣮ߦ͞Εͨ࣌ؒʹର͠ ͯ՝ۚ wߴՄ༻ੑ wΫϥ΢υϕϯμʔଆͰউखʹ৑௕Խ wࣗಈతʹεέʔϧΞοϓ
  3. "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 ... ... ... ݸਓϨϕϧͰར༻͢Δ෼ʹ͸΄΅ྉۚ͸͔͔Βͳ͍ͷͰؾܰʹར༻Ͱ͖Δ
  4. "84*P5$PSFͷྉۚͷ֓ཁ   wैྔ՝ۚɺ࠷௿ར༻ྉۚͳ͠ w઀ଓ࣌ؒɿ64% ઀ଓສ෼͋ͨΓ  wϝοηʔδɿԯ݅·Ͱ64% ສ݅͋ͨΓ 

    wϨδετϦɺσόΠεγϟυ΢ɿ64% ສ݅͋ͨΓ  wτϦΨʔϧʔϧɺ࣮ߦΞΫγϣϯɿ64%ɹɹɹɹɹɹ τϦΨʔ͞Εͨϧʔϧສ݅͋ͨΓ࣮ߦ͞ΕͨΞΫ γϣϯສ݅͋ͨΓ https://aws.amazon.com/jp/iot-core/pricing/ ※౦ژϦʔδϣϯͰͷྉۚମܥ
  5. ΞʔΩςΫνϟͷུ֓ਤͷઆ໌   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 γεςϜɿσʔλΛ஝ੵ͢ΔγεςϜ
  6. w͜ͷॲཧͷޙ͸ɺ͜ͷॲཧͱ͍͏࿈ଓతͳϦΫΤετ ϦΫΤετ಺༰   IoT hardware AWS IoT Core DynamoDB

    Lambda API Gateway ᶄϨεϙϯε 200ok ᶃϦΫΤετ ᶅ࣮ߦϦΫΤετ ᶆॲཧ࣮ߦத ᶇϦιʔεऔಘϦΫΤετ ᶈॲཧະ׬ྃͷͨΊΤϥʔ
  7. wσόΠεଆ͕ϦτϥΠॲཧΛೖΕͯ΋Β͏ ରࡦ   IoT hardware AWS IoT Core DynamoDB

    Lambda API Gateway ᶄϨεϙϯε 200ok ᶃϦΫΤετ ᶅ࣮ߦϦΫΤετ ᶆॲཧ࣮ߦத ᶇϦιʔεऔಘϦΫΤετ ᶈॲཧະ׬ྃͷͨΊΤϥʔ ᶉϦτϥΠ
  8. ରࡦ   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/ λΠϜΞ΢τ஋Λมߋ͠ద੾ʹϦτϥΠ͞ΕΔΑ͏ʹઃఆมߋ
  9. 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ճ
  10. -BNCEBͷݺͼग़͠   w-BNCEB͸τϦΨʔʹΑͬͯݺͼग़͠λΠϓ͕ҟͳΔ wλΠϓ wಉظݺͼग़͠ɿ"1*( σϑΥϧτಈ࡞ ɺ4%,ͳͲ͔Β-BNCEBىಈ wετϦʔϜɿ,JOFTJT%BUB4USFBNT %ZOBNP%#4USFBNT

    wϙʔϦϯάɿ424 wඇಉظݺͼग़͠ɿ4ɺ4/4ɺ$8ͳͲɻϦτϥΠ͸ࣗಈతʹճɺ஗Ԇ͋Γ wݺͼग़͠λΠϓʹΑͬͯϦτϥΠͷ࢓ํ΋ҟͳΔ