SlideShare ist ein Scribd-Unternehmen logo
1 von 17
© 2018 NTT SMILE ENERGY
IoTをAWS&サーバーレスで構築する
定番構成でハマったこと
2018年05月18日
株式会社NTTスマイルエナジー
価値づくり本部
田中 雄祐
さるる勉強会 vol.01
〜さるる勉強会 with Serverworks様〜
© 2018 NTT SMILE ENERGY
・趣味
自己紹介
1
NSE 価値づくり本部
総括/基幹T リーダー
田中 雄祐
(タナカ ユウスケ)
・来歴
・AWSとの関わり
バンド演奏、音楽にまつわるモノづくり全般
→レコーディング、DTM、機材改造・自作
2007:レコーディングエンジニアを目指すも挫折。
2008〜:中小SIに入社。アプリ屋PGとして派遣先を転々…
2013〜:NSEでIoTサービスの要求設計・運用システム設計
2018〜:企画/開発/運用の調整チームのリーダーに
AWSは2017年の新デバイス開発で初使用。
API GatewayとLambdaのお手軽さに感動。
2018年3月にAWS認定SAA取得しました!
© 2018 NTT SMILE ENERGY
このセッションのゴール
2
MUST!
・AWSでサーバーレス開発するときの定番構成でハマったポイントを
紹介し、第2のハマり犠牲者を防ぐ!
・俺(私)、NSEで働いてみたいと思ってもらう!
WANT!
・NSEって
面白い(人がいる)会社だな
面白い開発ができそうだな
スキルも上がりそうだな
と思ってもらう!
© 2018 NTT SMILE ENERGY
事例紹介
API Gateway+Lambda+DynaomoDB
でIoTデータ保存
3
© 2018 NTT SMILE ENERGY
どの部分の話?
4
ここの話
© 2018 NTT SMILE ENERGY
やりたかったこと
目的
 IoTデバイスから送信されたデータをDBに保存する
機能要件・制約
 IoTデバイスから送られるリクエストは1行1レコードの
データが格納されたCSV形式
 IoTデバイスは15分周期でリクエスト送信
 1回のリクエストには最大900行程度のデータを想定
5
© 2018 NTT SMILE ENERGY
アーキテクチャ
6
API Gateway Lambda DynamoDBIoTデバイス
①データ送信のリクエスト(CSV)
②CSVを分解
③DB登録
④正常終了のレスポンス返却
インフラとかサーバーとか一切考慮不要!
画面ポチポチで設定、コードを書くだけでデータ受信処理を構
築完了!
© 2018 NTT SMILE ENERGY
完成!
7
ヒャッハー!!
AWS!鯖レス!
マジパネェ!
と、思ってたら・・・
© 2018 NTT SMILE ENERGY
作った後にハマってたこと
8
夜中になるとすごい数の504エラーが…
平均45件/5分のタイムアウト!
まだ数十デバイスしか売れてないのに…
© 2018 NTT SMILE ENERGY
どうしてこうなった… vol.1
9
実はデバイス仕様が聞いてたのと違った!
元々聞いてた要件
 IoTデバイスは15分周期でリクエスト送信
 1回のリクエストには最大900行程度のデータを想定
動かしてみてわかったこと
 夜中は昼に遅れなかったデータを連続再送してくる
 1回のリクエストには最大2500行程度のデータを想定
