Azure Event Grid での MQTT メッセージのルーティング

Event Grid を使用すると、MQTT メッセージを Azure サービスまたは Webhook にルーティングして、さらに処理することができます。 その結果、特にデータ分析、ストレージ、視覚化などのユース ケースにおいて IoT データを活用して、エンド ツー エンドのソリューションを構築できます。

Diagram of the MQTT message routing.

ルーティング機能を使用するにはどうすればよいですか?

クライアントから Azure サービスまたはカスタム エンドポイントにメッセージをルーティングすると、このデータの利点を最大限に活用できます。 この機能を利用する多くのユース ケースの一部を次に示します。

  • データ分析: クライアントからルーティングされたメッセージを抽出して分析し、ソリューションを最適化します。 たとえば、マシンのテレメトリを分析して、障害が発生する前にメンテナンスをスケジュールするタイミングを予測し、遅延やさらなる損害を回避します。
  • サーバーレス アプリケーション: クライアントからルーティングされたメッセージに基づいてサーバーレス関数をトリガーします。 たとえば、モーション センサーがモーションを検出した場合は、対処できるようにセキュリティ担当者に通知を送信します。
  • データの可視化: クライアントからルーティングされたデータを可視化して、データを簡単に表現して理解し、傾向や外れ値を強調表示します。

ルーティング構成:

ルーティング構成を使用すると、クライアントから Event Grid 名前空間トピックまたは Event Grid カスタム トピックにすべての MQTT メッセージを送信することができます。 メッセージがトピックに追加されると、トピックからのメッセージを使用するようにイベント サブスクリプションを構成できます。 次の大まかな手順を使用して、この構成を実現します。

  • ルーティング先としての名前空間トピック:
    • すべての MQTT メッセージがルーティングされる Event Grid 名前空間トピックを作成します
    • プッシュの種類のイベント サブスクリプションを作成し、これらのメッセージを、サポート対象 Azure サービスのいずれかにルーティングするか、カスタム Webhook またはキューの種類のイベント サブスクリプションにルーティングしてアプリケーションを介して名前空間トピックから直接メッセージをプルします。
    • 最初の手順で作成したトピックを参照して、ルーティング構成を設定します。

Diagram of the MQTT message routing to namespace topics.

Diagram of the MQTT message routing to custom topics.

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 を使用するように設定する必要があります
  • 名前空間と同じリージョンに存在する必要があります。
  • ルーティング構成を適用する前に、"EventGrid データ送信者" ロールを自分または Event Grid カスタム トピックで選択したマネージド ID に割り当てる必要があります。
    • ポータルで、作成した Event Grid トピック リソースに移動します。
    • [アクセス制御 (IAM)] メニュー項目で、[ロールの割り当ての追加] を選択します。
    • [ロール] タブで、[Event Grid データ送信者] を選択し、[次へ] を選択します。
    • [メンバー] タブで [メンバーを選択する] を選択し、表示される [選択] ボックスに AD ユーザー名を入力します (例: user@contoso.com)。
    • AD ユーザー名を選択し、[レビューと割り当て] を選択します

Azure portal の構成

API ポータルを構成するには、次の手順に従います。

  • Azure portal でご使用の名前空間に移動します。
  • [ルーティング] で、[ルーティングを有効にする] をオンにします
  • [トピックの種類] で、[名前空間トピック] または [カスタム トピック] を選択します
  • [トピック] で、すべての MQTT メッセージのルーティング先である、作成したトピックを選択します。
  • カスタム トピックが選択されている場合は、[配信用のマネージド ID] セクションが表示されます。 MQTT メッセージをカスタム トピックに配信するときに MQTT ブローカーの認証に使用する ID に対して、次のいずれかのオプションを選択します。
    • なし: この場合は、カスタム トピックで "EventGrid データ送信者" ロールを自分に割り当てる必要があります。
    • システム割り当て ID: この場合は、前提条件として名前空間でシステム割り当て ID を有効にし、カスタム トピックのシステム割り当て ID に "EventGrid データ送信者" ロールを割り当てる必要があります。
    • ユーザー割り当て ID: この場合は、前提条件として名前空間でユーザー割り当て ID を有効にし、カスタム トピックの選択済み ID に "EventGrid データ送信者" ロールを割り当てる必要があります。
      • ユーザー割り当て ID が選択されている場合は、ドロップダウンが表示され、目的の ID を選択できます。
  • [適用] を選択します。

Screenshot showing the routing configuration through the portal.

エンリッチメントの構成手順については、エンリッチメントのポータル構成に関する記事を参照してください。

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 ルーティング メッセージの宛先として構成されたカスタム トピックの EventGrid データ送信者ロールが削除されました。 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 はベスト エフォート方式でメッセージを再試行キューから削除しようとしますが、それでも重複が受信される可能性があります。

次のステップ:

ルーティングの詳細については、次の記事を参照してください。

クイックスタート:

概念: