IoT Hub의 ID 레지스트리 이해

모든 IoT Hub에는 IoT Hub에 연결이 허용된 디바이스 및 모듈에 대한 정보를 저장하는 ID 레지스트리가 있습니다. 디바이스 또는 모듈을 IoT Hub에 연결할 수 있으려면 IoT Hub의 ID 레지스트리에 해당 디바이스 또는 모듈에 대한 항목이 있어야 합니다. 또한 디바이스 또는 모듈은 ID 레지스트리에 저장된 자격 증명에 따라 IoT Hub로 인증되어야 합니다.

ID 레지스트리에 저장된 디바이스 또는 모듈 ID는 대/소문자를 구분합니다.

높은 수준에서 ID 레지스트리는 디바이스 또는 모듈 ID 리소스의 REST를 지원하는 컬렉션입니다. ID 레지스트리에 항목을 추가하면 IoT Hub가 진행 중인 클라우드-디바이스 메시지를 포함하는 큐 등의 디바이스별 리소스 집합을 만듭니다.

다음과 같은 작업이 필요할 때 ID 레지스트리를 사용합니다.

  • IoT Hub에 연결되는 디바이스 또는 모듈을 프로비전합니다.
  • 허브의 디바이스 또는 모듈 지향 엔드포인트에 대한 디바이스별/모듈별 액세스를 제어합니다.

ID 레지스트리 작업

IoT Hub ID 레지스트리는 다음과 같은 작업을 노출합니다.

  • 디바이스 또는 모듈 ID 만들기
  • 디바이스 또는 모듈 ID 업데이트
  • 디바이스 또는 모듈 ID를 ID별로 검색
  • 디바이스 또는 모듈 ID 삭제
  • 최대 1000개의 ID 목록
  • 디바이스 ID를 Azure Blob Storage로 내보내기
  • Azure Blob Storage에서 디바이스 ID 가져오기

이러한 모든 작업은 RFC7232에 지정된 낙관적 동시성을 사용할 수 있습니다.

Important

IoT Hub의 ID 레지스트리에서 모든 ID를 검색하는 유일한 방법은 내보내기 기능을 사용하는 것입니다.

IoT Hub ID 레지스트리:

  • 애플리케이션 메타데이터가 없습니다.

Important

디바이스 관리 및 프로비전 작업에 대해서는 ID 레지스트리만 사용합니다. 런타임 시 처리량이 높은 작업은 ID 레지스트리에서 수행하는 작업에 따라 달라지지 합니다. 예를 들어 명령을 보내기 전에 디바이스의 연결 상태를 검사하는 것은 지원되는 패턴이 아닙니다. ID 레지스트리에 대한 제한 속도를 확인해야 합니다.

참고 항목

생성 후 디바이스 또는 모듈 ID를 검색하는 데 몇 초 정도 걸릴 수 있습니다. 오류가 발생한 경우 디바이스 또는 모듈 ID의 get 작업을 다시 시도하세요.

디바이스 비활성화

ID 레지스트리에서 ID의 상태 속성을 업데이트하여 디바이스를 사용하지 않을 수 있습니다. 일반적으로 이 속성은 두 가지 시나리오에 사용합니다.

  • 오케스트레이션 과정을 프로비전하는 동안입니다. 자세한 내용은 디바이스 프로비전을 참조하세요.

  • 어떤 이유로든 손상되거나 권한이 없는 디바이스를 사용하도록 고려합니다.

    Important

    IoT Hub는 인증서 기반 인증을 사용하여 디바이스를 인증할 때 인증서 해지 목록을 확인하지 않습니다. 잠재적으로 손상된 인증서로 인해 IoT Hub에 연결하지 못하도록 차단해야 하는 디바이스가 있는 경우 ID 레지스트리에서 디바이스를 사용하지 않도록 설정해야 합니다.

이 기능을 모듈에는 사용할 수 없습니다.

자세한 내용은 IoT 허브에서 디바이스 사용 안 함 또는 삭제를 참조하세요.

디바이스 ID 가져오기 및 내보내기

