SlideShare a Scribd company logo
Copyright © HANDS LAB INC. All rights reserved.
2015年9月8日	
JAWS-UG 千葉 第五回
ラズパイからセンサーデータをAPI Gateway+Lambdaに送るよ	
ハンズラボ株式会社
1
自己紹介	
名前 今井 智明
所属 ハンズラボ株式会社
    2013年4月より東急ハンズのIT部門を子会社化
担当 AWSでのインフラ構築、運用、
    iOSアプリケーション開発、運用 
    
l JAWS-UG 千葉と聞いて、千葉出身なので来ました。
l 千葉県千葉市中央区星久喜町生まれ
l 小学校から大学までずーっと千葉市内でした。
l 星久喜小学校
l 星久喜中学校
l 千葉南高校
l 神田外語大学(神田って名前だけど美浜区にある)
l 千葉県民のみなさまよろしくお願いします。
2
なぜここにいるのか
3
本日お話すること	
1. ラズパイの話
2. AWS側の話
3. まとめ
4
本日お話すること	
1. ラズパイの話
2. AWS側の話
3. まとめ
l 正式名称はRaspberry Pi
l 85.60 mm × 56.5 mmの小型コンピュータ
l Linuxがふつうに動く
l ネットワークに繋がる
l USB、HDMIなどいろいろ
l センサーを繋げられる
5
ラズパイとは
l ハンズラボにはIoT部がある
l ハードウェア好き、DIY好きの集まり?
l 入部するとラズパイを買ってもらえる
l 面白そうなので入る
l 本当にラズパイ買ってもらう(゚д゚)ウマー
l 温度、湿度、光センサーを買ってもらう(゚д゚)ウマー
l 買ってもらったからには使ってみる
l どうせならAWSと組み合わせる
6
ラズパイを触る経緯
l センサーを繋げてデータを取る
l ラズパイにはデジタルセンサーしか繋げられない
l ラズパイと一緒に買ったセンサーはアナログorz
l Arduinoと組み合わせると使えるらしい
l ラズパイ+Aruduinoの構成になる
l センサーデータをAWSに送って可視化する
l 当初はAWSCLIを使おうと思ってた
l API Gateway+Lambdaが出てきたので方針変更
l DyamoDB Stream+Lambdaもおもしろそう 7
ラズパイでやろうと思ったこと
8
構成図	
AWS cloud
会社
DynamoDB	
Raspberry Pi	
 Lambda	