© 2018 NTT SMILE ENERGY
その結果何が起こっていたか
10
API Gateway Lambda DynamoDBIoTデバイス
①2500行のリクエスト(CSV) ②2500行を頑張ってDBに突っ込む
→時間がかかる・・・
これ無限ループのDos攻撃ですやん…
③30秒経過してもLambdaから応
答がないので504レスポンス④次の再送データを送る
DynamoDBの書込容量は2000台時の想定値にまで肥大化!
→お金もかかる!
© 2018 NTT SMILE ENERGY
どうしてこうなった… vol.2
11
ループして1行ずつDBに突っ込む実装になってた!
for item in items:
table.put_item(Item = item)
俺、サンプルコード通り
作っただけやし
どうして2500行程度でこんなに時間がかかるの?
AWSってこんなもんなの?
調べてみると…
© 2018 NTT SMILE ENERGY
どうしたか
12
batch_writerを使ったら一発解決!!
※boto3 AWS SDK for Python
for item in items:
table.put_item(Item = item)
まとめてガサッとデータを突っ込めないのか?
with table.batch_writer() as batch:
for item in items:
batch.put_item(Item = item)
たったのこれだけ!
データが貯まったらまとめてDynamoDBに登録する
コントロールを中でよしなにやってくれます
※標準APIのBatchWriteItemでは25件単位の件数制御が必要
© 2018 NTT SMILE ENERGY
どうなったか
13
DynamoDBに保存できた件数は飛躍的にUP!
Batch_writer 30秒の登録数 DynamoDBの書込
容量設定(WCU)
使用前 1200件 67まで肥大化
使用後 7500件! 25で済んだ!
DynamoDBの書込容量も削減!
→タイムアウトは発生しなくなりました!
→システムコストも削減!
© 2018 NTT SMILE ENERGY
まとめ
14
API Gateway+Lambda+DynamoDBでIoTデバイスからデータを受け
たい時は…
→Lambda側のタイムアウトを伸ばしても、
API Gateway側は無慈悲に30秒でタイムアウトします…
1.API Gateway+Lambdaは30秒以内に処理が
終わらなかったことを考慮した設計にするべし!
2.Lambda→DynamoDB投入時には
batch_writerを使うべし!
→安易なサンプルコード利用と1件登録ループはやめよう
3.デバイスの通信仕様・挙動は事前にしっかりおさえましょう…
© 2018 NTT SMILE ENERGY
最後に
15
• 結構技術に寄った話になりましたが、サーバーレスの定番構成なので、
これからAWSやっていくという人もいつか役に立つ日がくると思いま
す!
• NSEにくると、企画/開発/運用、ソ
フト/ハードの全ての視点を意識した
上でのシステム開発ができるよ!
• プロダクトやサービスに1から携
わって新たな価値をつくっていきた
い方大歓迎!
© 2018 NTT SMILE ENERGY 16

Weitere ähnliche Inhalte

Was ist angesagt?

3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術LIFULL Co., Ltd.
 
素人流 業務改善 全社プロジェクト
素人流 業務改善 全社プロジェクト素人流 業務改善 全社プロジェクト
素人流 業務改善 全社プロジェクトCybozucommunity
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL Co., Ltd.
 
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!kitsugi
 
kintoneとAWSでできるIoT
kintoneとAWSでできるIoTkintoneとAWSでできるIoT
kintoneとAWSでできるIoTCybozucommunity
 
SORACOM LTE-M Button for Enterpriseシミュレータについて
SORACOM LTE-M Button for EnterpriseシミュレータについてSORACOM LTE-M Button for Enterpriseシミュレータについて
SORACOM LTE-M Button for EnterpriseシミュレータについてKen'ichirou Kimura
 
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSPcloudconductor
 
20190802 class method_osaka_aws
20190802 class method_osaka_aws20190802 class method_osaka_aws
20190802 class method_osaka_awsKenji Tomooka
 
Ansibleの限界を超えてファイアウォールの プロビをした話
Ansibleの限界を超えてファイアウォールのプロビをした話Ansibleの限界を超えてファイアウォールのプロビをした話
Ansibleの限界を超えてファイアウォールの プロビをした話shomahirao
 
IoTとServerlessの世界 Jawsfesta_1103
IoTとServerlessの世界 Jawsfesta_1103IoTとServerlessの世界 Jawsfesta_1103
IoTとServerlessの世界 Jawsfesta_1103Ryosuke Izumi
 
