다음을 통해 공유


작업 예약 및 브로드캐스트(Azure CLI)

Azure IoT Hub를 사용하여 수백만 대의 디바이스를 업데이트하는 작업을 예약하고 추적합니다. 작업을 사용하여 다음을 수행합니다.

  • desired 속성 업데이트
  • tags 업데이트
  • 직접 메서드 호출

개념적으로 작업(job)은 이러한 작업(action) 중 하나를 래핑하고 디바이스 집합에 대해 실행 진행 상태를 추적합니다. 작업이 상호 작용하는 디바이스 집합은 디바이스 쌍 쿼리에 의해 정의됩니다. 예를 들어 백 엔드 앱은 작업을 사용하여 디바이스 쌍 쿼리로 지정되고 향후에 예약된 10,000개 디바이스에서 다시 부팅 메서드를 호출할 수 있습니다. 그러면 이러한 각 디바이스에서 다시 부팅 메서드를 받고 실행할 때 해당 애플리케이션에서 진행 상황을 추적할 수 있습니다.

이러한 기능에 대한 자세한 내용은 다음 문서를 참조하세요.

참고 항목

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

이 문서에서는 두 개의 Azure CLI 세션을 만드는 방법을 보여 줍니다.

  • 시뮬레이션된 디바이스를 만드는 세션. 시뮬레이션된 디바이스는 직접 메서드가 호출될 때 상태 코드 및 JSON 페이로드를 반환하도록 구성됩니다.

  • 두 개의 예약된 작업을 만드는 세션. 첫 번째 작업은 직접 메서드를 호출하고 두 번째 작업은 다른 세션에서 만든 시뮬레이션된 디바이스에서 원하는 디바이스 쌍 속성을 업데이트합니다.

필수 조건

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

  • Azure 구독의 IoT Hub 아직 허브가 없는 경우 IoT Hub 만들기의 단계를 따를 수 있습니다.

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

Cloud Shell 준비

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

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

    Cloud Shell 아이콘을 강조 표시하는 Azure Portal의 페이지 헤더에 있는 전역 컨트롤의 스크린샷

    참고 항목

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

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

    참고 항목

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

    도구 모음에서 환경 선택기를 강조 표시하는 Azure Cloud Shell 창의 스크린샷

두 CLI 세션 준비

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

  • 첫 번째 세션은 IoT Hub와 통신하는 IoT 디바이스를 시뮬레이트합니다.
  • 두 번째 세션은 IoT 허브를 사용하여 시뮬레이션된 디바이스에 대한 작업을 예약합니다.

참고 항목

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

  1. 첫 번째 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를 사용합니다.

  2. 두 번째 CLI 세션을 엽니다. 브라우저에서 Cloud Shell을 사용하는 경우 첫 번째 CLI 세션의 도구 모음에서 새 세션 열기 아이콘을 선택합니다. CLI를 로컬로 사용하는 경우 두 번째 CLI 인스턴스를 엽니다.

    도구 모음에서 새 세션 열기 아이콘을 강조 표시하는 Azure Cloud Shell 창의 스크린샷

디바이스 만들기 및 시뮬레이션

이 섹션에서는 CLI 세션에서 IoT Hub에 대한 디바이스 ID를 만든 다음 해당 디바이스 ID를 사용하여 디바이스를 시뮬레이션합니다. 시뮬레이션된 디바이스는 두 번째 CLI 세션에서 예약하는 작업에 응답합니다.

시뮬레이트된 디바이스를 만들고 시작 하려면 다음을 실행합니다.

  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 device simulate 명령을 실행하여 다음 자리 표시자를 해당 값으로 바꿉니다. 이 명령은 이전 단계에서 만든 디바이스를 시뮬레이션합니다. 시뮬레이션된 디바이스는 직접 메서드가 호출될 때마다 상태 코드 및 페이로드를 반환하도록 구성됩니다.

    {DeviceName}. 시뮬레이션된 디바이스의 이름입니다.

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

    az iot device simulate --device-id {DeviceName} --hub-name {HubName} \
                           --method-response-code 201 \
                           --method-response-payload '{"result":"Direct method successful"}'
    

    기본적으로 az iot device simulate 명령은 메시지 간에 3초 간격으로 100개의 디바이스-클라우드 메시지를 보냅니다. 시뮬레이션은 모든 메시지가 전송된 후 종료됩니다. 시뮬레이션을 더 오래 실행하려면 --msg-count 매개 변수를 사용하여 더 많은 메시지를 지정하거나 --msg-interval 매개 변수를 사용하여 메시지 간에 더 긴 간격을 지정할 수 있습니다. 명령을 다시 실행하여 시뮬레이션된 디바이스를 다시 시작할 수도 있습니다.

직접 메서드를 호출하도록 작업 예약

