はじめに
AWS IoTルールを使って、Unix時刻のタイムスタンプがついているMQTTトピックを、ISO 8601形式(JST)のタイムスタンプに変換して、DynamoDBのソートキーに保存する方法を紹介する。基本的な方法は、公式チュートリアルを参照。ここでは、Unix時刻のタイムスタンプをISO形式に変換する方法を中心に説明する。
動作確認環境
- AWS
- IoT Core
- IoT Rules
- DynamoDB
前提
JSONオブジェクトに以下のようにUNIX時刻のタイムスタンプが含まれているMQTTトピックがデバイスから、AWS IoT CoreのBrokerに送られているとする。
{
"device_id": "000001"
"timestamp": "1736413662"
"temperature": "25"
}
方法
DynamoDBの設定
事前にデータを保存するためのDynamoDBテーブルを作成する。時刻でソートしたいので、DynamoDBのソートキーに、timestamp
を設定しておく。キー名は、MQTTトピックのタイムスタンプ(timestamp
)と同じにする。パーティションキーは、別途デバイスIDなど指定しておく。
IoTルールの設定
ルールアクションのソートキー、レンジキーのタイプ、レンジキーの値を以下のように設定する。
ポイント
レンジキーの値に、parse_time
関数を使って、MQTTトピックのUNIX時間のtimestamp
を、ISO 8601形式(JST)に変換する。変換式は以下のようになる。
${parse_time("yyyy-MM-dd'T'HH:mm:ssZZ", timestamp, 'Asia/Tokyo')}
DynamoDBに以下のように、timestamp
が保存されていれば成功。
まとめ
AWS IoTルールを使って、Unix時刻のタイムスタンプがついているMQTTトピックを、ISO 8601形式(JST)のタイムスタンプに変換して、DynamoDBのソートキーに保存する方法を紹介した。デバイスで良く利用されるUNIX時間は、直感的にわかりにくいので、DynamoDBへ保存する際に変換しておくと視認性が上がるので本方法が役立つ。
参考