Timestreamのディメンジョンを持ってくるためのAWS IoT Core SQLパターン5つ

2020.10.12

ども、ゲストのソラコム大瀧です。
マネージドの時系列データベースサービスAmazon Timestream、皆さん触ってますか?私はもっぱらIoT用途で検証しているところですが、Timestreamの中でも重要な構成要素のひとつがレコードの属性情報にあたるディメンジョンです。ディメンジョンを適切に含めることで、Timestreamの様々な検索や分析処理に役立つメタデータとして活用できます。本ブログでは、データ投入元としてAWS IoT Coreを利用する場合にセットできるディメンジョン5パターンとその使い分けをご紹介します。

AWS IoT Coreで設定できるTimestreamのディメンジョン

AWS IoT Coreでは、TimestreamアクションとしてTimesream連携を定義します。アクションのパラメータとしてディメンジョンを定義し、その値にはAWS IoT Coreのルールに使用するIoT Core SQLのステートメントが記述できます。そこでディメンジョンに入れる値に使えそうなステートメントをピックアップしていきます。

1. 固定値

任意の文字列を指定します。IoT Coreルールごとに異なるディメンジョンを持たせるために使えますが、汎用性はあまりありません。

2. トピック名

トピック名を参照する topic() 関数を指定します。トピック名はデバイスが接続時に指定するほか、他のトピックのメッセージを Republish アクションで転送されてくる場合があります。トピック名は階層構造からデバイスを束ねるグループ名などがトピック名に含まれる場合があり、ディメンジョン指定に上手く当てはまることがあるでしょう。一方でAWS側でのデバイスと属性情報の管理は難しいため、デバイスの実装に依存します。

3. ペイロード参照

デバイスから送信されるメッセージ本体(ペイロード)の要素を ${要素のキー} で参照します。自由度の高い仕組みであり、デバイスからのデータにはグループ名以外にも様々な属性情報が含まれる場合にディメンジョンに設定することで上手く活用できるでしょう。ただ、メッセージ本体もデバイス由来のデータのためデバイス実装の依存度が高く、AWS側で属性情報を管理するのにはあまり向きません。

4. DynamoDB参照

Amazon DynamoDBの getItem API をコールして値を取得できる get_dynamodb() 関数を指定します。DynamoDBはデータ増加に対応できるスケール性と高い耐久性をもつNoSQLデータベースですので、デバイスと属性情報を保存するのに適していると言えます。サーバーレス構成のWebアプリケーションと組み合わせて属性情報を管理する仕組みを作ることができるでしょう。

5. Lambda関数呼び出し

AWS Lambda関数を呼び出して返り値を得る aws_lambda() 関数を指定します。Lambda関数の開発とメンテナンスが必要ですが汎用な処理が記述できるため、RDSなどのデータベースやS3にあるファイルなど、属性情報が既になんらかの仕組みで管理されている場合にそれらからスマートに取得する手段として活用できるでしょう。

まとめ

Timestreamのディメンジョンを持ってくるためのAWS IoT Core SQLパターン5つをご紹介しました。それぞれメリットとデメリットがあると思いますので、属性情報をどこで管理するのかに合わせて適切なものを選ぶのが良いと思います。

参考URL