先日、「知っ得ハンズオン はじめてのIoT AWS IoT Core」というAWSのハンズオンに参加してきましたので、そのときのポイントをメモっておきます。
座学セッション
AWSのIoTサービスについてのお話がありました。
詳しくはこちらの方がレポートしてくれています。
ハンズオン
資料を見ながらひたすら写経(とは言わないかw)をしました。
以下、個人的なポイントだけ抜粋。
Raspberry Piを使わない
AWS IoT CoreのチュートリアルではRaspberry Piをエッジデバイスとして話が進んでいくそうですが、そこが敷居が高いポイントになっているとのことで、今回はインスタンスを立ち上げて通信することになりました。
(ラズパイだって、ただのLinuxマシンだしね ^^;)
具体的にはAmazon Lightsailを起動し、そこでCloud9を動かし、AWS IoT SDKを呼び出すことで代用します。
ちなみにCloud9をLightsail上で動かす理由は、EC2よりも安い(下りの通信)からだそうです。
Amazon Lightsailの設定
VPS相当のサービスであるLihgtsailを、Amazon Linux+Node.jsで起動します。
Cloud9の設定
外部サーバ(Lightsail)にインストールします。
Lighjtsailで立ち上げたインスタンスのIPアドレスとホスト名を指定して、SSHでアクセスできるようにします。
Cloud9で動作するクライアントアプリはPythonコードなので、Pythonをインストールしておきます。
AWS IoT クライアントの設定
まずAWS IoT Coreと通信を行うためのセキュリティポリシーを作成します。
次にモノ(いわゆる「Things」)を登録します。
ここで証明書を発行し、モノ(今回はCloud9)に配置します。このとき、証明書の有効化を忘れずに。
これらの証明書は、Cloud9からメッセージを送る際に使用します。
メッセージの送信
Cloud9のクライアントアプリを実行し、AWS IoT SDKを介してAWS IoT Coreと通信します。
その際にAWS IoT CoreのエンドポイントのURL(メッセージ送り先)が必要になります。
また送られてきたメッセージは、AWS IoT Coreの「テスト」で監視できます。
エッジ側の設定変更はデバイスシャドウを使う
エッジ側(今回はCloud9)の設定は、AWS IoT Coreから直接エッジ側へ通信を送って制御するのではなく、間にデバイスシャドウというJSONファイルを介して行います。
AWS IoT Coreからはデバイスシャドウ(JSON)を更新し、エッジ側はそのデバイスシャドウ(JSON)を見に行って、現在の設定と違っていれば直すということをします。
つまり、疎結合となります。
メッセージ受信に対応した動作はひとつ
AWS IoT Coreは、エッジ側からメッセージを受け取ると、ひとつだけアクションを起こすことができます。
そのアクションは、SQLでトリガーを記述し、連携先のサービスに対してメッセージを送ったりします。
感想
駆け足で、やっている内容を理解するところまではできていませんが、何度か繰り返したり、あれやこれやをいじったりしていけば、自然と理解できるのではないかと思っています。
次はちゃんとラズパイ等とつなぎたいと思います。
おまけ
AWSのハンズオンに参加すると、だいたいクーポンコードがもらえます。
$25ぐらいが多いのですが、結構使えてお得です。
(有効期限があります)