IoT Hub 리소스 공급자 엔드포인트에서 비동기 작업을 사용하여 IoT Hub의 ID 레지스트리에서 디바이스 ID를 대량으로 내보낼 수 있습니다. 내보내기는 고객이 제공한 Blob 컨테이너를 사용하여 ID 레지스터에서 읽은 디바이스 ID 데이터를 저장하는 장기 실행 작업입니다.

IoT Hub 리소스 공급자 엔드포인트에서 비동기 작업을 사용하여 IoT Hub의 ID 레지스트리로 디바이스 ID를 대량으로 가져올 수 있습니다. 가져오기는 고객이 제공한 Blob 컨테이너의 데이터를 사용하여 디바이스 ID 데이터를 ID 레지스트리에 쓰는 장기 실행 작업입니다.

API를 가져오고 내보내는 작업에 대한 자세한 정보는 IoT Hub 리소스 공급자 REST API를 참조하세요. 가져오기 및 내보내기 작업 실행에 대한 자세한 내용은 IoT Hub 디바이스 ID의 대량 관리를 참조하세요.

REST API 또는 IoT Hub 서비스 SDK 중 하나를 통해 서비스 API를 사용하여 IoT 허브에서 디바이스 ID를 내보내고 가져올 수도 있습니다.

디바이스 프로비전

지정된 IoT 솔루션이 저장하는 디바이스 데이터는 해당 솔루션의 요구 사항에 따라 다릅니다. 하지만 어떤 솔루션이든 최소한 디바이스 ID와 인증 키를 저장해야 합니다. Azure IoT Hub는 ID, 인증 키 및 상태 코드와 같은 각 디바이스에 대한 값을 저장할 수 있는 ID 레지스트리를 포함합니다. 솔루션은 Table 스토리지, Blob Storage 또는 Azure Cosmos DB와 같은 기타 Azure 서비스를 사용하여 다른 디바이스 데이터를 저장할 수 있습니다.

디바이스 프로비전 은 솔루션 저장소에 초기 디바이스 데이터를 추가하는 프로세스입니다. 새 디바이스를 허브에 연결하도록 하려면 디바이스 ID 및 키를 IoT Hub ID 레지스트리에 추가해야 합니다. 프로비전 프로세스의 일부로, 다른 솔루션 저장소에서 디바이스 특정 데이터를 초기화해야 할 수 있습니다. 또한 Azure IoT Hub Device Provisioning Service를 사용하여 사용자 개입 없이, 하나 이상의 IoT Hub에 대해 무인 Just-In-Time 프로비저닝을 수행할 수도 있습니다. 자세한 내용은 프로비저닝 서비스 설명서를 참조하세요.

디바이스 및 모듈 수명 주기 알림

디바이스 ID가 생성 또는 삭제되면 IoT Hub에서 수명 주기 알림을 전송하여 IoT 솔루션에 알릴 수 있습니다. 이를 수행하려면 IoT 솔루션이 경로를 만들고 데이터 원본을 DeviceLifecycleEvents와 동일하게 설정해야 합니다. 기본적으로 수명 주기 알림이 전송되지 않습니다. 즉, 이러한 경로는 미리 존재하지 않습니다. 데이터 원본이 DeviceLifecycleEvents와 같은 경로를 만들면 디바이스 ID 및 모듈 ID에 관련된 수명 주기 이벤트가 둘 다 전송됩니다. 그러나 이벤트가 모듈 ID 또는 디바이스 ID에 대해 생성되었는지 여부에 따라 메시지 콘텐츠가 달라집니다. IoT Edge 모듈의 경우 모듈 ID 만들기 흐름이 다른 모듈과 다르기 때문에, IoT Edge 모듈의 경우 업데이트된 IoT Edge 모듈 ID에 해당하는 IoT Edge 디바이스가 실행 중인 경우에만 만들기 알림이 전송됩니다. 다른 모든 모듈의 경우 모듈 ID가 IoT Hub 쪽에서 업데이트될 때마다 수명 주기 알림이 전송됩니다. 알림 메시지에 반환된 속성 및 본문에 대한 자세한 내용은 비원격 분석 이벤트 스키마를 참조하세요.

디바이스 ID 속성

디바이스 ID는 다음 속성을 사용하여 JSON 문서로 표시됩니다.

