IoT Hub 메시지 라우팅을 사용하여 디바이스-클라우드 메시지를 Azure 서비스로 보내기

메시지 라우팅을 사용하면 확장 가능하고 신뢰할 수 있는 자동화된 방식으로 디바이스에서 클라우드 서비스로 메시지를 보낼 수 있습니다. 메시지 라우팅을 사용하여 다음을 수행할 수 있습니다.

  • 기본 제공 엔드포인트 및 사용자 지정 엔드포인트에 디바이스 원격 분석 메시지 및 이벤트 전송 라우팅할 수 있는 이벤트에는 디바이스 수명 주기 이벤트, 디바이스 쌍 변경 이벤트, 디지털 트윈 변경 이벤트 및 디바이스 연결 상태 이벤트가 포함됩니다.

  • 풍부한 쿼리를 적용하여 데이터를 라우팅하기 전에 필터링합니다. 메시지 라우팅을 사용하면 메시지 속성 및 메시지 본문뿐만 아니라 디바이스 쌍 태그 및 디바이스 쌍 속성에 대해서도 쿼리할 수 있습니다. 자세한 내용은 메시지 라우팅의 쿼리를 참조하세요.

IoT Hub는 프로토콜 전체에서의 상호 운용성을 위해 모든 디바이스-클라우드 메시징에 대해 일반적인 형식을 정의합니다. 자세한 내용은 IoT Hub 메시지 만들기 및 읽기를 참조하세요.

참고 항목

클라우드-디바이스 메시지, 디바이스 트윈스, 디바이스 관리 등 이 문서에 언급된 일부 기능은 IoT Hub의 표준 계층에서만 사용할 수 있습니다. 기본 및 표준/무료 IoT Hub 계층에 대한 자세한 내용은 솔루션에 적합한 IoT Hub 계층 선택을 참조하세요.

라우팅 엔드포인트

각 IoT 허브에는 Event Hubs와 호환되는 메시지/이벤트라는 기본 라우팅 엔드포인트가 있습니다. Azure 구독의 다른 서비스를 가리키는 사용자 지정 엔드포인트를 만들 수도 있습니다.

IoT Hub는 현재 메시지 라우팅을 위해 다음 엔드포인트를 지원합니다.

  • 기본 제공 엔드포인트
  • 스토리지 컨테이너
  • Service Bus 큐
  • Service Bus 토픽
  • Event Hubs
  • Cosmos DB

각 엔드포인트에 대한 자세한 내용은 IoT Hub 엔드포인트를 참조하세요.

각 메시지는 라우팅 쿼리와 일치하는 모든 엔드포인트로 라우팅됩니다. 즉, 메시지가 여러 엔드포인트로 라우팅될 수 있습니다. 그러나 메시지가 동일한 엔드포인트를 가리키는 여러 경로와 일치하는 경우 IoT Hub는 메시지를 해당 엔드포인트에 한 번만 배달합니다.

IoT Hub는 메시지 라우팅을 작동하기 위해 이러한 서비스 엔드포인트에 대한 쓰기 액세스가 필요합니다. Azure Portal을 통해 엔드포인트를 구성하는 경우 필요한 권한이 추가됩니다. PowerShell 또는 Azure CLI를 사용하여 엔드포인트를 구성하는 경우 쓰기 권한을 제공해야 합니다.

엔드포인트를 만드는 방법을 알아보려면 다음 문서를 참조하세요.

예상 처리량을 지원하도록 서비스를 구성했는지 확인합니다. 예를 들어 Event Hubs를 사용자 지정 엔드포인트로 사용하는 경우 IoT Hub 메시지 라우팅을 통해 전송하려는 이벤트의 수신을 처리할 수 있도록 해당 이벤트 허브에 대한 처리량 단위를 구성해야 합니다. 마찬가지로 Service Bus 큐를 엔드포인트로 사용하는 경우에는 소비자가 송신할 때까지 큐가 수신된 모든 데이터를 보유할 수 있도록 최대 크기를 구성해야 합니다. IoT 솔루션을 처음 구성할 때 다른 엔드포인트를 모니터링하고 실제 부하에 맞게 필요한 조정을 수행해야 할 수 있습니다.

사용자 지정 엔드포인트에 방화벽 구성이 있는 경우 Microsoft 신뢰할 수 있는 자사 예외 사용을 고려합니다.

다른 구독의 엔드포인트로 라우팅

엔드포인트 리소스가 IoT Hub와 다른 구독에 있는 경우 사용자 지정 엔드포인트를 만들기 전에 IoT Hub를 신뢰할 수 있는 Microsoft 서비스로 구성해야 합니다. 사용자 지정 엔드포인트를 만들 때 인증 형식을 사용자 지정 ID로 설정합니다.

