자습서: 네임스페이스 토픽을 사용하여 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 네임스페이스와 네임스페이스에 토픽을 만들려면 다음 스크립트를 편집기에 복사하고 자리 표시자를 실제 값으로 바꾸고 명령을 실행합니다.
자리 표시자 | 설명 |
---|---|
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 네임스페이스와 네임스페이스에 Event Hubs를 만들려면 자리 표시자를 실제 값으로 바꾸고 다음 명령을 실행합니다. 이 이벤트 허브는 이 자습서에서 만드는 이벤트 구독에서 이벤트 처리기로 사용됩니다.
자리 표시자 | 설명 |
---|---|
EVENTHUBSNAMESPACENAME |
만들 Event Hubs 네임스페이스의 이름을 지정합니다. |
EVENTHUBNAME |
Event Hubs 네임스페이스에 만들어질 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 Hubs 네임스페이스의 Azure Event Hubs 데이터 보낸 사람 역할에 Event Grid 네임스페이스의 서비스 주체를 추가합니다. 이를 통해 Event Grid 네임스페이스와 그 안에 있는 리소스가 Event Hubs 네임스페이스의 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를 엔드포인트로 사용하여 이벤트 구독 만들기
이전에 만든 네임스페이스 토픽에 대한 이벤트 구독을 만들려면 자리 표시자를 실제 값으로 바꾸고 다음 명령을 실행합니다. 이 구독은 이벤트 허브를 이벤트 처리기로 사용하도록 구성됩니다.
자리 표시자 | 설명 |
---|---|
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 메시지 게시 및 구독을 참조하세요.
자리 표시자 | 설명 |
---|---|
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를 사용하여 메시지 보내기
MQTT를 사용하여 몇 가지 문자 메시지를 보냅니다. 단계별 지침은 빠른 시작: MQTT 토픽 게시 및 구독을 참조하세요.
Event Hubs 네임스페이스의 개요 페이지에서 Event Hubs가 해당 메시지를 수신했는지 확인합니다.
Stream Analytics 쿼리를 사용하여 Event Hubs에서 라우팅된 MQTT 메시지 보기
Azure Portal의 이벤트 구독 내에서 Event Hubs 인스턴스(Event Hubs)로 이동합니다. Stream Analytics를 사용하여 이벤트 허브에서 데이터를 처리합니다. 자세한 내용은 Stream Analytics를 사용하여 Azure Event Hubs에서 데이터 처리 - Azure Event Hubs | Microsoft Learn을 참조하세요. 쿼리에 있는 MQTT 메시지를 볼 수 있습니다.
다음 단계
코드 샘플은 이 GitHub 리포지토리를 참조하세요.