API Gateway	
Sensor	
Arduino	
DynamoDB
Steams	
Lambda	
CloudWatch
Custom Metrics
l ラズパイを動かす
l SDカード買う
l Raspbianをダウンロード&インストールする
l USBポートにキーボードとマウスを接続する
l HDMIポートにモニターを接続する
l Etherポートに有線LANを接続する
l 起動する(microUSBを繋ぐ)
l IPが取れたらあとはSSH
9
ステップ1/9
l Arduinoでセンサーを動かす
l Arduinoにセンサー設置
l MacとArduinoをUSB接続
l Arduinoのコードを書いてデプロイする
l 動作確認する
10
ステップ2/9	
温度・湿度計	
光度計	
Arduino
11
ステップ2のつづき	
l 取得したセンサーデータ
l ラズパイでArduinoからデータ受け取る
l ラズパイとArduinoをシリアル接続(USB)
l Arduinoがシリアルデバイスに出力するようにする
l ラズパイがシリアルデバイスから読み取る
12
ステップ3/9
l Arduinoが出力するタイミングが合わなかった
l 960ミリ秒ごとに出力する必要があった
13
ステップ3ではまったこと1	
void setup() {
Serial.begin(9600);
while (!Serial) {
}
}
void loop() {
Serial.println("46.00 27.00 657");
delay(960); // ここをてきとーに1000にしてたら出なかった
}
l awkを通すと出力されない
l Debian系はmawkってやつらしい
l mawkの場合オプションと関数が必要だった
14
ステップ3ではまったこと2	
// ダメ
$ cat /dev/ttyACM0 | awk ’{print $0}’
# 沈黙
// キタコレ
$ cat /dev/ttyACM0 | awk -W interactive '{print $0; fflush()}’
46.00 27.00 657
46.00 27.00 657
l Arduinoの出力する改行コードがCRLFだった
l awkでおかしくなった(viで開いて^Mに気づいた)
15
ステップ3ではまったこと3	
// ダメ
$ cat /dev/ttyACM0 |
awk 'NF==3{print "{ "humidity":"" $1 "", "temparature":"" $2 "", "light":"" $3
""}” }’
"}"humidity":"46.00", "temparature":"27.00", "light":"657
// キタコレ
$ cat /dev/ttyACM0 | awk -W interactive '{sub(/r$/, ""); print $0; fflush()}' |
awk -W interactive 'NF==3{print "{ "humidity":"" $1 "", "temparature":"" $2 "",
"light":"" $3 ""}"; fflush() }' |
{ “humidity":"46.00", "temparature":"27.00", "light":"657” }
16
本日お話すること	
1. ラズパイの話
2. AWS側の話
3. まとめ
l AWS側の構成を作る
l DynamoDB作る(Stream設定込)
l DynamoDBを更新するLambdaを作る
l Lambdaを叩くAPI Gatewayを作る
l CloudWatchを更新するLambdaを作る
l DynamoDBStreamとLambdaを紐付ける
l どうせならAWSCLIで作る
l API GatewayはGUIで妥協した
17
ステップ4/9
l DynamoDBのテーブル作る
18
ステップ4の詳細	
$ cat dynamodb_sensor_table.json # 抜粋
{
"TableName": "Sensor",
"KeySchema": [
{"KeyType": "HASH”, "AttributeName": "clientIdHash”},
{"KeyType": "RANGE”, "AttributeName": "timestamp”}],
"StreamSpecification": {
"StreamEnabled": true, "StreamViewType": "NEW_AND_OLD_IMAGES”
}
}
$ aws dynamodb create-table --cli-input-json file://dynamodb_sensor_table.json
l DynamoDBを更新するLambdaを作る(抜粋)
19
ステップ4の詳細	
var params = {};
params.TableName = "Sensor";
params.Item = {
clientIdHash: clientIdHash,
timestamp: timestamp,
clientId: clientId,
humidity: humidity,
temparature: temparature,
light: light
};
dynamo.putItem(params, callback);
l API Gateway作る
l API作成
l リソース作成
l メソッド作成(POSTメソッド)
l APIキー設定(なんとなく)
l デプロイ
l http://docs.aws.amazon.com/ja_jp/apigateway/
latest/developerguide/getting-started-intro.html
20
ステップ4の詳細
l ラズパイからAPI Gatewayを試しにたたく
l curlでたたける(AWSCLIより軽い!)
21
ステップ5/9	
$ curl -H "Content-Type: application/json" 
-H "x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
-X POST -d '{}' https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/prod/data
l ラズパイからセンサーデータを送る
22
ステップ6/9	
$ cat /dev/ttyACM0 |
awk -W interactive '{sub(/r$/, ""); print $0; fflush()}' |
awk -W interactive 'NF==3{print "{ "humidity":"" $1 "", "temparature":"" $2 "", "light
":"" $3 ""}"; fflush() }' |
curl -H "Content-Type: application/json" 
-H "x-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
-X POST -d @- https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/prod/data
l ラズパイからセンサーデータを送る(結果)
23
ステップ6/9
l DynamoDB Stream-LambdaからCloudWatch更新
(抜粋)
24
ステップ7/9	
var params = {
MetricData: [
{
MetricName: 'Temparature’,
Timestamp: timestamp,
Value: temparature
}],
Namespace: ’RaspberryPiSensor’
};
cloudwatch.putMetricData(params, callback);
l LambdaとDynamoDB Streamのマッピング
25
ステップ8/9	
$ event_source_arn="arn:aws:dynamodb:us-west-2:999999999999:table/Sensor/stream/
2015-09-03T04:52:40.937"
$ function_name=”putSensorMetricData"
$ aws lambda create-event-source-mapping --function-name ${function_name} 
--event-source ${event_source_arn} 
--batch-size 1 
--starting-position TRIM_HORIZON
l CloudWatchで温度を確認する
26
ステップ9/9(ゴール!)
l CloudWatchで光度を確認する
27
ステップ9/9(ゴール!)
l API Gateway 0円
28
気になる費用(5日間程度)1
l Lambda 0円(一ヶ月使い続けると$0.30かかりそう)
29
気になる費用(5日間程度)2
l DynamoDB 0円
30
気になる費用(5日間程度)3
l CloudWatch 0円
31
気になる費用(5日間程度)4
32
本日お話すること	
1. ラズパイの話
2. AWS側の話
3. まとめ
33
まとめ	
l センサーデータのインフラにAPI Gateway+Lambda
を使うと手早く簡単に構築できる
l 費用は使った分だけ(無料枠で実質無料)
l センサーおもしろい!
l センサーデータの活用方法をまじめに考えよう
求む!
・AWSエンジニア
・iOSエンジニア
・Webエンジニア
ハンズラボは積極的に技術者採用中です。
Let's	
  work	
  together!	
  