AIoTプラットフォーム Web APIサービス
AIoTプラットフォーム Web APIサービスAIoTプラットフォーム Web APIサービス
AIoTプラットフォーム Web APIサービスAPI Meetup
 
BIGIP作業サービス化してみた
BIGIP作業サービス化してみたBIGIP作業サービス化してみた
BIGIP作業サービス化してみたkotasaegusa
 
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発Ryosuke Izumi
 
ぐるなびあるあるLt2017
ぐるなびあるあるLt2017ぐるなびあるあるLt2017
ぐるなびあるあるLt2017eiji sekiya
 
IBM Cloud IaaSのご紹介
IBM Cloud IaaSのご紹介IBM Cloud IaaSのご紹介
IBM Cloud IaaSのご紹介Atsushi Hanaki
 
20191016 class method_tokyo_aws
20191016 class method_tokyo_aws20191016 class method_tokyo_aws
20191016 class method_tokyo_awsKenji Tomooka
 
オートモーティブ事業におけるMLOps / ShibuyaSynapse #4
オートモーティブ事業におけるMLOps / ShibuyaSynapse #4オートモーティブ事業におけるMLOps / ShibuyaSynapse #4
オートモーティブ事業におけるMLOps / ShibuyaSynapse #4Shota Suzuki
 

Was ist angesagt? (20)

3D間取りを支える技術
3D間取りを支える技術3D間取りを支える技術
3D間取りを支える技術
 
素人流 業務改善 全社プロジェクト
素人流 業務改善 全社プロジェクト素人流 業務改善 全社プロジェクト
素人流 業務改善 全社プロジェクト
 
LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発LIFULL HOME'Sのおとり広告予測モデルの開発
LIFULL HOME'Sのおとり広告予測モデルの開発
 
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
モバイルファーストで業務効率化! ローカルデータベースが作業員を救う!
 
Aws solution
Aws solutionAws solution
Aws solution
 
kintoneとAWSでできるIoT
kintoneとAWSでできるIoTkintoneとAWSでできるIoT
kintoneとAWSでできるIoT
 
SORACOM LTE-M Button for Enterpriseシミュレータについて
SORACOM LTE-M Button for EnterpriseシミュレータについてSORACOM LTE-M Button for Enterpriseシミュレータについて
SORACOM LTE-M Button for Enterpriseシミュレータについて
 
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
 
20190802 class method_osaka_aws
20190802 class method_osaka_aws20190802 class method_osaka_aws
20190802 class method_osaka_aws
 
Ansibleの限界を超えてファイアウォールの プロビをした話
Ansibleの限界を超えてファイアウォールのプロビをした話Ansibleの限界を超えてファイアウォールのプロビをした話
Ansibleの限界を超えてファイアウォールの プロビをした話
 
IoTとServerlessの世界 Jawsfesta_1103
IoTとServerlessの世界 Jawsfesta_1103IoTとServerlessの世界 Jawsfesta_1103
IoTとServerlessの世界 Jawsfesta_1103
 
AIoTプラットフォーム Web APIサービス
AIoTプラットフォーム Web APIサービスAIoTプラットフォーム Web APIサービス
AIoTプラットフォーム Web APIサービス
 
BIGIP作業サービス化してみた
BIGIP作業サービス化してみたBIGIP作業サービス化してみた
BIGIP作業サービス化してみた
 
VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発VueとAWSAppSyncで始めるチャットアプリ開発
VueとAWSAppSyncで始めるチャットアプリ開発
 
Pythonで簡単動画解析
Pythonで簡単動画解析Pythonで簡単動画解析
Pythonで簡単動画解析
 
ぐるなびあるあるLt2017
ぐるなびあるあるLt2017ぐるなびあるあるLt2017
ぐるなびあるあるLt2017
 
IBM Cloud IaaSのご紹介
IBM Cloud IaaSのご紹介IBM Cloud IaaSのご紹介
IBM Cloud IaaSのご紹介
 
