やりたいこと
社内研修の一環でIoTサービスを立ち上げています。
体重計からAWS IoT Coreに重さの情報を送り、それをDynamoDBのテーブルに格納するということをしたいです。
先輩@yuuuに教えていただいた内容を整理します。
実装!
Dynamo DBを作成する
まず、箱を準備します。
テーブルが作成できたら、IoT Coreのコンソール画面に移動します。
IoT Coreの証明書を作成する
安全性 > 証明書
と進みます。
1-click証明書作成を選択します。
有言実行。本当にワンクリックで証明書ができるので、ダウンロードします。
その下に「AWS IoTのルート CA をダウンロードする必要があります。」と書いてあるので、素直に従います。
ルート証明書 Root CA
別ページに遷移し、Amazon Root CA 1を開くと、証明書キーがブラウザに表示されるので、全部コピーします。
コマンドラインで下記のようにファイルを作成。
nano ~/Desktop/Root1CA1.pem
そこでキーをペーストしたら、ctr + x
=> y
=> Enter
で保存します。
IoT Core画面に戻って有効化を押す。
ポリシーの作成とアタッチ
証明書を渡したデバイスに対してIoT Coreへのアクセスを許可する。
デフォルトで出てくるARN(Resouce)のままだとうまくいか図。動作確認なので、とりま全部許可する設定の"*"
としました。
ポリシーが作成できたら、先ほど作った証明書にポリシーをアタッチします。
ACTのルールを書いていく(SQLちっく)
次に。IoT Coreが通信を受け取ったら、なんのアクションをさせるか?のアクション(ACT)を設定していきます。
DynamoDB向けのアクションは2つありますが、「DynamoDBテーブルの複数列にメッセージを分割する」の方が細かい設定不要でサクッとできるので、こちらを選択。
以上で、AWS側の設定は終了です!
MQTTBoxで動作確認
それでは、実際にデータをIoT Coreに送って、DynamoDBに転送されるか実験してみます。mockmockを使う手もありますが、まずは簡単に通信が確認できればいいので、MQTTBoxというサービスを使います。mockmockは次回。
- Topic to publish:
iot/topic
- Payload Type:JSONの入っているもの
- Payload:IoT Coreに送信したいデータ
右上の歯車マークを押して、詳細設定へ。
下記のように設定します。
- Protocol:mqtts / tls
- CA file:IoT CoreからDLしたRoot CAファイルを添付。
- Client certificate file:IoT CoreからDLした証明書を添付。
- Client key file:IoT CoreからDLしたプライベートキーを添付。
- Hos:AWS画面、
IoT Core > 設定
にあるカスタムエンドポイント
を入れる。
Saveを押してトップに戻ったら、Publishを押してテスト!
DynamoDBにデータが入りました!
地味に楽しい!
今回はとりま通信を確認したかったのでこれでOKですが、実際はIoTデバイス2台からIoT Coreに向けてデータが送信されるため、これでは心許ないです。また定期的にデータを送ったり、ランダムな値を送れるようにしてみたいです。そんな時はmockmockなので次回やってみたいと思います。
最後に
これは@yuuuさんからの手ほどきをまとめたものです。大感謝!
もし何かご指摘ありましたら、ぜひよろしくお願い申し上げます。