SORACOM Funnelで手抜きIoTプラットフォーム #ssmjp

713 views

Published on

2016/09/16
#ssmjp 2016.09
SORACOM Funnelで手抜きIoTプラットフォーム

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
713
On SlideShare
0
From Embeds
0
Number of Embeds
40
Actions
Shares
0
Downloads
2
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

SORACOM Funnelで手抜きIoTプラットフォーム #ssmjp

  1. 1. SORACOM Funnelで 手抜きIoTプラットフォーム #ssmjp 2016/09 Aki@nekoruri
  2. 2. で、誰? • あき • ねこるり etc.
  3. 3. 最近はIoTっぽいBLEデバイス作ってます
  4. 4. みんなだいすきSORACOM • SORACOM Air • IoT/M2M時代の(ほぼ)完全従量課金型MVNO • 契約事務手数料 954円 • 1日10円 +昼上り0.2~0.3円/MB +昼下り0.6円~1円/MB +夜上下0.2円/MB • 世界120カ国で利用可能 • ドコモのL2 MVNOの上にAWSベースのソフトウェア交換機を独自実装 • APIで制御して事業者がSIMを再販できる
  5. 5. そんなことはどうでもいい • 安けりゃいいなら格安SIMの上にVPNでもしとけ
  6. 6. 開発者にとってのSORACOMの嬉しさ • セキュリティのオフロード • 機能のオフロード
  7. 7. セキュリティのオフロード • そもそも携帯端末は安全に識別されている • SIMは最も身近なICカード(国際規格 ISO/IEC 7816) • 耐タンパ性(物理攻撃耐性)のあるセキュアなマイコン • 電話回線の識別・認証に必要なセキュアな暗号処理を担当 SORACOMで実現する強固なセキュリティ http://www.slideshare.net/SORACOM/connectedt4soracom
  8. 8. セキュリティのオフロード • 認証に必要な情報を端末自身に持たせたくない • 端末は盗まれたりするので個別に識別が必要 • 端末ごとの秘密鍵を適切に個別配布しないといけない • 例)スマートメーター全国で7000万台 • 通信回線のSIMはどこかで必ず挿す • SIMで全てを識別できれば良いのでは • 端末自身には何の情報を持たせずに済む
  9. 9. セキュリティのオフロード • SORACOM Beam • 秘密鍵をSORACOM側で管理、外部と暗号化通信 • 接続先もSORACOM側で管理、端末は一つのエンドポイントに送信 • HTTP/MQTT/TCP/UDP ⇒ HTTPS/MQTTS/TCPS • SORACOM Endorse • SORACOMがIdPとして、安全なトークンを発行 • JWT(JSON Web Token)なので使いやすい • SORACOM経由では鍵の発行処理だけ、データは別の経路でも構わない • SORACOM Gate • 個別VPG(VPCみたいなの)を用意して、L2-VPNで端末に接続
  10. 10. 機能のオフロード • 開発コストの大幅な削減 • 接続先やクレデンシャルの管理・配布コスト • シンプルなデータ投入 • クラウド側へのデータ投入時の再送など(スロットリング対策) • SORACOM Funnel • UDP/TCP/HTTPでSORACOMのエンドポイントに投げる • クラウドサービスへのデータ転送をSORACOM側がやってくれる • クレデンシャルや接続先情報もSORACOM側が持つ
  11. 11. SORACOM Funnel • 端的に言って神サービス • curlとかあればそれでKinesisに投げ込める • Cでlibcurlで書いても20行いかない • JSON作るの含めても40行くらい • 端末上でAWSライブラリとか直接触らなくて良いしAzureも試せる • 一応まだPublic BetaだけどPublicなので誰でももう使える!
  12. 12. なげる $ curl -X POST http://funnel.soracom.io ¥ -H Content-Type:application/json ¥ -d '{"foo":"bar"}'
  13. 13. Kinesis Streams経由でとどく { "operatorId": "OP9999999999", "timestamp": 1473322750825, (省略) "payloads": { "foo": "bar" }, "imsi": "440000000000000" }
  14. 14. AWS Lambdaでなんかやる const es = require('event-stream'); const KSL = require('kinesis-stream-lambda'); exports.handle = function(event, context, callback) { const stream = KSL.reader(event, { isAgg: false }); stream.on('end', function() { callback(null, {}); }); stream.on('error', function(err) { context.fail(err); }); stream.pipe(KSL.parseJSON({ expandArray: false })) .pipe(es.map(function(data, cb) { console.log('processing event: %j', data); ※ なんかやる })); };
  15. 15. あとはご自由に • 夢がひろがりんぐ • とりあえずS3になげる • DynamoDBに投げる • BigQueryに投げる • バッチサイズ100件とかでも200msとかで十分捌けるレベル • 困ったらKinesis Streamsのシャード数を増やせば良い • いわゆる「IoTプラットフォーム」のデータ層がこれですぐ作れる • データ量多くてもSORACOMが再送制御などやってくれるっぽい
  16. 16. 遅延だけで ちゃんと届いてる =きちんと再送!
  17. 17. 懺悔 • もしかして:自分 • 検証作業で、N倍界王拳したセンサーデータを大量に送信 ※ 秒間数十件程度 • 徐々に取り出すデータが遅れていくのでおかしいとは思っていた • Kinesisと合わせ技で、どこの問題か切り分けできていなかった • 最大で20時間以上の遅延
  18. 18. 受信側Kinesis Stramsの転送件数 青:SORACOMからの受信 橙:こちら側の取り出し件数
  19. 19. あっ……(察し) 受信側Kinesis Stramsの転送件数 青:SORACOMからの受信 橙:こちら側の取り出し件数
  20. 20. 念力デバッグ • PutRecordをPutRecordsで複数件登録にしたっぽい
  21. 21. 得られた知見 • 投げるの楽なのでついうっかり投げ過ぎちゃう:;(∩´﹏`∩);: • Public Betaのサービスをいじめてはいけない • 中身の修正が必要なはずなのにすぐ対応されてすごい • 検知: 09/14 12:54 JST • 改善連絡: 09/14 15:37 JST • 解決: 09/14 17:21 JST
  22. 22. まとめ • SORACOMすごい • 開発者を楽に(かつセキュアに)する様々な仕組み • SORACOM Funnelやばいすごい楽 • 修正早い • 株式会社WHEREではエンジニアを募集中です! • SORACOMを一緒にいじめたい人 • AWSとかAzureとかでサーバレスアーキテクチャしたい人 • EC2建てたら負けだと思っている人 • 必要なら生のCとかでも辞さない人

×