Copyright © HANDS LAB INC. All rights reserved.
御清聴ありがとうございました。

More Related Content

PDF
フルマネージドのポイントシステム
PDF
東急ハンズを支える技術
PDF
AWS Mobile SDK利用時のテスト手法
PPTX
20170311 JAWSDAYS Lunch Session「東急ハンズのiPad POS「HandsPOS」と AWSの付き合い方」
PDF
基幹システムにAwsを利用してはいけない10の理由公開版
PDF
AWS 東急ハンズの事例 AWSサミット2013
PPTX
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
PDF
JAWS-UG 初心者支部 #4 東急ハンズのEC2の使いかた
フルマネージドのポイントシステム
東急ハンズを支える技術
AWS Mobile SDK利用時のテスト手法
20170311 JAWSDAYS Lunch Session「東急ハンズのiPad POS「HandsPOS」と AWSの付き合い方」
基幹システムにAwsを利用してはいけない10の理由公開版
AWS 東急ハンズの事例 AWSサミット2013
クラウドファースト時代のAWS活用事例と今後の展望 - AWS Cloud Storage & DB Day 2014
JAWS-UG 初心者支部 #4 東急ハンズのEC2の使いかた

What's hot (20)

PDF
AWSクラウドサービス勉強会 Day1:「クラウドサービス再定義」
PPTX
エンタープライズでもクラウドファースト! Amazon Web Servicesをフル活用する Developer Summit 2016
PPTX
管理統制もLambdaで!
PDF
reinvent2015 ctn osaki
PDF
インフォバーングループにおけるAWS活用事例5選
PDF
JAWS-DAYS 2015 / 北海道 x 農業 x クラウド
PPTX
クラウドインテグレーターのお仕事
PPTX
なぜ今AWSが選ばれているのか? クラウドが求められている本当の理由
PPTX
AWSを使って沖縄から世界へ (JAWS DAYS 2015 A-1 GP LT大会)
PDF
Web制作/SIerのためのAWS
PDF
AMIMOTO on AWS Market Place
PDF
アカウントのセキュリティ (第13回JAWS-UG札幌)
PDF
AWS ロボ in JAWSDAYS
PPTX
LambdaでBilling Alertを拡張してみた
PPTX
20140711 evf2014 hadoop_recommendmachinelearning
PPTX
グローバル戦略におけるクラウド活用のポイント - AWS Summit Tokyo 2014 Day 1 : Keynote
PDF
AWS前線、北上中! (AWS ジャパンツアー 2014 札幌)
PDF
2015年07月 夏サミ2015 クラウド時代のエンジニア像
PDF
クラウドがもたらすイノベーションプラットフォームとは
PDF
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
AWSクラウドサービス勉強会 Day1:「クラウドサービス再定義」
エンタープライズでもクラウドファースト! Amazon Web Servicesをフル活用する Developer Summit 2016
管理統制もLambdaで!
reinvent2015 ctn osaki
インフォバーングループにおけるAWS活用事例5選
JAWS-DAYS 2015 / 北海道 x 農業 x クラウド
クラウドインテグレーターのお仕事
なぜ今AWSが選ばれているのか? クラウドが求められている本当の理由
AWSを使って沖縄から世界へ (JAWS DAYS 2015 A-1 GP LT大会)
Web制作/SIerのためのAWS
AMIMOTO on AWS Market Place
アカウントのセキュリティ (第13回JAWS-UG札幌)
AWS ロボ in JAWSDAYS
LambdaでBilling Alertを拡張してみた
20140711 evf2014 hadoop_recommendmachinelearning
グローバル戦略におけるクラウド活用のポイント - AWS Summit Tokyo 2014 Day 1 : Keynote
AWS前線、北上中! (AWS ジャパンツアー 2014 札幌)
2015年07月 夏サミ2015 クラウド時代のエンジニア像
クラウドがもたらすイノベーションプラットフォームとは
モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
Ad