속성 옵션 설명
deviceId 필요한 경우 업데이트에서 읽기 전용입니다. ASCII 7 비트 영숫자 문자 + 특정 특수 문자 - . % _ * ? ! ( ) , : = @ $ '의 대/소문자 구분 문자열(최대 128자 길이)입니다. 특수 문자 + #은 지원되지 않습니다.
generationId 필요한 경우 읽기 전용 IoT Hub에서 생성된 최대 128자의 대/소문자 구분 문자열입니다. 이 값은 삭제되고 다시 만들 때와 동일한 deviceId로 디바이스를 구분하는 데 사용됩니다.
etag 필요한 경우 읽기 전용 RFC7232에 따라 디바이스 ID에 대해 약한 ETag를 나타내는 문자열입니다.
authentication 선택적 인증 정보 및 보안 자료를 포함하는 복합 개체입니다. 자세한 내용은 REST API 문서에서 인증 메커니즘을 참조하세요.
capabilities 선택적 디바이스의 기능 집합입니다. 예를 들어 디바이스가 에지 디바이스인지 여부입니다. 자세한 내용은 REST API 문서에서 디바이스 기능을 참조하세요.
deviceScope 선택적 디바이스의 범위입니다. 에지 디바이스에서 자동으로 만들어지고 변경할 수 없습니다. 비-에지 디바이스에서 더 이상 사용되지 않습니다. 그러나 자식(리프) 디바이스에서는 API의 이전 버전과의 호환성을 위해 이 속성을 parentScopes 속성(부모 디바이스의 deviceScope)과 동일한 값으로 설정합니다. 자세한 내용은 게이트웨이로서의 IoT Edge: 부모 및 자식 관계를 참조하세요.
parentScopes 선택적 자식 디바이스의 직접적인 부모 범위(부모 디바이스의 deviceScope 속성 값) 에지 디바이스에서 디바이스에 부모가 없으면 값이 비어 있습니다. 비-에지 디바이스에서 디바이스에 부모가 없으면 속성이 존재하지 않습니다. 자세한 내용은 게이트웨이로서의 IoT Edge: 부모 및 자식 관계를 참조하세요.
status 필수 액세스 표시기입니다. 사용 또는 사용 안 함으로 설정할 수 있습니다. 사용이면 디바이스를 연결할 수 있습니다. 사용 안 함이면 이 디바이스는 디바이스 연결 엔드포인트에 액세스할 수 없습니다.
statusReason 선택적 디바이스 ID 상태의 원인을 저장하는 128자 길이의 문자열입니다. UTF-8 문자를 모두 허용합니다.
statusUpdateTime 읽기 전용 마지막 상태 업데이트의 시간과 날짜를 보여 주는 임시 표시기입니다.
connectionState 읽기 전용 연결 상태를 나타내는 필드: 연결됨 또는 연결 끊김. 이 필드는 디바이스 연결 상태의 IoT Hub 뷰를 나타냅니다. 중요: 이 필드는 개발/디버깅 목적으로만 사용해야 합니다. 연결 상태는 MQTT 또는 AMQP를 사용하여 디바이스에 대해서만 업데이트됩니다. 또한 이는 프로토콜 수준의 ping(MQTT ping 또는 AMQP ping)을 기반으로 하고 있으며 최대 5분 동안만 지연이 될 수 있습니다. 이러한 이유로, 연결이 끊어졌지만 연결된 것으로 보고된 디바이스와 같이 거짓 긍정이 있을 수 있습니다.
connectionStateUpdatedTime 읽기 전용 연결 상태가 마지막으로 업데이트된 날짜 및 시간을 표시하는 임시 표시기입니다.
lastActivityTime 읽기 전용 디바이스 연결이 마지막으로 연결되거나 메시지를 받거나 보낸 날짜 및 시간을 표시하는 임시 표시기입니다. 이 속성은 궁극적으로 일치하지만 최대 5~10분이 지연될 수 있습니다. 이 이유로, 프로덕션 시나리오에서는 사용하면 안 됩니다.

참고 항목

연결 상태는 연결 상태의 IoT Hub 뷰만을 나타낼 수 있습니다. 이 상태에 대한 업데이트는 네트워크 상태 및 구성에 따라 지연될 수도 있습니다.

참고 항목

현재 디바이스 SDK는 deviceId에서 +# 문자를 지원하지 않습니다.

