【レポート】セルフペースハンズオン AWS IoTの基礎~AWS IoT Core~ で、ついにやっとIoTデビュー! #AWSSummit
AWS IoTとりあえず触ってみたいけど、いろいろサービスがありすぎてわからん!いったいどこから手をつけたらいいの??という人にぴったりのハンズオンセッションでした! 私もちょうどAWS IoTのチュートリアルを先日やってみたのですが、日本語版のチュートリアルは機械翻訳の精度が不安定だったり環境依存の問題にぶち当たったりなど、なかなかうまく進められていなかったので、こういうハンズオンはとても助かります。 セッション動画では、AWS IoTをとりまくそれぞれのサービスの役割や、アーキテクチャが俯瞰的に説明されているので、ハンズオンを実際にやる前に見ておくと理解が進みやすいです。 私もこの動画のおかげでハンズオン中も迷子にならずにすみました。
実際のハンズオンはこちらのリンクに画像つきの手順があるので、こちらを見て実際にトライしていただくとして、このブログでは動画セッションの内容をまとめます。
では行ってみましょう!
動画&資料
セッション動画と資料のリンクはこちらです
セッション概要
このセッションでは AWS が提供するIoTサービス群のコアコンポーネントとなる AWS IoT Core を用いて、 MQTT クライアントの構築と接続、メッセージベースのイベント作成、クラウドからデバイスのコントロール等、基本的な機能を体験いただきます。IoT のシステム構築を検討中の方に最適なシナリオです。
AWS IoT アーキテクチャの説明
AWS IoTアーキテクチャは、大きくわけて3つのサービス群で成り立っています
- Control services
- Data services
- Device software
Control services
通信を制御するサービス
- IoT Core
- AWS IoTのメインとなるサービス
- デバイスの通信を管理する
- 今回のハンズオンで実際に触っていくサービス
- IoT Core以外
- IoT Coreが受け付ける通信をもとに、デバイスがいつもと違う挙動をしていないかをチェックしたり、デバイスに対してOTA(On the air)でアップデートを適用していくなどの処理を行うことができる
Data services
AWS IoTが受け取ったデータを扱うサービス
- データの分析を行ったり、通信の中を読み取って他のサービスを起動するなどの処理を行うことが可能
Device software
クラウドの外側のデバイス側(エッジ側)のサービス
- AWS側で定期的にバージョンアップされたプログラムを、デバイス側に送信する等(IoT Greengrassの機能として提供)
- リアルタイムOS(FreeRTOS)
AWS IoT Coreの説明
主に2つの利用用途
- データ収集
- デバイスの数をスケールしても追加のクラウドの投資が必要なく、通信量で課金される
- リモート制御
- クラウド側でデバイス側の設定を更新し、デバイス側に反映させることが可能
AWS IoT Core と Amazon Kinesisの違い
AWS IoT Core | Amazon Kinesis | |
---|---|---|
プロトコル | HTTP,WebSocket,MQTT | HTTP |
Client側の認証 | 証明証の発行が必須 (AWS IoTが電子認証局の仕組みを持っている) |
専用ライブラリにより認証 |
通信 | 双方向制御 | データ受信に特化 |
コスト効率 | ○ | ◎ |
ベストプラクティス構成例
- AWS IoT と AWS S3 の間に Amazon kinesis を挟む
- AWS IoT Coreは、通信単位で一つのファイルとしてS3に保存ため、デバイスや通信が増えるとファイル数が膨大になる
- Amazon Kinesis の場合、デバイスから送信されてくる通信を一つのファイルに集約できる
AWS IoT Coreの機能
AWS IoT Coreでは、図にあるように4つの機能で通信を制御します。
- 認証とアクセス許可
- メッセージブローカー
- ルールエンジン
- デバイスシャドウ
認証とアクセス許可
- デバイス単位で細かく設定することができる
- レジストリにより、デバイスと電子証明書の紐付けを行う
- MQTTの場合、電子証明書が実質必須となる
- AWS IoT Coreが中に電子認証局の機能を持っているので、デバイスごとに電子証明証を発行できる
- ハンズオンでは手作業で証明証を発行する
- 実際の工場とかだと手作業で発行したりしていられないので、はじめての特定の認証識別子のデバイスアクセス時に、リアルタイムで電子証明書を発行して組み込む機能もある
認証が通ったら、メッセージブローカー
- MQTTまたはHTTP
- 今回のハンズオンではMQTTを使用する
- MQTT QoS
- QoS=0 (ハンズオンではこちらを選択)
- ベストエフォート型
- メッセージの到達が保証されていない
- 通信の到着報告がないので、オーバーヘッドが少ない
- QoS=1
- 保証型
- 確認が戻ってこなかった場合、何度も通信を送る
- 通信の到着報告が発生するので、オーバーヘッドが大きい
- QoS=0 (ハンズオンではこちらを選択)
ルールエンジン
- デバイスから送信されてきたデータの中身に対してSQLを発行
- SQLの条件に合致していたら、AWSの各サービスに連携
- 管理者に連携したり、ストレージに格納したり、機械学習に連携したりすることが可能
デバイスシャドウ
- 双方向制御を実現
- デバイスから上がってくるたびに、それをデバイスの最新状態として、レジストリと連携してデバイスごとに最新の状態を管理
- クラウド側でデバイスシャドウを書き換えると、デバイスがオンラインになったタイミングでデータがデバイスに反映される
- 実装例としては以下の通り
- スマホアプリによりシャドウを更新して、エアコンのON/OFF
- パッチ適応など
感想
ダミーデバイスから通信データを送信するところから、逆にクラウド上のAWS IoTの設定変更を行うことでデバイス側に設定変更を反映させるという、双方向の制御を一通り体験することができました。また、ルールを設定してデバイスからの通信データの中身を見てS3にデータを格納するところまでをカバーしていました。
AWS IoTをとりまく一連のサービスを連携させることができたので、初心者に優しいとても充実したハンズオンだったと思います。
また、IDEとしてCloud9を使用しているので、ローカルにツール類のインストールが一切不要なのもうれしいポイントでした。
AWS IoTを使ったサービスのイメージを掴むために、ぜひご活用ください!