IoTHubのメッセージルーティングでblobsotrageにメッセージ保存
やりたいこと
IoTHubに来たメッセージをとりあえず生データとしてblobに保存したい
保存先をカスタムエンドポイントで指定したい
保存するときにルーティングクエリである程度フィルターして登録したい
カスタムエンドポイントの登録
ストレージアカウントとコンテナを選択したら、
どのようなディレクトリ構成、ファイル名でメッセージを保存するかを選べます。
フォーマットはAVROかjsonが選べます。
こんな階層にすると60分に一回メッセージをまとめて処理したいみたいな時に便利かと。
{iothub}/{YYYY}/{MM}/{DD}/{HH}/{mm}_{partition}
ちなみに、データをblobに書き込む頻度と、最大ファイルサイズが選べます。
ファイル数とファイルサイズで調整が必要です。
ルートの追加
エンドポイントは先ほど作成したカスタムエンドポイント。
データソースはデバイステレメトリのメッセージや、デバイスツインの変更イベントなどが選べます。
今回はD2Cメッセージを保存したいので、デバイステレメトリのメッセージを選択します。
そこで、フィルタールールとしてルーティングクエリを記載します。
デフォルトはtrueで、全部保存って感じです。
ちなみに、ルートの設定には上限があるみたいですが、100までいけるみたいです。
Basic および Standard SKU ハブには、100 個のルーティング クエリが含まれる場合があります。 無料の SKU ハブには、5 個のルーティング クエリを設定できます。
ルーティングクエリでできること
意外に情報がなかったので、上記のページに書いてある構文でフィルターできます。
デバイスIDにtestって含まれる場合だけ
CONTAINS($connectionDeviceId, 'test’)
デバイスIDがdeviceID1とdeviceID2だけ
$connectionDeviceId = 'deviceID1' OR $connectionDeviceId = 'deviceID2'
メッセージ送信時にプロパティを設定できるならPropertyの内容やBodyの内容も利用できます。
デバイスツインのメッセージだったら、tagにgroup: Aとか追加すれば、tagなどもフィルタできます。
Discussion