📂

IoTHubのメッセージルーティングでblobsotrageにメッセージ保存

2024/01/18に公開

やりたいこと

IoTHubに来たメッセージをとりあえず生データとしてblobに保存したい
保存先をカスタムエンドポイントで指定したい
保存するときにルーティングクエリである程度フィルターして登録したい

カスタムエンドポイントの登録

ストレージアカウントとコンテナを選択したら、
どのようなディレクトリ構成、ファイル名でメッセージを保存するかを選べます。
フォーマットはAVROかjsonが選べます。

こんな階層にすると60分に一回メッセージをまとめて処理したいみたいな時に便利かと。
{iothub}/{YYYY}/{MM}/{DD}/{HH}/{mm}_{partition}

ちなみに、データをblobに書き込む頻度と、最大ファイルサイズが選べます。
ファイル数とファイルサイズで調整が必要です。

ルートの追加

エンドポイントは先ほど作成したカスタムエンドポイント。

データソースはデバイステレメトリのメッセージや、デバイスツインの変更イベントなどが選べます。

今回はD2Cメッセージを保存したいので、デバイステレメトリのメッセージを選択します。

そこで、フィルタールールとしてルーティングクエリを記載します。

デフォルトはtrueで、全部保存って感じです。

ちなみに、ルートの設定には上限があるみたいですが、100までいけるみたいです。

Basic および Standard SKU ハブには、100 個のルーティング クエリが含まれる場合があります。 無料の SKU ハブには、5 個のルーティング クエリを設定できます。

ルーティングクエリでできること

https://learn.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-query-language

意外に情報がなかったので、上記のページに書いてある構文でフィルターできます。

デバイスIDにtestって含まれる場合だけ

CONTAINS($connectionDeviceId, 'test’)

デバイスIDがdeviceID1とdeviceID2だけ

$connectionDeviceId = 'deviceID1' OR $connectionDeviceId = 'deviceID2'

メッセージ送信時にプロパティを設定できるならPropertyの内容やBodyの内容も利用できます。

デバイスツインのメッセージだったら、tagにgroup: Aとか追加すれば、tagなどもフィルタできます。

ヘッドウォータース

Discussion