Azure Event Grid에서 MQTT 메시지 라우팅

Event Grid를 사용하면 추가 처리를 위해 MQTT 메시지를 Azure 서비스 또는 웹후크로 라우팅할 수 있습니다. 따라서 다른 사용 사례 중에서 데이터 분석, 스토리지, 시각화에 IoT 데이터를 사용하여 엔드투엔드 솔루션을 빌드할 수 있습니다.

Diagram of the MQTT message routing.

라우팅 기능을 어떻게 사용할 수 있나요?

클라이언트에서 Azure 서비스 또는 사용자 지정 엔드포인트로 메시지를 라우팅하면 이 데이터의 이점을 최대화할 수 있습니다. 다음은 이 기능을 활용하는 몇 가지 사용 사례입니다.

  • 데이터 분석: 클라이언트에서 라우트된 메시지를 추출하고 분석하여 솔루션을 최적화합니다. 예를 들어 컴퓨터의 원격 분석 데이터를 분석하여 오류가 발생하기 전에 유지 관리를 예약할 시기를 예측해 지연 및 추가 손상을 방지합니다.
  • 서버리스 애플리케이션: 클라이언트의 라우트된 메시지를 바탕으로 서버리스 함수를 트리거합니다. 예를 들어 동작 센서가 동작을 감지하면 보안 담당자에게 알림을 보내 해결합니다.
  • 데이터 시각화: 클라이언트에서 라우팅된 데이터의 시각화를 빌드하여 데이터를 쉽게 이해하도록 표현하고 추세 및 이상값을 강조 표시합니다.

라우팅 구성:

라우팅 구성을 사용하면 클라이언트에서 Event Grid 네임스페이스 토픽 또는 Event Grid 사용자 지정 토픽으로 모든 MQTT 메시지를 보낼 수 있습니다. 토픽에 메시지가 있으면 토픽의 메시지를 사용하도록 이벤트 구독을 구성할 수 있습니다. 이렇게 구성하려면 다음 개략적인 단계를 수행하세요.

  • 라우팅 대상인 네임스페이스 토픽:
    • 모든 MQTT 메시지가 라우트되는 Event Grid 네임스페이스 토픽을 만듭니다.
    • 이러한 메시지를 지원되는 Azure 서비스 또는 사용자 지정 웹후크로 라우트하려면 푸시 유형의 이벤트 구독을 만들고, 애플리케이션을 통해 네임스페이스 토픽에서 직접 메시지를 끌어오려면 큐 유형의 이벤트 구독을 만듭니다.
    • 첫 번째 단계에서 만든 토픽을 참조하는 라우팅 구성을 설정합니다.

Diagram of the MQTT message routing to namespace topics.

Diagram of the MQTT message routing to custom topics.

참고 항목

네임스페이스에서 공용 네트워크 액세스를 사용하지 않도록 설정하면 MQTT 라우팅에 실패합니다.

라우팅 대상으로써 네임스페이스 토픽과 사용자 지정 토픽 간의 차이점

다음 표에서는 라우팅 대상으로써 네임스페이스 토픽과 사용자 지정 토픽 간의 차이점을 보여줍니다. 각 Event Grid 리소스에 포함되는 할당량 및 제한에 대한 자세한 내용은 할당량 및 제한을 참조하세요.

비교 지점 네임스페이스 토픽 사용자 지정 토픽
처리량 높음, 최대 40MB/s(수신) 및 80MB/s(송신) 낮음, 최대 5MB/s(수신 및 송신)
끌어오기 배달
Event Hubs로 푸시 배달 예(미리 보기)
Azure 서비스(Functions, Webhooks, Service Bus 큐 및 토픽, 릴레이 하이브리드 연결 및 스토리지 큐)로 푸시 배달
메시지 보존 7 일 하루
역할 할당 요구 사항 MQTT 브로커 및 네임스페이스 토픽이 동일한 네임스페이스 아래에 있으므로 필요하지 않음 MQTT 브로커 기능을 호스트하는 네임스페이스와 사용자 지정 토픽이 서로 다른 리소스이므로 필요함

라우팅을 위한 Event Grid 사용자 지정 토픽 요구 사항

