このチュートリアルでは、名前空間トピックを使用して 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 名前空間とトピックを作成するには、次のスクリプトをエディターにコピーし、プレースホルダーを実際の値に置き換えて、コマンドを実行します。
| Placeholder | 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 名前空間とイベント ハブを作成するには、プレースホルダーを実際の値に置き換えて、次のコマンドを実行します。 このイベント ハブは、このチュートリアルで作成するイベント サブスクリプションのイベント ハンドラーとして使用されます。
| Placeholder | 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 を使用してイベント サブスクリプションを作成する
前に作成した名前空間トピックのイベント サブスクリプションを作成するには、プレースホルダーを実際の値に置き換えて、次のコマンドを実行します。 このサブスクリプションは、イベント ハブをイベント ハンドラーとして使用するように構成されています。
| Placeholder | 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}"
クライアント、トピックスペース、およびアクセス許可のバインド
次に、テスト用にいくつかのメッセージを送信するクライアントを作成します。 この手順では、クライアント、トピックを含むトピックスペース、およびパブリッシャーとサブスクライバーのバインドを作成します。
詳細な手順については、「 クイック スタート: Azure CLI を使用して Event Grid 名前空間で MQTT メッセージを発行およびサブスクライブする」を参照してください。
| Placeholder | 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 リポジトリを参照してください。