다음을 통해 공유


자습서: 네임스페이스 토픽을 사용하여 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 시작

  1. Azure Portal에 로그인합니다.

  2. 링크를 선택하여 Cloud Shell을 시작합니다.

  3. Bash로 전환합니다.

    Cloud Shell이 열리고 Bash가 선택된 Azure Portal을 보여 주는 스크린샷

Event Grid 네임스페이스 및 토픽 만들기

네임스페이스에서 Event Grid 네임스페이스 및 토픽을 만들려면 다음 스크립트를 편집기로 복사하고 자리 표시자를 실제 값으로 바꾸고 명령을 실행합니다.

Placeholder 코멘트
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 코멘트
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 코멘트
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 코멘트
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 메시지를 볼 수 있습니다.

Stream Analytics 쿼리 도구를 사용하여 Event Hubs의 MQTT 메시지 데이터를 보여 주는 스크린샷

다음 단계

코드 샘플은 이 GitHub 리포지토리로 이동합니다.