Azure Event Grid での MQTT メッセージのルーティング
Event Grid を使用すると、MQTT メッセージを Azure サービスまたは Webhook にルーティングして、さらに処理することができます。 その結果、特にデータ分析、ストレージ、視覚化などのユース ケースにおいて IoT データを使用して、エンド ツー エンドのソリューションを構築できます。
ルーティング機能を使用するにはどうすればよいですか?
クライアントから Azure サービスまたはカスタム エンドポイントにメッセージをルーティングすると、このデータの利点を最大限に活用できます。 この機能を利用する多くのユース ケースの一部を次に示します。
- データ分析: クライアントからルーティングされたメッセージを抽出して分析し、ソリューションを最適化します。 たとえば、マシンのテレメトリを分析して、障害が発生する前にメンテナンスをスケジュールするタイミングを予測し、遅延やさらなる損害を回避します。
- サーバーレス アプリケーション: クライアントからルーティングされたメッセージに基づいてサーバーレス関数をトリガーします。 たとえば、モーション センサーがモーションを検出した場合は、対処できるようにセキュリティ担当者に通知を送信します。
- データの可視化: クライアントからルーティングされたデータを可視化して、データを簡単に表現して理解し、傾向や外れ値を強調表示します。
ルーティング構成:
ルーティング構成を使用すると、クライアントから Event Grid 名前空間トピックまたは Event Grid カスタム トピックにすべての MQTT メッセージを送信することができます。 メッセージがトピックに追加されると、トピックからのメッセージを使用するようにイベント サブスクリプションを構成できます。 次の大まかな手順を使用して、この構成を実現します。
- ルーティング先としての名前空間トピック:
- すべての MQTT メッセージがルーティングされる Event Grid 名前空間トピックを作成します。
- プッシュの種類のイベント サブスクリプションを作成し、これらのメッセージを、サポート対象 Azure サービスのいずれかにルーティングするか、カスタム Webhook またはキューの種類のイベント サブスクリプションにルーティングしてアプリケーションを介して名前空間トピックから直接メッセージをプルします。
- 最初の手順で作成したトピックを参照して、ルーティング構成を設定します。
- ルーティング先としてのカスタム トピック:
- すべての MQTT メッセージがルーティングされる Event Grid カスタム トピックを作成します。 このトピックは、ルーティング用の Event Grid カスタム トピックの要件を満たす必要があります。
- Event Grid イベント サブスクリプションを作成して、これらのメッセージをサポートされている Azure サービスまたはカスタム エンドポイントのいずれかにルーティングします。
- 最初の手順で作成したトピックを参照して、ルーティング構成を設定します。
Note
名前空間でパブリック ネットワーク アクセスを無効にすると、MQTT ルーティングが失敗します。
ルーティング先としての名前空間トピックとカスタム トピックの違い
次の表は、ルーティング先としての名前空間トピックとカスタム トピックの違いを示しています。 各 Event Grid リソースに含まれるクォータと制限の詳細な内訳については、クォータと制限に関するページを参照してください。
比較のポイント | 名前空間トピック | カスタム トピック |
---|---|---|
スループット | 高、最大 40 MB/秒 (イングレス) および 80 MB/秒 (エグレス) | 低、最大 5 MB/秒 (イングレスとエグレス) |
プル配信 | はい | |
Event Hubs へのプッシュ配信 | はい | はい |
Azure サービス (Functions、Webhook、Service Bus のキューとトピック、Relay ハイブリッド接続、ストレージ キュー) へのプッシュ配信 | はい | |
メッセージの保持期間 | 7 日 | 1 日 |
ロールの割り当ての要件 | MQTT ブローカーと名前空間トピックは同じ名前空間の下にあるため、必要ありません | MQTT ブローカー機能をホストする名前空間とカスタム トピックは異なるリソースであるため、必要です |
ルーティング用の Event Grid カスタム トピックの要件
ルーティングに使用される Event Grid カスタム トピックは、次の要件を満たす必要があります。
- クラウド イベント スキーマ v1.0 を使用するように設定する必要があります
- 名前空間と同じリージョンに存在する必要があります。
- ルーティング構成を適用する前に、"Event Grid データ送信者" ロールを自分または Event Grid カスタム トピックで選択したマネージド ID に割り当てる必要があります。
- ポータルで、作成した Event Grid トピック リソースに移動します。
- [アクセス制御 (IAM)] メニュー項目で、[ロールの割り当ての追加] を選択します。
- [ロール] タブで、[Event Grid データ送信者] を選択し、[次へ] を選択します。
- [メンバー] タブで [メンバーを選択する] を選択し、表示される [選択] ボックスに AD ユーザー名を入力します (例: user@contoso.com)。
- AD ユーザー名を選択し、[レビューと割り当て] を選択します
Azure portal の構成
API ポータルを構成するには、次の手順に従います。
- Azure portal でご使用の名前空間に移動します。
- [ルーティング] で、[ルーティングを有効にする] をオンにします
- [トピックの種類] で、[名前空間トピック] または [カスタム トピック] を選択します
- [トピック] で、すべての MQTT メッセージのルーティング先である、作成したトピックを選択します。
- カスタム トピックの場合、一覧には、ルーティングにおける Event Grid カスタム トピックの要件を満たすトピックのみが表示されます
- カスタム トピックが選択されている場合は、[配信用のマネージド ID] セクションが表示されます。 MQTT メッセージをカスタム トピックに配信するときに MQTT ブローカーの認証に使用する ID に対して、次のいずれかのオプションを選択します。
- なし: この場合は、カスタム トピックで "Event Grid データ送信者" ロールを自分に割り当てる必要があります。
- システム割り当て ID: この場合は、前提条件として名前空間でシステム割り当て ID を有効にし、カスタム トピックのシステム割り当て ID に "EventGrid データ送信者" ロールを割り当てる必要があります。
- ユーザー割り当て ID: この場合は、前提条件として名前空間でユーザー割り当て ID を有効にし、カスタム トピックの選択済み ID に "EventGrid データ送信者" ロールを割り当てる必要があります。
- ユーザー割り当て ID が選択されている場合は、ドロップダウンが表示され、目的の ID を選択できます。
- 適用を選択します。
エンリッチメントの構成手順については、エンリッチメントのポータル構成に関する記事を参照してください。
Azure CLI の構成
az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --api-version 2023-06-01-preview --properties @./resources/NS.json
NS.json
"properties": {
"inputSchema": "CloudEventSchemaV1_0",
"topicSpacesConfiguration": {
"state": "Enabled",
"routeTopicResourceId": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/topics/<Event Grid topic name>",
"routingIdentityInfo": {
"type": "UserAssigned", //Allowed values: None, SystemAssigned, UserAssigned
"userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>" //needed only if UserAssigned was the value of type
},
}
}
エンリッチメントの構成手順については、エンリッチメントの CLI 構成に関する記事を参照してください。
MQTT メッセージ ルーティングの動作
Event Grid では、MQTT メッセージをカスタム トピックにルーティングする際、各メッセージを少なくとも 1 回はすぐに配信しようとするため、永続的な配信が提供されます。 エラーが発生した場合、Event Grid で配信が再試行されるか、ルーティング対象のメッセージが削除されます。 Event Grid によるイベント配信の順序は保証されません。そのため、サブスクライバーはこれらを順序どおりに受信できない場合があります。
次の表では、さまざまなエラーに基づく MQTT メッセージ ルーティングの動作について説明します。
Error | エラーの説明 | 動作 |
---|---|---|
TopicNotFoundError | すべての MQTT ルーティング メッセージを受信するように構成されているカスタム トピックが削除されました。 | Event Grid でルーティング対象の MQTT メッセージが削除されます。 |
AuthenticationError | MQTT ルーティング メッセージの宛先として構成されたカスタム トピックの Event Grid データ送信者ロールが削除されました。 | Event Grid でルーティング対象の MQTT メッセージが削除されます。 |
TooManyRequests | 1 秒あたりの MQTT ルーティング メッセージの数が、カスタム トピックの発行制限を超えています。 | Event Grid では、MQTT メッセージをルーティングするために再試行が行われます。 |
ServiceError | サーバーの運用上の理由による予期しないサーバー エラー。 | Event Grid では、MQTT メッセージをルーティングするために再試行が行われます。 |
Event Grid で再試行が行われる際は、MQTT メッセージ ルーティングに指数バックオフ再試行ポリシーが使用されます。 Event Grid ではベスト エフォート方式で次のスケジュールに従って配信を再試行します。
- 10 秒
- 30 秒
- 1 分
- 5 分
- 10 分
- 30 分
- 1 時間
- 3 時間
- 6 時間
- 12 時間ごと
ルーティングされ、再配信のキューに登録された MQTT メッセージが成功した場合、Event Grid はベスト エフォート方式でメッセージを再試行キューから削除しようとしますが、それでも重複が受信される可能性があります。
次のステップ:
ルーティングの詳細については、次の記事を参照してください。
クイックスタート:
- チュートリアル: 名前空間トピックを使用して MQTT メッセージを Azure Event Hubs にルーティングする
- チュートリアル: カスタム トピックを使用して MQTT メッセージを Azure Functions にルーティングする