이 섹션에서는 두 번째 CLI 세션에서 작업을 예약하여 첫 번째 CLI 세션에서 실행되는 시뮬레이션된 디바이스에서 직접 메서드를 호출합니다.

  1. 첫 번째 CLI 세션에서 시뮬레이트된 디바이스가 실행 중인지 확인합니다. 그렇지 않은 경우 디바이스 만들기 및 시뮬레이션에서 az iot device simulate 명령을 다시 실행하여 다시 시작합니다.

  2. 두 번째 CLI 세션에서 az iot hub job create 명령을 실행하여 다음 자리 표시자를 해당 값으로 바꿉니다. 이 예제에서는 디바이스에 대한 기존 메서드가 없습니다. 이 명령은 시뮬레이션된 디바이스에서 예제 메서드 이름을 호출하는 작업을 예약하여 메서드의 페이로드에 null 값을 제공합니다. 메서드는 응답에 상태 코드 및 페이로드를 제공합니다.

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

    {JobName}. 예약된 작업의 이름입니다. 작업 이름은 고유하므로 이 명령을 실행할 때마다 다른 작업 이름을 선택합니다.

    {MethodName}. 직접 메서드의 이름입니다. 시뮬레이션된 디바이스에는 기존 메서드가 없으므로 이 명령에 원하는 이름을 선택할 수 있습니다.

    {DeviceName}. 시뮬레이션된 디바이스의 이름입니다.

    az iot hub job create --hub-name {HubName} --job-id {JobName} \
                          --job-type scheduleDeviceMethod \
                          --method-name {MethodName} --method-payload 'null' \
                          --query-condition "deviceId = '{DeviceName}'"
    

    직접 메서드를 호출하는 작업 az iot hub job create 명령을 예약할 때는 --method-payload매개 변수와 --method-name 선택적 매개 변수 모두에 대한 값을 지정해야 합니다. 페이로드를 허용하지 않는 직접 메서드의 경우 --method-payload 매개 변수에 대해 null을 지정합니다.

  3. 첫 번째 CLI 세션에서 출력에 메서드 호출이 표시되는지 확인합니다. 다음 스크린샷에서는 이전 단계의 az iot hub job create CLI 명령에서 {DeviceName}{MethodName} 자리 표시자에 각각 SampleDeviceSampleMethod를 사용했습니다.

    메서드가 호출된 후 출력을 표시하는 시뮬레이션된 디바이스의 스크린샷

디바이스 쌍의 속성을 업데이트하는 작업 예약

이 섹션에서는 두 번째 CLI 세션에서 작업을 예약하여 첫 번째 CLI 세션에서 실행되는 시뮬레이션된 디바이스에서 desired 디바이스 쌍 속성을 업데이트합니다.

  1. 첫 번째 CLI 세션에서 시뮬레이트된 디바이스가 실행 중인지 확인합니다. 그렇지 않은 경우 디바이스 만들기 및 시뮬레이션에서 az iot device simulate 명령을 다시 실행하여 다시 시작합니다.

  2. 두 번째 CLI 세션에서 az iot hub job create 명령을 실행하여 다음 자리 표시자를 해당 값으로 바꿉니다. 이 예제에서는 시뮬레이션된 디바이스에 대한 desired 트윈 속성 BuildingNo의 값을 45로 설정하는 작업을 예약합니다.

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

    {JobName}. 예약된 작업의 이름입니다. 작업 이름은 고유하므로 이 명령을 실행할 때마다 다른 작업 이름을 선택합니다.

    {DeviceName}. 시뮬레이션된 디바이스의 이름입니다.

    az iot hub job create --hub-name {HubName} --job-id {JobName} \
                          --job-type scheduleUpdateTwin \
                          --twin-patch '{"properties":{"desired": {"BuildingNo": 45}}}' \
                          --query-condition "deviceId = '{DeviceName}'"
    
  3. 첫 번째 CLI 세션에서 출력에 reported 디바이스 쌍 속성에 대한 성공적인 업데이트가 표시되는지 확인합니다. 이는 desired 디바이스 쌍 속성도 업데이트되었음을 나타냅니다.

    디바이스 쌍 속성이 업데이트된 후 출력을 표시하는 시뮬레이션된 디바이스의 스크린샷.

다음 단계

이 문서에서는 Azure CLI를 사용하여 디바이스를 시뮬레이션하고 작업을 예약하여 직접 메서드를 실행하고 시뮬레이션된 디바이스에 대한 디바이스 쌍의 속성을 업데이트했습니다.

IoT 허브 및 디바이스 관리 패턴을 계속 살펴보려면 Raspberry Pi 3 B+ 참조 이미지를 사용하는 Azure IoT Hub용 디바이스 업데이트 자습서에서 이미지를 업데이트합니다.