[Japan Tech summit 2017] MAI 005
[Japan Tech summit 2017] MAI 005[Japan Tech summit 2017] MAI 005
[Japan Tech summit 2017] MAI 005
 
20191016 class method_tokyo_aws
20191016 class method_tokyo_aws20191016 class method_tokyo_aws
20191016 class method_tokyo_aws
 
オートモーティブ事業におけるMLOps / ShibuyaSynapse #4
オートモーティブ事業におけるMLOps / ShibuyaSynapse #4オートモーティブ事業におけるMLOps / ShibuyaSynapse #4
オートモーティブ事業におけるMLOps / ShibuyaSynapse #4
 

Ähnlich wie [さるる勉強会] IoTをAWS&サーバーレスで構築する定番構成でハマったこと

クラウドインテグレーターのお仕事
クラウドインテグレーターのお仕事クラウドインテグレーターのお仕事
クラウドインテグレーターのお仕事Serverworks Co.,Ltd.
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTT DATA Technology & Innovation
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTNobuyuki Matsui
 
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービスNTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービスNTT Software Innovation Center
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaHidenori Fujioka
 
ユニアデックスのAIに向けた取り組みご紹介
ユニアデックスのAIに向けた取り組みご紹介ユニアデックスのAIに向けた取り組みご紹介
ユニアデックスのAIに向けた取り組みご紹介ReNom User Group
 
デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?
デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?
デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?SORACOM,INC
 
SCORER Partner Summit 2018_ TIS Nagai
SCORER Partner Summit 2018_ TIS NagaiSCORER Partner Summit 2018_ TIS Nagai
SCORER Partner Summit 2018_ TIS NagaiFuture Standard
 
Joug(Oktaユーザーグループ)登壇資料
Joug(Oktaユーザーグループ)登壇資料Joug(Oktaユーザーグループ)登壇資料
Joug(Oktaユーザーグループ)登壇資料ssuserdf544a
 
「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222
「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222
「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222知礼 八子
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotNobuyuki Matsui
 
NVIDIA Jetson導入事例ご紹介
NVIDIA Jetson導入事例ご紹介NVIDIA Jetson導入事例ご紹介
NVIDIA Jetson導入事例ご紹介NVIDIA Japan
 
06.ユニアデックス(株)_発表資料
06.ユニアデックス(株)_発表資料06.ユニアデックス(株)_発表資料
06.ユニアデックス(株)_発表資料wagatuma
 
20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方
20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方
20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方Uniadex Ltd.
 

Ähnlich wie [さるる勉強会] IoTをAWS&サーバーレスで構築する定番構成でハマったこと (20)

20180831_NTC3_NSE
20180831_NTC3_NSE20180831_NTC3_NSE
20180831_NTC3_NSE
 
クラウドインテグレーターのお仕事
クラウドインテグレーターのお仕事クラウドインテグレーターのお仕事
クラウドインテグレーターのお仕事
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
Smfl20201001
Smfl20201001Smfl20201001
Smfl20201001
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoT
 
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービスNTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by Iida
 
ユニアデックスのAIに向けた取り組みご紹介
ユニアデックスのAIに向けた取り組みご紹介ユニアデックスのAIに向けた取り組みご紹介
ユニアデックスのAIに向けた取り組みご紹介
 
デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?
デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?
デブサミ関西 2017| IoTビジネスが もっと発展するために必要なものとは?
 
Tech-on MeetUp#09 hitachi資料
Tech-on MeetUp#09 hitachi資料Tech-on MeetUp#09 hitachi資料
Tech-on MeetUp#09 hitachi資料
 
SCORER Partner Summit 2018_ TIS Nagai
SCORER Partner Summit 2018_ TIS NagaiSCORER Partner Summit 2018_ TIS Nagai
SCORER Partner Summit 2018_ TIS Nagai
 
Joug(Oktaユーザーグループ)登壇資料
Joug(Oktaユーザーグループ)登壇資料Joug(Oktaユーザーグループ)登壇資料
Joug(Oktaユーザーグループ)登壇資料
 
「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222
「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222
「IoT時代のデータのあり方と活用の方向性」名古屋大学エネルギーシステムシンポジウム 170222
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & Robot
 
NVIDIA Jetson導入事例ご紹介
NVIDIA Jetson導入事例ご紹介NVIDIA Jetson導入事例ご紹介
NVIDIA Jetson導入事例ご紹介
 
IoTNEWSの取組とその活用法について
IoTNEWSの取組とその活用法についてIoTNEWSの取組とその活用法について
IoTNEWSの取組とその活用法について
 
06.ユニアデックス(株)_発表資料
06.ユニアデックス(株)_発表資料06.ユニアデックス(株)_発表資料
06.ユニアデックス(株)_発表資料
 
20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方
20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方
20180927 みやぎ IoT ビジネス共創ラボ 製造業から養豚まで、おいしい IoT & AI ビジネスのつくり方
 
20190915 hayashi nw_jaws
20190915 hayashi nw_jaws 20190915 hayashi nw_jaws
20190915 hayashi nw_jaws
 
Tech-on MeetUp#09_closing
Tech-on MeetUp#09_closingTech-on MeetUp#09_closing
Tech-on MeetUp#09_closing
 

