次の方法で共有


Azure Event Grid を使用して HTTP 経由で MQTT メッセージを発行する (プレビュー)

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 など) を使用して、同じトピックをサブスクライブして配信を確認します。

  1. MQTTX で新しい接続を作成します。

    • Host: contoso.westus3-1.ts.eventgrid.azure.net
    • Port: 8883 (TLS)
    • Client ID: same as your Entra Object ID
    • Username/Password: N/A — use certificate or token auth if configured
  2. HTTP POST コマンドで使用したトピックをサブスクライブします。

  3. HTTP 発行を実行し、MQTTX でメッセージを監視します。 ペイロードが表示されます。

発行が成功すると、次の内容が表示されます。

  • HTTP 応答: "204 コンテンツなし" または "202 Accepted" (ルーティング規則に応じて)。
  • メッセージが表示されます。MQTT クライアントは、すぐにメッセージを確認します。

トラブルシューティング

  • 401 未承認: トークンが見つからないか有効期限が切れている場合は、「401 Unauthorized」と表示されます。トークンを更新します。
  • 403 禁止: トピックが無効であるか、権限がない場合は、「403 Forbidden」と表示されます。トピックまたはアクセス許可を確認します。
  • 500 内部サーバー エラー: ルーティングが内部的に失敗した場合は、Event Grid 名前空間のメトリックと診断ログを確認します。
  • メッセージが表示されない: メッセージが表示されない場合は、トピックが URL でパーセントエンコードされていることを確認します。 ブローカー のルーティング構成を確認し、同じ名前空間を使用していることを確認します。