다음을 통해 공유


Azure CLI를 사용하여 IoT Hub 모듈 ID 및 모듈 쌍 시작

모듈 ID 및 모듈 쌍은 Azure IoT Hub 디바이스 ID 및 디바이스 쌍과 비슷하지만 더 자세한 세분성을 제공합니다. Azure IoT Hub 디바이스 ID와 디바이스 쌍은 백 엔드 애플리케이션에서 디바이스를 구성할 수 있도록 하고 디바이스 상태를 표시하는 것처럼 모듈 ID와 모듈 쌍은 디바이스의 개별 구성 요소에 대해 해당 기능을 제공합니다. 운영 체제 디바이스 또는 펌웨어 디바이스와 같이 여러 구성 요소가 있는 가능한 디바이스에서 모듈 ID와 모듈 쌍은 각 구성 요소에 대해 격리된 구성과 상태를 허용합니다.

참고 항목

이 문서에서 설명하는 기능은 IoT Hub의 표준 계층에서만 사용할 수 있습니다. 기본 및 표준/무료 IoT Hub 계층에 대한 자세한 내용은 솔루션에 적합한 IoT Hub 계층 선택을 참조하세요.

이 문서에서는 다음을 수행하는 Azure CLI 세션을 만드는 방법을 보여 줍니다.

  • 디바이스 ID를 만든 다음 해당 디바이스에 대한 모듈 ID를 만듭니다.

  • 모듈 ID와 연결된 모듈 쌍에 대한 desired 속성 집합을 업데이트합니다.

필수 조건

  • Azure CLI 브라우저나 Windows 터미널과 같은 앱에서 실행되는 대화형 CLI 셸인 Azure Cloud Shell을 사용하여 이 문서의 명령을 실행할 수도 있습니다. Cloud Shell을 사용하는 경우에는 아무 것도 설치할 필요가 없습니다. CLI를 로컬로 사용하려는 경우 이 문서에는 Azure CLI 버전 2.36 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. Azure CLI를 로컬로 설치하거나 업그레이드하려면 Azure CLI 설치를 참조하세요.

  • IoT 허브. CLI 또는 Azure Portal을 사용하여 만듭니다.

  • 방화벽에서 포트 8883이 열려 있는지 확인합니다. 이 문서의 샘플은 포트 8883을 통해 통신하는 MQTT 프로토콜을 사용합니다. 이 포트는 일부 회사 및 교육용 네트워크 환경에서 차단될 수 있습니다. 이 문제를 해결하는 자세한 내용과 방법은 IoT Hub에 연결(MQTT)을 참조하세요.

모듈 인증

대칭 키 또는 X.509 인증서를 사용하여 모듈 ID를 인증할 수 있습니다. X.509 인증서 인증의 경우 모듈의 인증서에는 반드시CN=<deviceid>/<moduleid>와 같은 형식의 CN(일반 이름)이 있어야 합니다. 예시:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

Cloud Shell 준비

Azure Cloud Shell을 사용하려면 먼저 이를 시작하고 구성해야 합니다. CLI를 로컬에서 사용하는 경우 CLI 세션 준비 섹션으로 건너뛰세요.

  1. Azure Portal의 페이지 머리글에서 Cloud Shell 아이콘을 선택합니다.

    Screenshot of the global controls from the page header of the Azure portal, highlighting the Cloud Shell icon.

    참고 항목

    Cloud Shell을 처음 사용하는 경우 Cloud Shell을 사용하는 데 필요한 스토리지를 만들라는 메시지가 표시됩니다. 구독을 선택하여 스토리지 계정 및 Microsoft Azure Files 공유를 만듭니다.

  2. Cloud Shell 도구 모음의 환경 선택기를 사용하여 원하는 CLI 환경을 선택합니다. 이 문서에서는 Bash 환경을 사용합니다. PowerShell 환경을 사용해도 됩니다.

    참고 항목

    일부 명령의 경우 BashPowerShell 환경에서는 다른 구문이나 서식이 필요합니다. 자세한 내용은 Azure CLI를 성공적으로 사용하기 위한 팁을 참조하세요.

    Screenshot of an Azure Cloud Shell window, highlighting the environment selector in the toolbar.

CLI 세션 준비

다음으로 Azure CLI 세션을 준비해야 합니다. Cloud Shell을 사용하는 경우 Cloud Shell 탭에서 세션을 실행합니다. 로컬 CLI 클라이언트를 사용하는 경우 CLI 인스턴스에서 세션을 실행합니다.

  1. Cloud Shell을 사용하는 경우 다음 단계로 건너뜁니다. 그렇지 않으면 CLI 세션에서 az login 명령을 실행하여 Azure 계정에 로그인합니다.

    Cloud Shell을 사용하는 경우 Azure 계정에 자동으로 로그인됩니다. Azure CLI 세션과 IoT Hub 간의 모든 통신을 인증하고 암호화합니다. 따라서 이 문서에는 연결 문자열과 같이 실제 디바이스에서 사용하는 추가 인증이 필요하지 않습니다. Azure CLI를 사용한 로그인에 대한 자세한 내용은 Azure CLI를 사용하여 로그인을 참조하세요.

    az login
    
  2. CLI 세션에서 az Extension add 명령을 실행합니다. 이 명령은 Azure CLI용 Microsoft Azure IoT 확장을 CLI 셸에 추가합니다. 확장은 Azure CLI에 IoT Hub, IoT Edge 및 IoT DPS(Device Provisioning Service) 고유의 명령을 추가합니다. 확장을 설치한 후에는 Cloud Shell 세션에서 다시 설치할 필요가 없습니다.

    az extension add --name azure-iot
    

    참고 항목

    이 문서에서는 azure-iot라는 최신 버전의 Azure IoT 확장이 사용됩니다. 레거시 버전은 azure-cli-iot-ext라고 합니다. 한 번에 하나의 버전만 설치해야 합니다. az extension list 명령을 사용하여 현재 설치된 확장의 유효성을 검사할 수 있습니다.

    az extension remove --name azure-cli-iot-ext를 사용하여 레거시 버전의 확장을 제거합니다.

    az extension add --name azure-iot를 사용하여 새 버전의 확장을 추가합니다.

    설치한 확장을 확인하려면 az extension list를 사용합니다.