모듈 ID 속성

모듈 ID는 다음 속성을 사용하여 JSON 문서로 표현됩니다.

속성 옵션 설명
deviceId 필요한 경우 업데이트에서 읽기 전용입니다. ASCII 7 비트 영숫자 문자 + 특정 특수 문자 - . + % _ # * ? ! ( ) , : = @ $ '의 대/소문자 구분 문자열(최대 128자 길이)입니다.
moduleId 필요한 경우 업데이트에서 읽기 전용입니다. ASCII 7 비트 영숫자 문자 + 특정 특수 문자 - . + % _ # * ? ! ( ) , : = @ $ '의 대/소문자 구분 문자열(최대 128자 길이)입니다.
generationId 필요한 경우 읽기 전용 IoT Hub에서 생성된 최대 128자의 대/소문자 구분 문자열입니다. 이 값은 삭제되고 다시 만들 때와 동일한 deviceId로 디바이스를 구분하는 데 사용됩니다.
etag 필요한 경우 읽기 전용 RFC7232에 따라 디바이스 ID에 대해 약한 ETag를 나타내는 문자열입니다.
authentication 선택적 인증 정보 및 보안 자료를 포함하는 복합 개체입니다. 자세한 내용은 REST API 문서에서 인증 메커니즘을 참조하세요.
managedBy 선택적 이 모듈을 관리하는 사람을 식별합니다. 예를 들어 에지 런타임이 이 모듈을 소유하는 경우 이 값은 "IoT Edge"입니다.
cloudToDeviceMessageCount 읽기 전용 모듈에 전송하기 위해 현재 큐에 있는 클라우드 대 모듈 메시지 수입니다.
connectionState 읽기 전용 연결 상태를 나타내는 필드: 연결됨 또는 연결 끊김. 이 필드는 디바이스 연결 상태의 IoT Hub 뷰를 나타냅니다. 중요: 이 필드는 개발/디버깅 목적으로만 사용해야 합니다. 연결 상태는 MQTT 또는 AMQP를 사용하여 디바이스에 대해서만 업데이트됩니다. 또한 이는 프로토콜 수준의 ping(MQTT ping 또는 AMQP ping)을 기반으로 하고 있으며 최대 5분 동안만 지연이 될 수 있습니다. 이러한 이유로, 연결이 끊어졌지만 연결된 것으로 보고된 디바이스와 같이 거짓 긍정이 있을 수 있습니다.
connectionStateUpdatedTime 읽기 전용 연결 상태가 마지막으로 업데이트된 날짜 및 시간을 표시하는 임시 표시기입니다.
lastActivityTime 읽기 전용 디바이스 연결이 마지막으로 연결되거나 메시지를 받거나 보낸 날짜 및 시간을 표시하는 임시 표시기입니다.

참고 항목

현재 디바이스 SDK는 deviceIdmoduleId에서 +# 문자를 지원하지 않습니다.

추가 참조 자료

IoT Hub 개발자 가이드의 다른 참조 문서:

  • IoT Hub 엔드포인트는 각 IoT Hub에서 런타임 및 관리 작업에 대해 공개하는 다양한 엔드포인트에 대해 설명합니다.

  • 제한 및 할당량은 IoT Hub 서비스에 적용되는 할당량과 제한 동작에 대해 설명합니다.

  • Azure IoT 디바이스 및 서비스 SDK - IoT Hub와 상호 작용하는 디바이스 및 서비스 앱 모두를 개발할 때 사용할 수 있는 다양한 언어 SDK를 나열합니다.

  • IoT Hub 쿼리 언어는 IoT Hub에서 디바이스 쌍 및 작업에 대한 정보를 검색하는 데 사용할 수 있는 쿼리 언어에 대해 설명합니다.

  • IoT Hub MQTT 지원은 MQTT 프로토콜에 대한 IoT Hub 지원에 대해 자세히 설명합니다.

다음 단계

IoT Hub ID 레지스트리를 사용하는 방법에 대해 알아봤으니 다음 IoT Hub 개발자 가이드 문서를 살펴보세요.

IoT Hub Device Provisioning Service를 사용하여 무인 Just-In-Time 프로비저닝을 수행하는 방법을 알아보려면 다음을 참조하세요.