자세한 내용은 IoT Hub에서 다른 Azure 리소스로의 송신 연결을 참조하세요.

라우팅 쿼리

IoT Hub 메시지 라우팅은 데이터를 엔드포인트로 라우팅하기 전에 데이터를 필터링하는 쿼리 기능을 제공합니다. 구성하는 각 라우팅 쿼리에는 다음과 같은 속성이 있습니다.

속성 설명
이름 쿼리를 식별하는 고유한 이름입니다.
Source 처리할 데이터 스트림의 원본입니다. 예를 들어 디바이스 원격 분석이 있습니다.
Condition 엔드포인트의 일치 항목인지 확인하기 위해 메시지 애플리케이션 속성, 시스템 속성, 메시지 본문, 디바이스 쌍 태그 및 디바이스 쌍 속성에 대해 실행되는 라우팅 쿼리의 쿼리 식입니다.
엔드포인트 IoT Hub에서 쿼리와 일치하는 메시지를 보내는 엔드포인트의 이름입니다. IoT Hub와 동일한 지역에서 엔드포인트를 선택하는 것이 좋습니다.

하나의 메시지가 여러 라우팅 쿼리의 조건과 일치할 수 있습니다. 이 경우 IoT Hub는 일치된 각 쿼리와 연결된 엔드포인트로 메시지를 전송합니다. 또한 IoT Hub는 메시지 전송을 자동으로 중복 제거하므로 메시지가 동일한 대상을 가진 여러 쿼리와 일치하면 해당 대상에 한 번만 기록됩니다.

자세한 내용은 IoT Hub 메시지 라우팅 쿼리 구문을 참조하세요.

라우팅된 데이터 읽기

다음 문서를 사용하여 엔드포인트에서 메시지를 읽는 방법을 알아봅니다.

대체(fallback) 경로

대체 경로는 기존 경로의 쿼리 조건을 충족하지 않는 모든 메시지를 Event Hubs와 호환되는 기본 제공 엔드포인트(메시지/이벤트)로 보냅니다. 메시지 라우팅이 사용하도록 설정된 경우 대체 경로 기능을 사용하도록 설정할 수 있습니다. 일단 경로가 생성되면 경로가 해당 엔드포인트에 대해 생성되어 있지 않은 한, 데이터가 기본 제공 엔드포인트로 흐르는 것을 멈춥니다. 기본 제공 엔드포인트에 대한 경로가 없고 대체(fallback) 경로가 사용하도록 설정된 경우 경로의 모든 쿼리 조건을 충족하지 않는 메시지만 기본 제공 엔드포인트로 전송됩니다. 모든 기존 경로가 삭제된 경우라도 기본 제공 엔드포인트에서 모든 데이터를 수신하려면 대체 경로 기능을 사용하도록 설정해야 합니다.

메시지 라우팅 블레이드에서 Azure Portal의 대체 경로를 사용하거나 사용하지 않도록 설정할 수 있습니다. FallbackRouteProperties에 Azure Resource Manager를 사용하여 대체(fallback) 경로에 대해 사용자 지정 엔드포인트를 사용할 수도 있습니다.

비-원격 분석 이벤트

디바이스 원격 분석 외에도 메시지 라우팅을 통해 다음과 같은 비원격 분석 이벤트를 보낼 수 있습니다.

  • 디바이스 쌍 변경 이벤트
  • 디바이스 수명 주기 이벤트
  • 디바이스 작업 수명 주기 이벤트
  • 디지털 쌍 변경 이벤트
  • 디바이스 연결 상태 이벤트

예를 들어, 디바이스 쌍 변경 이벤트로 설정된 데이터 원본으로 경로가 생성되면, IoT Hub는 디바이스 쌍의 변경 사항을 포함하는 엔드포인트로 메시지를 전송합니다. 마찬가지로 디바이스 수명 주기 이벤트로 설정된 데이터 원본으로 경로가 만들어지면 IoT Hub는 디바이스 또는 모듈이 삭제되었거나 생성되었는지 여부를 나타내는 메시지를 보냅니다. 디바이스 수명 주기 이벤트에 대한 자세한 내용은 디바이스 및 모듈 수명 주기 알림을 참조하세요.

Azure IoT 플러그 앤 플레이를 사용하는 경우 개발자는 디지털 트윈 변경 이벤트로 설정된 데이터 원본이 있는 경로를 만들 수 있으며 IoT Hub는 디지털 트윈 속성이 설정되거나 변경되고, 디지털 트윈이 대체되거나 기본 디바이스 쌍에 대해 변경 이벤트가 발생하는 경우 메시지를 전송합니다. 마지막으로 데이터 원본이 디바이스 연결 상태 이벤트로 설정된 경로가 생성되면 IoT Hub는 디바이스가 연결되었는지 여부를 나타내는 메시지를 보냅니다.

