Azure Event Grid では、HTTP 経由でのメッセージ キュー テレメトリ トランスポート (MQTT) メッセージの発行がサポートされるようになりました。 Event Grid を使用すると、バックエンド システムは永続的な MQTT 接続を維持することなく、デバイスにメッセージを送信できます。 この方法により、ステートレス通信を優先するアプリケーションの統合が簡略化されます。 Microsoft Entra ID でセキュリティで保護された認証を使用し、MQTT クライアントにスケーラブルで信頼性の高い配信を提供します。 この記事では、HTTP 発行 API を使用する方法について説明します。 また、Bruno や MQTTX などの一般的なツールを使用して、必要な資格情報を取得し、メッセージ配信を確認する方法についても説明します。
注
この機能は現在プレビュー段階です。
この記事では、Event Grid を使用して HTTP 経由で MQTT メッセージを発行する方法について説明します。
接続の詳細を取得する
-
名前空間の完全修飾ドメイン名 (FQDN):
contoso.westus3-1.ts.eventgrid.azure.net例を示します。 -
トピック: 例として、
devices/CXa-23112/promptがあります。 - 資格情報: Microsoft Entra ID クライアントの資格情報。
ロールの割り振り
HTTP 発行要求の作成に使用される ID には、MQTT メッセージパブリッシャーアクセス用の Azure RBAC ロール EventGrid TopicSpaces Publisher が必要です。
ベアラー トークンを取得する
次の Azure CLI コマンドを実行してベアラー トークンを取得します。
az account get-access-token --resource=https://eventgrid.azure.net --query accessToken -o tsv
Authorization: Bearer <TOKEN> ヘッダーで使用するには、このトークンを保存します。
HTTP を使用してメッセージを発行する
HTTP 発行をシミュレートする curl コマンドの例を次に示します。
curl -X POST "https://contoso.westus3-1.ts.eventgrid.azure.net/mqtt/messages?topic=devices%2XXXX-0000%2Fprompt&api-version=2025-08-01-preview" \
-H "Authorization: Bearer <ENTRA_TOKEN_HERE>" \
-H "mqtt-qos: 1" \
-H "mqtt-retain: 0" \
-H "mqtt-response-topic: devices%2XXXX-00000%2Freply" \
-H "mqtt-correlation-data: XXXXXXX" \
-H "mqtt-user-properties: XXXXXXXXXXXX" \
-H "Content-Type: text/plain;charset=UTF-8" \
--data-raw "Please accept terms of licensing and agreement"
このサンプル コマンドでは、次の操作を行います。
- トピックはパーセントでエンコードされます。
- サービス品質 (QoS)、
RETAINフラグ、応答トピック、およびユーザー プロパティにオプションのヘッダーが追加されます。 - ペイロード(データ)はリクエストの本文に含まれます。
MQTTX で確認する
MQTTX または任意の MQTT ライブラリ ( paho-mqtt Python など) を使用して、同じトピックをサブスクライブして配信を確認します。
MQTTX で新しい接続を作成します。
Host: contoso.westus3-1.ts.eventgrid.azure.netPort: 8883 (TLS)Client ID: same as your Entra Object IDUsername/Password: N/A — use certificate or token auth if configured
HTTP
POSTコマンドで使用したトピックをサブスクライブします。HTTP 発行を実行し、MQTTX でメッセージを監視します。 ペイロードが表示されます。
発行が成功すると、次の内容が表示されます。
- HTTP 応答: "204 コンテンツなし" または "202 Accepted" (ルーティング規則に応じて)。
- メッセージが表示されます。MQTT クライアントは、すぐにメッセージを確認します。
トラブルシューティング
- 401 未承認: トークンが見つからないか有効期限が切れている場合は、「401 Unauthorized」と表示されます。トークンを更新します。
- 403 禁止: トピックが無効であるか、権限がない場合は、「403 Forbidden」と表示されます。トピックまたはアクセス許可を確認します。
- 500 内部サーバー エラー: ルーティングが内部的に失敗した場合は、Event Grid 名前空間のメトリックと診断ログを確認します。
- メッセージが表示されない: メッセージが表示されない場合は、トピックが URL でパーセントエンコードされていることを確認します。 ブローカー のルーティング構成を確認し、同じ名前空間を使用していることを確認します。
関連コンテンツ
- この機能の概要については、「 Azure Event Grid を使用した MQTT メッセージの HTTP 発行」を参照してください。