[さるる勉強会] IoTをAWS&サーバーレスで構築する定番構成でハマったこと

  • 1. © 2018 NTT SMILE ENERGY IoTをAWS&サーバーレスで構築する 定番構成でハマったこと 2018年05月18日 株式会社NTTスマイルエナジー 価値づくり本部 田中 雄祐 さるる勉強会 vol.01 〜さるる勉強会 with Serverworks様〜
  • 2. © 2018 NTT SMILE ENERGY ・趣味 自己紹介 1 NSE 価値づくり本部 総括/基幹T リーダー 田中 雄祐 (タナカ ユウスケ) ・来歴 ・AWSとの関わり バンド演奏、音楽にまつわるモノづくり全般 →レコーディング、DTM、機材改造・自作 2007:レコーディングエンジニアを目指すも挫折。 2008〜:中小SIに入社。アプリ屋PGとして派遣先を転々… 2013〜:NSEでIoTサービスの要求設計・運用システム設計 2018〜:企画/開発/運用の調整チームのリーダーに AWSは2017年の新デバイス開発で初使用。 API GatewayとLambdaのお手軽さに感動。 2018年3月にAWS認定SAA取得しました!
  • 3. © 2018 NTT SMILE ENERGY このセッションのゴール 2 MUST! ・AWSでサーバーレス開発するときの定番構成でハマったポイントを 紹介し、第2のハマり犠牲者を防ぐ! ・俺(私)、NSEで働いてみたいと思ってもらう! WANT! ・NSEって 面白い(人がいる)会社だな 面白い開発ができそうだな スキルも上がりそうだな と思ってもらう!
  • 4. © 2018 NTT SMILE ENERGY 事例紹介 API Gateway+Lambda+DynaomoDB でIoTデータ保存 3
  • 5. © 2018 NTT SMILE ENERGY どの部分の話? 4 ここの話
  • 6. © 2018 NTT SMILE ENERGY やりたかったこと 目的  IoTデバイスから送信されたデータをDBに保存する 機能要件・制約  IoTデバイスから送られるリクエストは1行1レコードの データが格納されたCSV形式  IoTデバイスは15分周期でリクエスト送信  1回のリクエストには最大900行程度のデータを想定 5
  • 7. © 2018 NTT SMILE ENERGY アーキテクチャ 6 API Gateway Lambda DynamoDBIoTデバイス ①データ送信のリクエスト(CSV) ②CSVを分解 ③DB登録 ④正常終了のレスポンス返却 インフラとかサーバーとか一切考慮不要! 画面ポチポチで設定、コードを書くだけでデータ受信処理を構 築完了!
  • 8. © 2018 NTT SMILE ENERGY 完成! 7 ヒャッハー!! AWS!鯖レス! マジパネェ! と、思ってたら・・・
  • 9. © 2018 NTT SMILE ENERGY 作った後にハマってたこと 8 夜中になるとすごい数の504エラーが… 平均45件/5分のタイムアウト! まだ数十デバイスしか売れてないのに…
  • 10. © 2018 NTT SMILE ENERGY どうしてこうなった… vol.1 9 実はデバイス仕様が聞いてたのと違った! 元々聞いてた要件  IoTデバイスは15分周期でリクエスト送信  1回のリクエストには最大900行程度のデータを想定 動かしてみてわかったこと  夜中は昼に遅れなかったデータを連続再送してくる  1回のリクエストには最大2500行程度のデータを想定
  • 11. © 2018 NTT SMILE ENERGY その結果何が起こっていたか 10 API Gateway Lambda DynamoDBIoTデバイス ①2500行のリクエスト(CSV) ②2500行を頑張ってDBに突っ込む →時間がかかる・・・ これ無限ループのDos攻撃ですやん… ③30秒経過してもLambdaから応 答がないので504レスポンス④次の再送データを送る DynamoDBの書込容量は2000台時の想定値にまで肥大化! →お金もかかる!
  • 12. © 2018 NTT SMILE ENERGY どうしてこうなった… vol.2 11 ループして1行ずつDBに突っ込む実装になってた! for item in items: table.put_item(Item = item) 俺、サンプルコード通り 作っただけやし どうして2500行程度でこんなに時間がかかるの? AWSってこんなもんなの? 調べてみると…
  • 13. © 2018 NTT SMILE ENERGY どうしたか 12 batch_writerを使ったら一発解決!! ※boto3 AWS SDK for Python for item in items: table.put_item(Item = item) まとめてガサッとデータを突っ込めないのか? with table.batch_writer() as batch: for item in items: batch.put_item(Item = item) たったのこれだけ! データが貯まったらまとめてDynamoDBに登録する コントロールを中でよしなにやってくれます ※標準APIのBatchWriteItemでは25件単位の件数制御が必要
  • 14. © 2018 NTT SMILE ENERGY どうなったか 13 DynamoDBに保存できた件数は飛躍的にUP! Batch_writer 30秒の登録数 DynamoDBの書込 容量設定(WCU) 使用前 1200件 67まで肥大化 使用後 7500件! 25で済んだ! DynamoDBの書込容量も削減! →タイムアウトは発生しなくなりました! →システムコストも削減!
  • 15. © 2018 NTT SMILE ENERGY まとめ 14 API Gateway+Lambda+DynamoDBでIoTデバイスからデータを受け たい時は… →Lambda側のタイムアウトを伸ばしても、 API Gateway側は無慈悲に30秒でタイムアウトします… 1.API Gateway+Lambdaは30秒以内に処理が 終わらなかったことを考慮した設計にするべし! 2.Lambda→DynamoDB投入時には batch_writerを使うべし! →安易なサンプルコード利用と1件登録ループはやめよう 3.デバイスの通信仕様・挙動は事前にしっかりおさえましょう…
  • 16. © 2018 NTT SMILE ENERGY 最後に 15 • 結構技術に寄った話になりましたが、サーバーレスの定番構成なので、 これからAWSやっていくという人もいつか役に立つ日がくると思いま す! • NSEにくると、企画/開発/運用、ソ フト/ハードの全ての視点を意識した 上でのシステム開発ができるよ! • プロダクトやサービスに1から携 わって新たな価値をつくっていきた い方大歓迎!
  • 17. © 2018 NTT SMILE ENERGY 16