Viewers also liked (20)

PDF
ドローンの安全運転をささえるLambda
PDF
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
PDF
API Gatewayで re:Inventのセッション探し
PDF
クラウドネイティブ化する未来
PDF
AWS Blackbelt 2015シリーズ AWS Lambda
PDF
Jawsug chiba API Gateway
PDF
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
PDF
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
PDF
2015/04/01 AWS Blackbelt EC2
PPT
CloudSurance - We backup web application data
PDF
Lucy redes sociales myspace
PPT
Бренд-комьюнити от Sitko.Ru (Brand-Community of Sitko.Ru)
PPT
World Computer Congress Keynote
PDF
Privacy-Aware Data Management in Information Networks - SIGMOD 2011 Tutorial
PPT
Presentation 1112 for blog 2
PPT
Шобанов Константин "Боль и удовольствие в продажах"
PPSX
Oscars after - party
PDF
Nvidia GTC 2014 Talk
PDF
Constitution of bangladesh
ドローンの安全運転をささえるLambda
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
API Gatewayで re:Inventのセッション探し
クラウドネイティブ化する未来
AWS Blackbelt 2015シリーズ AWS Lambda
Jawsug chiba API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS初心者向けWebinar 失敗例を成功に変える AWSアンチパターンのご紹介
2015/04/01 AWS Blackbelt EC2
CloudSurance - We backup web application data
Lucy redes sociales myspace
Бренд-комьюнити от Sitko.Ru (Brand-Community of Sitko.Ru)
World Computer Congress Keynote
Privacy-Aware Data Management in Information Networks - SIGMOD 2011 Tutorial
Presentation 1112 for blog 2
Шобанов Константин "Боль и удовольствие в продажах"
Oscars after - party
Nvidia GTC 2014 Talk
Constitution of bangladesh
Ad

Similar to 20150908 jaws ug-chiba_lt (20)

PDF
20190827_AWS_Loft_LT
PPTX
[Jaws re:Mote2015]田舎ならt2インスタンスを使いこなせ!
PPTX
東北での導入事例にみるAWS活用方法
PDF
Hello Girl's World!!@女子エンジニアLT会 #dotsgirls
PPTX
190731 chalice
PDF
PHPからgoへの移行で分かったこと
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
PPTX
React way at_eight
PPTX
イノベーションエッグLt資料
PPTX
Amazon Machine Learning Meet-up with ハンズラボ テーマ説明
PDF
20200813 fin-jaws #14 オープニング渥美
PDF
20151202 jawsug osaka-lt
PPTX
Aws発表資料(dac) 20160721
PDF
Ipメッセージング勉強会
PDF
「トゥギャッターを支えるJS」In JSオジサン #5
PDF
スタートアップにjoinして1年間の変化を振り返る
PDF
ゼロから始めるモバイルアプリ開発 / 
 AWS Mobile Hubハンズオン 本編
PDF
LibreOfficeサポートビジネスを1年やってみました
PDF
オフライン行動を支えるメール配送管理 at サイタ
PDF
せっかちな私のAWS Lambda活用パターン
20190827_AWS_Loft_LT
[Jaws re:Mote2015]田舎ならt2インスタンスを使いこなせ!
東北での導入事例にみるAWS活用方法
Hello Girl's World!!@女子エンジニアLT会 #dotsgirls
190731 chalice
PHPからgoへの移行で分かったこと
Swift事情2014夏 ~ Swift入門 beta6対応
React way at_eight
イノベーションエッグLt資料
Amazon Machine Learning Meet-up with ハンズラボ テーマ説明
20200813 fin-jaws #14 オープニング渥美
20151202 jawsug osaka-lt
Aws発表資料(dac) 20160721
Ipメッセージング勉強会
「トゥギャッターを支えるJS」In JSオジサン #5
スタートアップにjoinして1年間の変化を振り返る
ゼロから始めるモバイルアプリ開発 / 
 AWS Mobile Hubハンズオン 本編
LibreOfficeサポートビジネスを1年やってみました
オフライン行動を支えるメール配送管理 at サイタ
せっかちな私のAWS Lambda活用パターン

20150908 jaws ug-chiba_lt