자습서: Azure IoT Hub 메시지 보강 사용
메시지 보강은 메시지를 지정된 엔드포인트로 보내기 전에 추가 정보를 메시지에 스탬핑하는 Azure IoT Hub의 기능입니다. 메시지 보강을 사용하는 한 가지 이유는 다운스트림 처리를 간소화하는 데 사용할 수 있는 데이터를 포함하는 것입니다. 예를 들어, 디바이스 메시지를 디바이스 쌍 태그로 보강하면 고객이 이 정보를 얻기 위해 디바이스 쌍 API를 호출해야 하는 부담을 줄일 수 있습니다. 자세한 내용은 메시지 보강 개요를 참조하세요.
이 자습서의 첫 번째 부분에서는 사용자 지정 엔드포인트를 만들고 메시지를 다른 Azure 서비스로 라우팅하는 방법을 알아보았습니다. 이 자습서에서는 IoT 허브에 대한 메시지 보강을 테스트하는 데 필요한 추가 리소스를 만들고 구성하는 방법을 살펴봅니다. 리소스에는 보강된 메시지를 보관하는 기존 스토리지 계정(자습서의 첫 번째 부분에서 만들어짐)의 두 번째 스토리지 컨테이너와 해당 메시지를 보낼 메시지 경로가 포함됩니다. 메시지 라우팅 및 메시지 보강의 구성을 완료한 후에는 애플리케이션을 사용하여 IoT 허브에 메시지를 보냅니다. 그러면 허브에서는 메시지를 두 스토리지 컨테이너에 모두 라우팅합니다. enriched 스토리지 컨테이너의 엔드포인트에 전송된 메시지만 보강됩니다.
이 자습서에서는 다음 작업을 수행합니다.
- 스토리지 계정에 두 번째 컨테이너를 만듭니다.
- 다른 사용자 지정 엔드포인트를 만들고 IoT Hub에서 메시지를 라우팅합니다.
- 새 엔드포인트로 라우팅되는 메시지 보강을 구성합니다.
- 허브로 메시지를 전송하는 IoT 디바이스를 시뮬레이션하는 앱을 실행합니다.
- 결과를 보고, 메시지 보강이 대상 메시지에 적용되고 있는지 확인합니다.
필수 조건
Azure 구독이 있어야 합니다. Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
자습서: IoT Hub 메시지 라우팅을 사용하여 디바이스 데이터를 Azure Storage로 보내기를 완료하고, 만든 리소스를 유지 관리해야 합니다.
방화벽에서 포트 8883이 열려 있는지 확인합니다. 이 자습서의 디바이스 샘플은 포트 8883을 통해 통신하는 MQTT 프로토콜을 사용합니다. 이 포트는 일부 회사 및 교육용 네트워크 환경에서 차단될 수 있습니다. 이 문제를 해결하는 자세한 내용과 방법은 IoT Hub에 연결(MQTT)을 참조하세요.
Azure Portal에 대한 다른 필수 구성 요소는 없습니다.
스토리지 계정에 두 번째 컨테이너를 만듭니다.
이 자습서의 첫 번째 부분에서 라우트된 메시지에 대한 스토리지 계정과 컨테이너를 만들었습니다. 이제 보강된 메시지에 대한 두 번째 컨테이너를 만들어야 합니다.
Azure Portal을 열고 스토리지 계정을 검색합니다.
이전에 만든 계정을 선택합니다.
스토리지 계정 메뉴의 데이터 스토리지 섹션에서 컨테이너를 선택합니다.
컨테이너를 선택하여 새 컨테이너를 만듭니다.
enriched
컨테이너의 이름을 지정하고 만들기를 선택합니다.
메시지를 두 번째 엔드포인트로 라우팅
보강된 메시지에 대한 두 번째 엔드포인트와 경로를 만듭니다.
Important
이 문서에서는 공유 액세스 서명을 사용하여 서비스에 연결하는 단계를 설명합니다. 이 인증 방법은 테스트와 평가에 편리하지만, Microsoft Entra ID나 관리 ID를 사용하여 서비스를 인증하는 것이 더 안전한 방식입니다. 자세한 내용은 보안 모범 사례 > 클라우드 보안을 참조하세요.
Azure Portal에서 IoT Hub로 이동합니다.
허브 설정 아래의 리소스 메뉴에서 메시지 라우팅을 선택한 다음 추가를 선택합니다.
엔드포인트 탭에서 다음 정보를 제공하여 스토리지 엔드포인트를 만듭니다.
매개 변수 값 엔드포인트 유형 스토리지를 선택합니다. 엔드포인트 이름 ContosoStorageEndpointEnriched
를 입력합니다.Azure Storage 컨테이너 컨테이너 선택을 선택합니다. 프롬프트에 따라 이전 섹션에서 만든 스토리지 계정 및 보강된 컨테이너를 선택합니다. 인코딩 JSON을 선택합니다. 이 필드가 회색으로 표시되면 스토리지 계정 지역은 JSON을 지원하지 않습니다. 이 경우 기본 AVRO를 계속 사용합니다. 나머지 매개 변수에 대한 기본값을 적용하고 만들기 + 다음을 선택합니다.
스토리지 엔드포인트를 추가했으므로 새 경로를 계속 만듭니다. 새 경로에 대해 다음 정보를 제공합니다.
매개 변수 값 이름 ContosoStorageRouteEnriched 데이터 원본 드롭다운 목록에서 디바이스 원격 분석 메시지가 선택되어 있는지 확인합니다. 경로 사용 이 필드가 enabled
로 설정되어 있는지 확인합니다.라우팅 쿼리 쿼리 문자열로 level="storage"
을 입력합니다.만들기 + 보강 추가를 선택합니다.
새 엔드포인트에 메시지 보강 추가
enriched 스토리지 컨테이너로 라우팅될 세 가지 메시지 보강을 만듭니다.
경로 추가 마법사의 보강 탭에서 enriched 스토리지 컨테이너의 엔드포인트로 이동하는 메시지에 대해 세 가지 메시지 보강을 추가합니다.
다음 값을 ContosoStorageEndpointEnriched 엔드포인트에 대한 메시지 보강으로 추가합니다.
속성 값 myIotHub $hubname
DeviceLocation $twin.tags.location
(디바이스 쌍에 위치 태그가 있다고 가정)customerID 6ce345b8-1e4a-411e-9398-d34587459a3a
여기까지 마쳤으면 다음 이미지와 비슷한 보강이 표시됩니다.
추가를 선택하여 메시지 보강을 추가합니다.
이제 보강된 메시지용으로 만든 엔드포인트로 라우팅되는 모든 메시지에 대해 메시지 보강이 설정되었습니다. 디바이스 쌍에 위치 태그를 추가하지 않으려면 테스트 메시지 보강 섹션으로 건너뛰어 자습서를 계속 진행하면 됩니다.
디바이스 쌍에 위치 태그 추가
IoT 허브에 구성된 메시지 보강 중 하나는 디바이스 쌍 경로($twin.tags.location
)에 따라 결정되는 값으로 DeviceLocation의 키를 지정합니다. 디바이스 쌍에 위치 태그가 없는 경우 위치 경로($twin.tags.location
)는 메시지 보강의 DeviceLocation 키 값에 대한 문자열로 스탬핑됩니다.
디바이스 쌍에 위치 태그를 추가하려면 다음 단계를 수행합니다.
Azure Portal에서 IoT Hub로 이동합니다.
IoT 허브의 탐색 메뉴에서 디바이스를 선택한 다음, 디바이스를 선택합니다.
디바이스 페이지 맨 위에 있는 디바이스 쌍 탭을 선택하고 디바이스 쌍의 맨 아래에 있는 닫는 중괄호 바로 앞에 다음 줄을 추가합니다. 그런 다음 저장을 선택합니다.
, "tags": {"location": "Plant 43"}
팁
다음 섹션을 계속 진행하기 전에 5분 정도 기다립니다. 디바이스 쌍에 대한 업데이트가 메시지 보강 값에 반영되는 데는 최대 시간이 걸릴 수 있습니다.
메시지 보강을 사용하여 디바이스 쌍 경로를 처리하는 방법에 대한 자세한 내용은 메시지 보강 제한을 참조하세요. 디바이스 쌍에 대한 자세한 내용은 IoT Hub에서 디바이스 쌍 이해 및 사용을 참조하세요.
메시지 보강 테스트
이제 ContosoStorageEndpointEnriched 엔드포인트에 대한 메시지 보강이 구성되었으므로, 시뮬레이션된 디바이스 애플리케이션을 실행하여 IoT 허브로 메시지를 보냅니다. 현재 메시지 라우팅은 다음과 같이 설정되었습니다.
자습서의 첫 번째 부분에서 만든 스토리지 엔드포인트로 라우팅된 메시지는 보강되지 않고, 만든 스토리지 컨테이너에 저장됩니다.
ContosoStorageEndpointEnriched 스토리지 엔드포인트로 라우팅되는 메시지는 보강되며, enriched 스토리지 컨테이너에 저장됩니다.
이 자습서의 첫 번째 부분에서 SimulatedDevice 콘솔 애플리케이션을 여전히 실행하고 있지 않은 경우 다시 실행합니다.
팁
이 자습서의 Azure CLI 단계를 따르는 경우 별도의 세션에서 샘플 코드를 실행합니다. 이렇게 하면 나머지 CLI 단계를 수행하는 동안 샘플 코드가 계속 실행되도록 허용할 수 있습니다.
샘플 폴더에서
/iot-hub/Tutorials/Routing/SimulatedDevice/
폴더로 이동합니다.이전에 업데이트한 변수 정의는 여전히 유효하지만, 그렇지 않은 경우
Program.cs
파일에서 편집합니다.Program 클래스의 맨 위에서 변수 정의를 찾습니다. 다음 변수를 사용자 고유의 정보로 업데이트합니다.
- s_myDeviceId: 디바이스를 IoT 허브에 등록할 때 할당한 디바이스 ID입니다.
- s_iotHubUri: 형식
IOTHUB_NAME.azure-devices.net
을 사용하는 IoT Hub의 호스트 이름입니다. - s_deviceKey: 디바이스 ID 정보에서 찾을 수 있는 디바이스 기본 키입니다.
파일을 저장 후 닫습니다.
다음과 같이 샘플 코드를 실행합니다.
dotnet run
콘솔 애플리케이션을 몇 분간 실행한 후 데이터를 봅니다.
Azure Portal에서 스토리지 계정으로 이동합니다.
탐색 메뉴에서 스토리지 브라우저를 선택합니다. Blob 컨테이너를 선택하여 이러한 자습서 과정에서 만든 두 컨테이너를 확인합니다.
enriched 컨테이너의 메시지는 메시지 보강을 포함하고 있습니다. 이전에 만든 컨테이너의 메시지는 보강되지 않은 원래 메시지입니다. 맨 아래에 도달할 때까지 enriched 컨테이너로 드릴다운한 후 최근 메시지 파일을 엽니다. 그런 다음, 다른 컨테이너에서 동일한 작업을 수행하여 한 컨테이너는 보강되고 다른 컨테이너는 보강되지 않는지 확인합니다.
보강된 메시지를 살펴보면, "myIotHub"
가 다음과 같이 허브 이름과 위치 및 고객 ID로 보강된 것을 볼 수 있습니다.
{
"EnqueuedTimeUtc":"2019-05-10T06:06:32.7220000Z",
"Properties":
{
"level":"storage",
"myIotHub":"{your hub name}",
"DeviceLocation":"Plant 43",
"customerID":"6ce345b8-1e4a-411e-9398-d34587459a3a"
},
"SystemProperties":
{
"connectionDeviceId":"Contoso-Test-Device",
"connectionAuthMethod":"{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
"connectionDeviceGenerationId":"636930642531278483",
"enqueuedTime":"2019-05-10T06:06:32.7220000Z"
},"Body":"eyJkZXZpY2VJZCI6IkNvbnRvc28tVGVzdC1EZXZpY2UiLCJ0ZW1wZXJhdHVyZSI6MjkuMjMyMDE2ODQ4MDQyNjE1LCJodW1pZGl0eSI6NjQuMzA1MzQ5NjkyODQ0NDg3LCJwb2ludEluZm8iOiJUaGlzIGlzIGEgc3RvcmFnZSBtZXNzYWdlLiJ9"
}
리소스 정리
이 자습서의 두 부분에서 만든 리소스를 모두 제거하려면 리소스 그룹을 삭제합니다. 이렇게 하면 그룹 내에 포함된 모든 리소스가 삭제됩니다. 전체 리소스 그룹을 삭제하지 않으려면 삭제할 개별 리소스를 선택하면 됩니다.
- Azure Portal에서 이 자습서의 IoT Hub 및 스토리지 계정이 포함된 리소스 그룹으로 이동합니다.
- 리소스 그룹에 있는 모든 리소스를 검토하여 정리할 리소스를 결정합니다.
- 모든 리소스를 삭제하려는 경우리소스 그룹 삭제를 선택합니다.
- 특정 리소스만 삭제하려면 각 리소스 이름 옆에 있는 확인란을 사용하여 삭제할 리소스를 선택합니다. 그런 다음 삭제를 선택합니다.
다음 단계
이 자습서에서는 엔드포인트로 라우팅되는 IoT Hub 메시지에 대한 메시지 보강을 구성하고 테스트했습니다.
메시지 보강에 대한 자세한 내용은 메시지 보강 개요를 참조하세요.
IoT Hub에 대한 자세한 내용은 다음 자습서로 계속 진행하세요.