仕事でAWS IOTを使って簡単なデモを作成しました。センサーから送信されたデータは、IOTからDynamoDBへ直接連携できる機能が用意されていたため、DynamoDBへ登録することにしました。今回はその手順を残しておきます。
手順(概要)
1.テーブル作成
2. AWS IOTの設定
3. 動作確認
1.テーブル作成
AWS IOT連携する場合はソートキーが必須になるのでソートキーも作成してください。
2.AWS IOTの設定
①thingの作成
AWS IOT上で管理するデバイスの名前を作成します。
②ruleの作成
IOTで受け取ったデータをどのように処理するかのルールを作成します。
Create a ruleをクリック
③証明書の取得
認証用の証明書を取得します
秘密鍵、証明書等をダウンロードします。
また使いたいSDKを選択し、「Confirm & start connect」を選択します。
以下のページが表示されSDKのダウンロードができます。
また、下記ページからroot証明書をダウンロードします。
https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem
3. 動作確認
動作確認はnodeで1回だけpublishするサンプルを作成しました。テストだけならaws cliでも確認可能です。
aws-iot-device-sdk-js/examples以下に適当な名前で下記プログラムを作成します。
また同じディレクトリにcertsディレクトリを作成し上記で取得した証明書を格納しておきます
const deviceModule = require('..').device; const cmdLineProcess = require('./lib/cmdline'); const device = deviceModule({ keyPath: './certs/private.pem.key', certPath: './certs/certificate.pem.crt', caPath: './certs/root-CA.crt', clientId: '1', region: 'ap-northeast-1', reconnectPeriod:10 }); var thingName = 'iot_test' device.subscribe(thingName); var put_data = {}; var data = new Array(); // データ送信 var now = new Date(); var yyyymmdd = now.getFullYear()+ ( "0"+( now.getMonth()+1 ) ).slice(-2)+ ( "0"+now.getDate() ).slice(-2); var hhmmss = ("0" + now.getHours()).slice(-2) + ("0" + now.getMinutes()).slice(-2) + ("0" + now.getSeconds()).slice(-2) + ("00" + now.getMilliseconds()).slice(-3); put_data = { date: yyyymmdd, time : hhmmss, value :Math.floor( Math.random() * 11 ) }; device.publish(thingName, JSON.stringify(put_data)); console.log( JSON.stringify(put_data)); console.log( 'publish');
次のコマンドで実行します。
node put_data.js
publishしたデータ送信データが登録されましたね。
今回初めてDynamoDBを使ったのでよく分からず、IOTの設定のところでつまづきました。
また、ルール作成のところでPayload fieldにDynamoに登録したいフィールドを入力しましたが、
全項目が登録されてしまい特定のフィールドだけ選択して登録ということが出来ませんでした。ここはもう少し調べてみたいと思います。