디바이스 ID 및 모듈 ID 만들기

이 섹션에서는 CLI 세션에서 IoT 허브에 대한 디바이스 ID를 만든 다음, 해당 디바이스 ID를 사용하여 모듈 ID를 만듭니다. 각 디바이스 ID 아래에 최대 50개의 모듈 ID를 만들 수 있습니다.

디바이스 ID 및 모듈 ID를 만들려면:

  1. CLI 세션에서 az iot Hub device-identity create 명령을 실행하고 다음 자리 표시자를 해당 값으로 바꿉니다. 이 명령은 모듈의 디바이스 ID를 만듭니다.

    {DeviceName}. 디바이스의 이름입니다.

    {HubName}. IoT Hub의 이름입니다.

    az iot hub device-identity create --device-id {DeviceName} --hub-name {HubName} 
    
  2. CLI 세션에서 az iot Hub module-identity create 명령을 실행하고 다음 자리 표시자를 해당 값으로 바꿉니다. 이 명령은 이전 단계에서 만든 디바이스 ID 아래에 모듈의 모듈 ID를 만듭니다.

    {DeviceName}. 디바이스의 이름입니다.

    {HubName}. IoT Hub의 이름입니다.

    {ModuleName}. 디바이스 모듈의 이름입니다.

    az iot hub module-identity create --device-id {DeviceName} --hub-name {HubName} \
                                      --module-id {ModuleName}
    

모듈 쌍 업데이트

모듈 ID가 만들어지면 모듈 쌍이 IoT Hub에서 암시적으로 생성됩니다. 이 섹션에서는 CLI 세션을 사용하여 이전 섹션에서 만든 모듈 ID와 연결된 모듈 쌍의 desired 속성 집합을 업데이트합니다.

  1. CLI 세션에서 az iot Hub module-twin update 명령을 실행하고 다음 자리 표시자를 해당 값으로 바꿉니다. 이 예에서는 이전 섹션에서 만든 모듈 ID에 대한 모듈 쌍의 여러 desired 속성을 업데이트합니다.

    {DeviceName}. 디바이스의 이름입니다.

    {HubName}. IoT Hub의 이름입니다.

    {ModuleName}. 디바이스 모듈의 이름입니다.

    az iot hub module-twin update --device-id {DeviceName} --hub-name {HubName} \
                                  --module-id {ModuleName} \
                                  --desired '{"conditions":{"temperature":{"warning":75, "critical":100}}}'
    
  2. CLI 세션에서 JSON 응답에 업데이트 작업 결과가 표시되는지 확인합니다. 다음 JSON 응답 예에서는 az iot hub module-twin update CLI 명령의 {DeviceName}{ModuleName} 자리 표시자에 각각 SampleDeviceSampleModule을 사용했습니다.

    {
      "authenticationType": "sas",
      "capabilities": null,
      "cloudToDeviceMessageCount": 0,
      "connectionState": "Disconnected",
      "deviceEtag": "Mzg0OEN1NzW=",
      "deviceId": "SampleDevice",
      "deviceScope": null,
      "etag": "AAAAAAAAAAI=",
      "lastActivityTime": "0001-01-01T00:00:00+00:00",
      "modelId": "",
      "moduleId": "SampleModule",
      "parentScopes": null,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
            "$lastUpdatedVersion": 2,
            "conditions": {
              "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
              "$lastUpdatedVersion": 2,
              "temperature": {
                "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
                "$lastUpdatedVersion": 2,
                "critical": {
                  "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
                  "$lastUpdatedVersion": 2
                },
                "warning": {
                  "$lastUpdated": "2023-02-17T21:26:10.5835633Z",
                  "$lastUpdatedVersion": 2
                }
              }
            }
          },
          "$version": 2,
          "conditions": {
            "temperature": {
              "critical": 100,
              "warning": 75
            }
          }
        },
        "reported": {
          "$metadata": {
            "$lastUpdated": "0001-01-01T00:00:00Z"
          },
          "$version": 1
        }
      },
      "status": "enabled",
      "statusReason": null,
      "statusUpdateTime": "0001-01-01T00:00:00+00:00",
      "tags": null,
      "version": 3,
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      }
    }
    

다음 단계

Azure CLI를 사용하여 IoT 솔루션을 확장하고 디바이스 업데이트를 예약하는 방법을 알아보려면 작업 예약 및 브로드캐스트를 참조하세요.

IoT Hub 및 엔드투엔드 이미지 기반 업데이트와 같은 디바이스 관리 패턴을 계속 시작하려면 Raspberry Pi 3 B+ 참조 이미지를 사용한 Device Update for Azure IoT Hub 문서를 참조하세요.