IoT Hub는 Azure Event Grid와 통합되어 디바이스 이벤트를 게시하여 이러한 이벤트를 기반으로 워크플로의 실시간 통합 및 자동화를 지원합니다. 메시지 라우팅과 Event Grid 간의 주요 차이점을 확인하고 내 시나리오에 무엇이 가장 적합한지 알아보세요.

디바이스 연결 상태 이벤트에 대한 제한 사항

디바이스 연결 상태 이벤트는 MQTT 또는 AMQP 프로토콜을 사용하여 연결하거나 WebSocket을 통해 이러한 프로토콜 중 하나를 사용하여 연결하는 디바이스에 사용할 수 있습니다. HTTPS로만 이루어진 요청은 디바이스 연결 상태 알림을 트리거하지 않습니다. IoT Hub가 디바이스 연결 상태 이벤트 전송을 시작하려면 연결을 연 후 클라우드-디바이스 메시지 수신 작업 또는 디바이스-클라우드 원격 분석 전송 작업을 호출해야 합니다. Azure IoT SDK 외부에서 MQTT에서 이러한 작업은 적절한 메시징 토픽에 대한 SUBSCRIBE 또는 PUBLISH 작업과 동일합니다. AMQP를 통해 진행되는 이러한 작업은 적절한 링크 경로에 메시지를 첨부하거나 전송하는 것과 같습니다. 자세한 내용은 다음 문서를 참조하세요.

IoT Hub는 각 개별 디바이스 연결 및 연결 끊기 이벤트를 보고하지 않으며 주기적인 60초 스냅샷에서 찍은 현재 연결 상태를 게시합니다. 시퀀스 번호가 다른 동일한 연결 상태 이벤트나 다른 연결 상태 이벤트를 수신하는 것은 모두 60초 동안 디바이스 연결 상태가 변경되었음을 의미합니다.

테스트 경로

새 경로를 만들거나 기존 경로를 편집하는 경우에는 샘플 메시지로 경로 쿼리를 테스트해야 합니다. 개별 경로를 테스트하거나 모든 경로를 한 번에 테스트할 수 있으며 테스트 중에는 엔드포인트에 메시지가 라우팅되지 않습니다. Azure Portal, Azure Resource Manager, Azure PowerShell 및 Azure CLI를 테스트에 사용할 수 있습니다. 결과는 샘플 메시지가 쿼리와 일치하는지 또는 일치하지 않는지 또는 샘플 메시지나 쿼리 구문이 잘못되어 테스트를 실행할 수 없는지 식별하는 데 도움이 됩니다. 자세히 알아보려면 경로 테스트모든 경로 테스트를 참조하세요.

대기 시간

디바이스-클라우드 원격 분석 메시지를 라우팅하는 경우 첫 번째 경로를 만든 후 엔드투엔드 대기 시간이 약간 증가합니다.

대부분의 경우 대기 시간의 평균 증가는 500밀리초 미만입니다. 그러나 발생하는 대기 시간은 IoT 허브 및 솔루션 아키텍처의 계층에 따라 달라질 수 있으며 더 길어질 수 있습니다. 라우팅: 메시지/이벤트에 대한 메시지 대기 시간 또는 d2c.endpoints.latency.builtIn.events IoT Hub 메트릭을 사용하여 대기 시간을 모니터링할 수 있습니다. 첫 번째 경로 이후에 다른 경로를 만들거나 삭제해도 엔드투엔드 대기 시간에는 영향을 주지 않습니다.

모니터링 및 문제 해결

IoT Hub는 허브 및 메시지 전송 상태에 대한 개요를 제공하는 라우팅 및 엔드포인트와 관련된 여러 가지 메트릭을 제공합니다. 또한 라우팅 쿼리 및 엔드포인트 상태를 평가하는 동안 발생하는 오류는 IoT Hub 리소스 로그의 경로 범주를 사용하여 IoT Hub에 의해 인식되는 것으로 추적할 수 있습니다. IoT Hub에서 메트릭 및 리소스 로그를 사용하는 방법에 대해 자세히 알아보려면 Azure IoT Hub 모니터링을 참조하세요.

REST API 엔드포인트 상태 가져오기를 사용하여 엔드포인트의 상태를 가져올 수 있습니다.

라우팅 문제 해결에 대한 자세한 내용과 지원 정보는 라우팅에 대한 문제 해결 가이드를 참조하세요.