はじめに
9/13 (金) 18:00-21:00 知っ得ハンズオン-はじめてのIoT ~AWS IoT Core~に参加しましたので、質問等をメモしました。
プログラム
最初の挨拶
亀田 治伸(プロダクトマーケティング, エバンジェリスト)さんから趣旨説明。
AWS IoT の日本語チュートリアルは Raspberry Pi に SDK をインストールするところから始まるのでハードルが高いとよく言われる。今日はデバイスはダミーを使用して、IoT Core のハンズオンを実施する。
AWS IoT には様々な機能があるが、今日は図の真ん中のサービスを使う。
IoT Device Management はデバイスのグループ管理をしてくれる。今まではSDKなどでデバイスを管理するDBを作っておく必要があった。
IoT Device Defender はデバイスの乗っ取りを対策する。
AWS IoT には大きく二つの利用用途がある。
- デバイスデータの可視化・故障予知・異常検知
- ファームのアップデート・リモート機器制御
AWS IoT を データ収集・配信サービスである Amazon Kinesis と比較してみる。
サービス | プロトコル | 認証 | 通信 |
---|---|---|---|
Amazon Kinesis | HTTP | 専用ライブラリ | データストリーム |
AWS IoT | HTTP, WebSocket, MQTT | 証明書, SigV4, カスタム認証トーク, Cognitoz(MQTTの場合は証明書が必須) | 双方向制御 |
AWS IoT Core ではQoS0とQoS1をサポート。
証明書の有効期限は2050年。期限が切れるまで長いのでアクセス制御をポリシーで設定する。
このハンズオンではデバイスを用いず、VPS相当のサービスであるAmazon LightsailにAWS Cloud9及びAWS IoT SDKをインストールしてダミーのデバイスプログラムを用意する。Light Sail ではデフォルト VPC のみに VPC Peering の通信が可能。下り通信が1TBまで価格に含まれている(3.5ドル)のでお得。同じことをEC2 でやると 116 ドルくらいかかる。
ハンズオン
ハンズオンは手順書を配布して各自自習、AWSの方が質問等を受け付けるという形式でした。
やったことは下記です。
- Light Sail でサーバを立て、Cloud9からsshで接続。AWS IoT SDKをインストールしてダミーデバイスのプログラムを実行する。
- IoT Core を設定し、S3にデータを格納する。
- Shadowを使ってデバイスの設定を変更する。
下記は自分がした質問です。
S3保存の際のキーについて
S3のキーはyyyymmddの日付をつけられる?UNIXTIMEにしたくない。
AWS IoT の関数を利用すれば可能。
参考:https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-sql-functions.html
ちなみにキーの設定を下記のようにすれば、yyyyMMddのフォルダに名前がHHmmssのファイルが生成される。
${parse_time("yyyyMMdd", timestamp(), "UTC")}/${parse_time("HHmmss", timestamp(), "UTC")}
Kinesisの使用について
Kinesisは使用したほうが良い?
S3やDynamoDBに入れるだけのときでもKinesisを使用したほうが良い。
- Kinesisでストリーミングデータをバルク加工することで、後ろに控えるLambdaの起動数や処理回数を減らすことができる。
- Kinesisはストレージを持っているので、大量データが来た時でもバッファリングすることができ、データのロストを防ぐことができる。
- メッセージブローカーとして、サブスクライブ側の好きなタイミングでのデータ配信ができる。
証明書の運用について
証明書は1デバイス1証明書が良い?
1デバイス1証明書を推奨している。
理想的には、最初に権限が制限された共通の証明書をインストールしておき、その証明書で新しい証明書の発行を実施、各デバイスに別々の証明書をインストールしてデータの送受信を行うようにする。
参考:AWS IoT Coreでブートストラップ証明書を使ったプロビジョニング
おわりに
AWS IoT めっちゃ簡単で楽しかったです。
ただ、ハンズオンではデバイスの管理が大変そうだと感じたので、IoT Device Management を使って管理をできるようにしたいですね。