チュートリアル: 名前空間トピックを使用して MQTT メッセージを Azure Event Hubs にルーティングする (Azure CLI)
このチュートリアルでは、名前空間トピックを使用して MQTT クライアントから Azure Event Hubs にデータをルーティングする方法について説明します。 手順の概要は次のとおりです。
前提条件
- Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
- Event Grid を初めて使用する場合は、このチュートリアルを開始する前に「Event Grid の概要」をお読みください。
- 「Event Grid リソース プロバイダーの登録」の手順に従って、Event Grid リソース プロバイダーを登録します。
- ファイアウォールでポート 8883 が開放されていることを確認します。 このチュートリアルのサンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。
Cloud Shell の起動
Azure Portal にサインインします。
リンクを選択して Cloud Shell を起動します。
[Bash] に切り替えます。
Event Grid 名前空間とトピックを作成する
Event Grid 名前空間を作成し、この名前空間内にトピックを作成するには、次のスクリプトをエディターにコピーし、プレースホルダーを実際の値で置き換えて、コマンドを実行します。
プレースホルダー | Comments |
---|---|
RESOURCEGROUPNAME |
作成するリソース グループの名前を指定します。 |
EVENTGRIDNAMESPACENAME |
Event Grid 名前空間の名前を指定します。 |
REGION |
リソースを作成する場所を指定します。 |
NAMESPACETOPICNAME |
名前空間トピックの名前を指定します。 |
rgName="RESOURCEGROUPNAME"
nsName="EVENTGRIDNAMESPACENAME"
location="REGION"
nsTopicName="NAMESPACETOPICNAME"
az group create -n $rgName -l $location
az eventgrid namespace create -g $rgName -n $nsName -l $location --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
az eventgrid namespace topic create -g $rgName --name $nsTopicName --namespace-name $nsName
Event Hubs 名前空間とイベント ハブを作成する
Event Hubs 名前空間を作成し、この名前空間内にイベント ハブを作成するには、プレースホルダーを実際の値で置き換えて、次のコマンドを実行します。 このイベント ハブは、このチュートリアルで作成するイベント サブスクリプションのイベント ハンドラーとして使用されます。
プレースホルダー | Comments |
---|---|
EVENTHUBSNAMESPACENAME |
作成する Event Hubs 名前空間の名前を指定します。 |
EVENTHUBNAME |
Event Hubs 名前空間内に作成する Event Hubs インスタンス (イベント ハブ) の名前を指定します。 |
ehubNsName="EVENTHUBSNAMESPACENAME`"
ehubName="EVENTHUBNAME"
az eventhubs namespace create --resource-group $rgName --name $ehubNsName
az eventhubs eventhub create --resource-group $rgName --namespace-name $ehubNsName --name $ehubName
Event Grid 名前空間に、イベント ハブにイベントを送信するためのアクセス権を付与する
Event Grid 名前空間のサービス プリンシパルを Event Hubs 名前空間の Azure Event Hubs データ送信者ロールに追加するには、次のコマンドを実行します。 これにより、Event Grid 名前空間とその中のリソースから、Event Hubs 名前空間のイベント ハブにイベントを送信できるようになります。
egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
namespaceresourceid=$(az eventhubs namespace show -n $ehubNsName -g $rgName --query "{I:id}" -o tsv)
az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "Azure Event Hubs Data Sender" --scope $namespaceresourceid
エンドポイントとして Event Hubs を使用してイベント サブスクリプションを作成する
前に作成した名前空間トピックのイベント サブスクリプションを作成するには、プレースホルダーを実際の値で置き換えて、次のコマンドを実行します。 このサブスクリプションは、イベント ハブをイベント ハンドラーとして使用するように構成されています。
プレースホルダー | Comments |
---|---|
EVENTSUBSCRIPTIONNAME |
名前空間トピックのイベント サブスクリプションの名前を指定します。 |
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
eventhubresourceid=$(az eventhubs eventhub show -n $ehubName --namespace-name $ehubNsName -g $rgName --query "{I:id}" -o tsv)
az resource create --api-version 2023-06-01-preview --resource-group $rgName --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $eventSubscriptionName --parent namespaces/$nsName/topics/$nsTopicName --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventhubresourceid\"}}}}}}"
Event Grid 名前空間でルーティングを構成する
名前空間のルーティングを有効にし、前に作成した名前空間トピックへとメッセージまたはイベントをルーティングするには、次のコマンドを実行します。 それらのイベントは、この名前空間トピックのイベント サブスクリプションにより、イベント ハンドラーとして構成されているイベント ハブに転送されます。
routeTopicResourceId=$(az eventgrid namespace topic show -g $rgName --namespace-name $nsName -n $nsTopicName --query "{I:id}" -o tsv)
az eventgrid namespace create -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$routeTopicResourceId}"
クライアント、トピック空間、およびアクセス許可バインドを作成する
次に、いくつかのテスト メッセージを送信するクライアントを作成します。 このステップでは、クライアントの作成、トピックを 1 つ含んだトピック空間の作成、パブリッシャーとサブスクライバーのバインディング作成を行います。
詳細な作業手順については、「クイック スタート: Azure CLI を使用して Event Grid 名前空間で MQTT メッセージを発行してサブスクライブする」を参照してください。
プレースホルダー | Comments |
---|---|
CLIENTNAME |
いくつかのテスト メッセージを送信するクライアントの名前を指定します。 |
CERTIFICATETHUMBPRINT |
クライアント証明書の拇印です。 証明書を作成して拇印を抽出する手順については、上記のクイックスタートを参照してください。 同じ拇印を MQTTX ツールで使用して、テスト メッセージを送信します。 |
TOPICSPACENAME |
作成するトピック空間の名前を指定します。 |
PUBLSHERBINDINGNAME |
パブリッシャー バインディングの名前を指定します。 |
SUBSCRIBERBINDINGNAME |
サブスクライバー バインディングの名前を指定します。 |
clientName="CLIENTNAME"
clientAuthName="client1-authnID"
clientThumbprint="CERTIFICATETHUMBPRINT"
topicSpaceName="TOPICSPACENAME"
publisherBindingName="PUBLSHERBINDINGNAME"
subscriberBindingName="SUBSCRIBERBINDINGNAME"
az eventgrid namespace client create -g $rgName --namespace-name $nsName -n $clientName --authentication-name $clientAuthName --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[$clientThumbprint]}"
az eventgrid namespace topic-space create -g $rgName --namespace-name $nsName -n $topicSpaceName --topic-templates ['contosotopics/topic1']
az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $publisherBindingName --client-group-name '$all' --permission publisher --topic-space-name $topicSpaceName
az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $subscriberBindingName --client-group-name '$all' --permission subscriber --topic-space-name $topicSpaceName
MQTTX を使用してメッセージを送信する
MQTTX を使用して、いくつかのテスト メッセージを送信します。 詳細な手順については、クイック スタート:「MQTT トピックを発行してサブスクライブする」を参照してください。
Event Hubs 名前空間の [概要] ページで、イベント ハブがそれらのメッセージを受信したことを確認します。
Stream Analytics クエリを使用して Event Hubs でルーティング MQTT メッセージを表示する
Azure portal で、イベント サブスクリプション内の Event Hubs インスタンス (イベント ハブ) に移動します。 Stream Analytics を使用してイベント ハブからのデータを処理します。 詳細については、「Stream Analytics を使用した Azure Event Hubs からのデータの処理 - Azure Event Hubs | Microsoft Learn」を参照してください。 クエリで MQTT メッセージを確認できます。
次のステップ
コード サンプルについては、この GitHub リポジトリを参照してください。