라우팅에 사용되는 Event Grid 사용자 지정 토픽은 다음 요구 사항을 충족해야 합니다.

  • 클라우드 이벤트 스키마 v1.0을 사용하도록 설정해야 합니다.
  • 네임스페이스와 지역이 동일해야 합니다.
  • 라우팅 구성을 적용하기 전에 Event Grid 사용자 지정 항목에서 자신 또는 선택한 관리 ID에 "EventGrid 데이터 보낸 사람" 역할을 할당해야 합니다.
    • 포털에서 생성된 Event Grid 토픽 리소스로 이동합니다.
    • "액세스 제어(IAM)" 메뉴 항목에서 [역할 할당 추가]를 선택합니다.
    • "역할" 탭에서 "Event Grid 데이터 보낸 사람"을 선택하고 [다음]을 선택합니다.
    • "구성원" 탭에서 [+구성원 선택]을 선택한 다음 표시되는 "선택" 상자에 AD 사용자 이름을 입력합니다(예: user@contoso.com).
    • AD 사용자 이름을 선택한 다음, "검토 + 할당"을 선택합니다.

Azure Portal 구성

라우팅을 구성하려면 다음 단계를 수행하세요.

  • Azure Portal에서 네임스페이스로 이동합니다.
  • 라우팅에서 [라우팅 사용]을 선택합니다.
  • 토픽 유형에서 네임스페이스 토픽 또는 사용자 지정 토픽을 선택합니다.
  • 항목에서 모든 MQTT 메시지가 라우트될 이전에 만든 토픽을 선택합니다.
  • 사용자 지정 토픽을 선택한 경우 배달용 관리 ID 섹션이 나타납니다. MQTT 메시지를 사용자 지정 토픽에 전달하는 동안 MQTT 브로커를 인증하는 데 사용할 ID에 대해 다음 옵션 중 하나를 선택합니다.
  • 적용을 선택합니다.

Screenshot showing the routing configuration through the portal.

보강 구성 지침을 보려면 보강 포털 구성으로 이동하세요.

Azure CLI 구성

az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --api-version 2023-06-01-preview --properties @./resources/NS.json

NS.json

"properties": {
	"inputSchema": "CloudEventSchemaV1_0",
	"topicSpacesConfiguration": {
	    "state": "Enabled",           
	    "routeTopicResourceId": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/topics/<Event Grid topic name>",
        "routingIdentityInfo": {
                "type": "UserAssigned", //Allowed values: None, SystemAssigned, UserAssigned
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>" //needed only if UserAssigned was the value of type
            },

	}
}

보강 구성 지침을 보려면 보강 CLI 구성으로 이동하세요.

MQTT 메시지 라우팅 동작

MQTT 메시지를 사용자 지정 토픽으로 라우팅하는 동안 Event Grid는 각 메시지를 한 번 이상 즉시 배달하려고 시도하므로 지속적인 배달을 제공합니다. 실패하면 Event Grid는 배달을 다시 시도하거나 라우트하려는 메시지를 삭제합니다. Event Grid는 이벤트 배달 순서를 보장하지 않으므로 구독자가 잘못된 순서로 메시지를 받을 수 있습니다.

다음 표에서는 다양한 오류에 따른 MQTT 메시지 라우팅의 동작을 설명합니다.

오류 오류 설명 동작
TopicNotFoundError 모든 MQTT 라우트된 메시지를 수신하도록 구성된 사용자 지정 토픽이 삭제되었습니다. Event Grid가 라우트하려는 MQTT 메시지를 삭제합니다.
AuthenticationError MQTT 라우트된 메시지의 대상으로 구성된 사용자 지정 토픽에 대한 EventGrid 데이터 보낸 사람 역할이 삭제되었습니다. Event Grid가 라우트하려는 MQTT 메시지를 삭제합니다.
TooManyRequests 초당 MQTT 라우트된 메시지 수가 사용자 지정 토픽의 게시 제한을 초과합니다. Event Grid가 MQTT 메시지 라우를 다시 시도합니다.
ServiceError 서버 운영상의 이유로 예기치 않은 서버 오류가 발생했습니다. Event Grid가 MQTT 메시지 라우를 다시 시도합니다.

다시 시도하는 동안 Event Grid가 MQTT 메시지 라우팅에 지수 백오프 재시도 정책을 사용합니다. Event Grid는 다음 일정에 따라 가장 적합한 방식으로 배달을 다시 시도합니다.

  • 10초
  • 30초
  • 1분
  • 5분
  • 10분
  • 30분
  • 1시간
  • 3시간
  • 6시간
  • 12시간마다

다시 배달을 위해 큐에 대기 중인 라우트된 MQTT 메시지가 성공하면 Event Grid는 최선을 다해 재시도 큐에서 메시지를 제거하려고 시도하지만 중복 항목이 계속 수신될 수 있습니다.

다음 단계:

다음 문서에서 라우팅에 대해 자세히 알아봅니다.

빠른 시작:

개념: