【AWS IoTルールの基本 その5】メッセージをDynamoDBに保存する②

Pocket

こんにちは、Michaelです。
今回は、「AWS IoTルールの基本」の第5回として、前回に引き続きメッセージをDynamoDBに保存するルール設定を紹介します。
前回は「DynamoDBアクション」というメッセージを1カラムに格納するアクションを紹介しましたが、今回はメッセージのJSONをキーごとに別カラムに保存する「DynamoDBv2 アクション」を紹介します。

今回の構成

AWS IoTのトピック「test/pub」にPublishされたメッセージを、DynamoDBのテーブル「IoT_Device_Data」に保存します。
テーブル「IoT_Device_Data」は「client_id」、「timestamp」をそれぞれパーティションキー、ソートキーとしますが、メッセージにこれらのキーが存在しない場合を想定し、AWS IoT SQLクエリでメッセージにClientId、受信時刻を付加します。また、四則演算でケルビン温度を算出してテーブルの別々のカラムに保存します。

ルールアクションの設定

アクションとして「データベーステーブル (DynamoDBv2) の複数列にメッセージを分割する」を選択します。


設定内容は格納するDynamoDBテーブルのみとなります。
メッセージにDynamoDBテーブルのパーティションキー、ソートキーに対応するキーがない場合には、メッセージソースの設定でこれらを付加するクエリを設定する必要があります。

メッセージソースの設定

メッセージソースには以下のAWS IoT SQLクエリを設定します。
組み込み関数「clientid()」、「timestamp()」でClientId「client_id」と受信時刻「timestamp」を付加し、入力JSONの「temperature」キーに273.15を加算してケルビン温度「kelvin」を付加しています。

実行結果

MQTT.fxを送信デバイスとしてテストを実行してみます。
ClientIdに「device001」、Publish先トピックに「test/pub」を設定し、以下のようなセンサーデータをPublishします。


メッセージをPublishすると、DynamoDBのテーブルにデータが書き込まれていることが確認できました。
ClientId「client_id」と受信時刻「timestamp」、さらには四則演算により算出したケルビン温度「kelvin」が保存されていることがわかります。

[iot-06.png]

まとめ

DynamoDBv2アクションは、非JSONメッセージは扱えないものの、DynamoDBのスキーマをAWS IoT SQLで設定できるため、連携させるシステムに合わせてデータを保存したい場合に便利です。
AWS IoT SQLでデータ操作ができるため、DynamoDBアクション、DynamoDBv2アクションのいずれかでDynamoDBへのデータ保存は概ね問題なく行えます。しかし、Web APIからのデータを付加したいなど、より高度な操作が必要な場合には、Lambdaと連携させる必要があります。
次回は、AWS IoTをトリガーとしてLambdaと連携させるルール設定を紹介します。
お楽しみに!