단일 디바이스 또는 대규모 IoT Edge 자동 배포 이해

적용 대상:IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4는 지원되는 릴리스입니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

자동 배포 및 계층화된 배포는 많은 수의 IoT Edge 디바이스에서 모듈을 관리하고 구성하는 데 도움이 됩니다.

Azure IoT Edge는 IoT Edge 디바이스에서 실행되도록 모듈을 구성하는 두 가지 방법을 제공합니다. 첫 번째 방법은 디바이스별로 모듈을 배포하는 것입니다. 배포 매니페스트를 만든 다음, 이름으로 특정 디바이스에 적용합니다. 두 번째 방법은 정의된 조건 집합을 충족하는, 등록된 디바이스에 모듈을 자동으로 배포하는 것입니다. 배포 매니페스트를 만든 다음, 디바이스 쌍의 태그를 기준으로 배포 매니페스트를 적용할 디바이스를 정의합니다.

디바이스별 및 자동 배포는 결합할 수 없습니다. 자동 배포(계층화된 배포 사용 여부)를 사용하여 IoT Edge 디바이스를 대상으로 지정하기 시작하면 디바이스별 배포가 더 이상 지원되지 않습니다.

이 문서에서는 IoT Edge 자동 배포라고 통칭하는 대규모 디바이스에 대한 구성 및 모니터링에 대해 집중적으로 설명합니다.

기본 배포 단계는 다음과 같습니다.

  1. 운영자가 모듈 집합과 대상 디바이스를 설명하는 배포 매니페스트를 정의합니다.
  2. 따라서, IoT Hub 서비스는 모든 대상 디바이스와 통신하여 선언된 모듈로 구성합니다.
  3. IoT Hub 서비스는 IoT Edge 디바이스에서 상태를 검색하여 운영자에게 제공합니다. 예를 들어 운영자는 Edge 디바이스가 성공적으로 구성되지 않았거나 런타임 중에 모듈이 실패한 경우를 확인할 수 있습니다.
  4. 언제든지 새로 대상으로 지정된 IoT Edge 디바이스가 온라인 상태가 되고 IoT Hub로 연결하면 배포용으로 구성됩니다.

이 문서에서는 배포 구성 및 모니터링과 관련된 각 구성 요소를 설명합니다. 배포 만들기 및 업데이트에 대한 연습은 대규모 IoT Edge 모듈 배포 및 모니터링을 참조하세요.

배포

IoT Edge 자동 배포는 대상 IoT Edge 디바이스 집합에서 인스턴스로 실행되도록 IoT Edge 모듈 이미지를 할당합니다. 자동화된 배포는 해당 초기화 매개 변수가 있는 모듈의 목록을 포함하도록 IoT Edge 배포 매니페스트를 구성하여 작동합니다. 배포는 단일 디바이스(디바이스 ID 기반) 또는 디바이스 그룹(태그 기반)에 할당할 수 있습니다. IoT Edge 디바이스는 배포 매니페스트를 받은 후 해당 컨테이너 리포지토리에서 컨테이너 이미지를 다운로드하고 설치한 다음 적절하게 구성합니다. 배포가 만들어지면 운영자가 배포 상태를 모니터링하여 대상 디바이스가 제대로 구성되었는지 확인할 수 있습니다.

IoT Edge 디바이스만 배포를 사용하여 구성할 수 있습니다. 배포를 수신하기 전에 다음 필수 구성 요소가 디바이스에 있어야 합니다.

  • 기본 운영 체제
  • Moby 또는 Docker와 같은 컨테이너 관리 시스템
  • IoT Edge 런타임 프로비전

배포 매니페스트

배포 매니페스트는 대상 IoT Edge 디바이스에 구성할 모듈을 설명하는 JSON 문서입니다. 여기에는 필요한 시스템 모듈(특히 IoT Edge 에이전트 및 IoT Edge 허브)을 포함하여 모든 모듈에 대한 구성 메타데이터가 포함되어 있습니다.

각 모듈의 구성 메타데이터에는 다음 항목이 포함됩니다.

  • 버전
  • Type
  • 상태(예: 실행 중 또는 중지됨)
  • 다시 시작 정책
  • 이미지 및 컨테이너 레지스트리
  • 데이터 입력 및 출력 경로

모듈 이미지가 프라이빗 컨테이너 레지스트리에 저장된 경우 IoT Edge 에이전트는 레지스트리 자격 증명을 보관합니다.

대상 조건

대상 디바이스 조건은 배포의 수명 동안 지속적으로 평가됩니다. 요구 사항을 충족하는 새 디바이스가 모두 포함되고, 더 이상 요구 사항을 충족하지 않는 기존 디바이스는 제거됩니다. 서비스에서 대상 조건 변경을 탐지하면 배포가 다시 활성화됩니다.

예를 들어 배포의 대상 조건이 tags.environment = 'prod'인 경우 다시 활성화됩니다. 배포를 시작할 때는 10개의 프로덕션 디바이스가 있습니다. 이 10개 디바이스에 모듈이 성공적으로 설치됩니다. IoT Edge 에이전트 상태는 총 10개 디바이스, 성공한 응답 10개, 실패한 응답 0개, 보류 중인 응답 0개로 표시됩니다. 이제 tags.environment = 'prod'인 디바이스 5개를 추가합니다. 이제 새 디바이스 5개에 배포하려고 시도하는 동안 서비스에서 변경을 감지하고 IoT Edge 에이전트 상태는 총 15개 디바이스, 성공한 응답 10개, 실패한 응답 0개, 보류 중인 응답 5개가 표시됩니다.

배포에 대상 조건이 없는 경우 디바이스에 적용되지 않습니다.

디바이스 쌍 태그, 디바이스 쌍 reported 속성 또는 deviceId에 부울 조건을 사용하여 대상 디바이스를 선택합니다. 태그가 있는 조건을 사용하려면 속성과 동일한 수준의 디바이스 쌍에 "tags":{} 섹션을 추가해야 합니다. 디바이스 쌍의 태그에 대한 자세한 내용은 IoT Hub의 디바이스 쌍 이해 및 사용을 참조하세요. 쿼리 작업에 대한 자세한 내용은 IoT Hub 쿼리 언어 연산자 및 IS_DEFINED 함수를 참조하세요.

대상 조건의 예:

  • deviceId ='linuxprod1'
  • tags.environment ='prod'
  • tags.environment = 'prod' AND tags.location = 'westus'
  • tags.environment = 'prod' OR tags.location = 'westus'
  • tags.operator = 'John' AND tags.environment = 'prod' AND NOT deviceId = 'linuxprod1'
  • properties.reported.devicemodel = '4000x'
  • IS_DEFINED(tags.remote)
  • NOT IS_DEFINED(tags.location.building)
  • tags.environment != null
  • [none]

대상 조건을 생성할 때 다음 제약 조건을 고려합니다.

  • 디바이스 쌍에서 태그, reported 속성 또는 deviceId를 사용하여 대상 조건만 작성할 수 있습니다.
  • 큰따옴표는 대상 조건의 어떤 부분에도 허용되지 않습니다. 작은따옴표를 사용합니다.
  • 작은따옴표는 대상 조건의 값을 나타냅니다. 따라서 작은따옴표가 디바이스 이름의 일부인 경우 또 다른 작은따옴표로 작은따옴표를 이스케이프해야 합니다. 예를 들어 operator'sDevice라는 디바이스를 대상으로 지정하려면 deviceId='operator''sDevice'라고 씁니다.
  • 숫자, 문자 및 특수 문자("()<>@,;:\\"/?={} \t\n\r)는 대상 조건 값에 사용할 수 있습니다.
  • 대상 조건 키에는 다음 문자가 허용되지 않습니다. /;.

우선 순위

우선 순위는 배포가 다른 배포를 기준으로 대상 디바이스에 적용되어야 하는지 여부를 정의합니다. 배포 우선 순위는 0에서 2,147,483,647까지의 범위에서 양의 정수입니다. 숫자가 클수록 더 높은 우선 순위를 나타냅니다. IoT Edge 디바이스가 둘 이상의 배포 대상이 되는 경우 우선 순위가 가장 높은 배포가 적용됩니다. 우선 순위가 낮은 배포는 적용되지 않으며 병합되지 않습니다. 디바이스가 동등한 우선 순위를 갖는 둘 이상의 배포 대상으로 지정되면 가장 최근에 만든 배포(생성 타임스탬프 기준으로 결정됨)가 적용됩니다.

레이블

레이블은 배포를 필터링하고 그룹화하는 데 사용할 수 있는 문자열 키/값 쌍입니다. 배포에는 여러 개의 레이블이 있을 수 있습니다. 레이블은 선택 사항이며, IoT Edge 디바이스의 구성에는 아무런 영향을 주지 않습니다.

메트릭

기본적으로 모든 배포는 다음 네 가지 메트릭에 대해 보고합니다.

  • 대상: 배포 대상 조건과 일치하는 IoT Edge 디바이스가 표시됩니다.
  • 적용: 더 높은 우선 순위의 다른 배포에서 대상으로 지정하지 않은 대상 IoT Edge 디바이스가 표시됩니다.
  • 성공 보고: 모듈이 성공적으로 배포되었다고 보고한 IoT Edge 디바이스가 표시됩니다.
  • 실패 보고: 하나 이상의 모듈 배포에 실패했다고 보고한 IoT Edge 디바이스가 표시됩니다. 오류를 자세히 조사하려면 해당 디바이스에 원격으로 연결하고 로그 파일을 살펴봅니다.

또한 배포를 모니터링하고 관리하는 데 도움이 되는 사용자 지정 메트릭을 직접 정의할 수 있습니다.

메트릭은 디바이스가 배포 구성을 적용한 결과로 다시 보고할 수 있는 다양한 상태의 요약 수를 제공합니다. 메트릭은 lastDesiredStatus 또는 lastConnectTime과 같은 edgeHub 모듈 쌍 reported 속성을 쿼리할 수 있습니다.

예시:

SELECT deviceId FROM devices
  WHERE properties.reported.lastDesiredStatus.code = 200

사용자 고유의 메트릭을 추가하는 것은 선택 사항이며, IoT Edge 디바이스의 실제 구성에 영향을 주지 않습니다.

계층화된 배포

계층화된 배포는 생성해야 하는 고유한 배포의 수를 줄이기 위해 함께 결합할 수 있는 자동 배포입니다. 계층화된 배포는 동일한 모듈이 여러 자동 배포에서 여러 조합으로 재사용되는 시나리오에서 유용합니다.

계층화된 배포에는 자동 배포와 동일한 기본 구성 요소가 있습니다. 디바이스 쌍의 태그를 기준으로 대상 디바이스를 지정하고 레이블, 메트릭, 상태 보고에 대해 동일한 기능을 제공합니다. 계층화된 배포에도 우선 순위가 할당됩니다. 우선 순위를 사용하여 디바이스에 적용되는 배포를 결정하는 대신, 디바이스에서 우선 순위에 따라 여러 배포의 순위가 지정됩니다. 예를 들어 계층화된 배포 두 개의 모듈 또는 경로 이름이 동일한 경우, 우선 순위가 더 높은 계층화된 배포가 적용되고 우선 순위가 낮은 배포가 덮어써집니다.

edgeAgent 및 edgeHub라고 하는 시스템 런타임 모듈은 계층화된 배포의 일부로 구성되지 않습니다. 계층화된 배포의 대상이 되는 모든 IoT Edge 디바이스에는 먼저 표준 자동 배포를 적용해야 합니다. 자동 배포는 계층화된 배포를 추가할 수 있는 기반을 제공합니다.

IoT Edge 디바이스는 표준 자동 배포를 하나만 적용할 수 있지만 계층화된 자동 배포는 여러 개 적용할 수 있습니다. 디바이스를 대상으로 하는 계층화된 배포는 해당 디바이스의 자동 배포보다 우선 순위가 높아야 합니다.

예를 들어 건물을 관리하는 회사의 다음 시나리오를 고려해 보세요. 이 회사는 보안 카메라, 동작 센서 및 엘리베이터에서 데이터를 수집하기 위한 IoT Edge 모듈을 개발했습니다. 그러나 모든 건물이 세 모듈을 모두 사용할 수 있는 것은 아닙니다. 표준 자동 배포를 사용하는 경우, 회사에서 건물에 필요한 모든 모듈 조합에 대한 개별 배포를 만들어야 합니다.

Screenshot of showing that standard automatic deployments need to accommodate every module combination.

그러나 회사에서 계층화된 자동 배포로 전환하면 건물의 동일한 모듈 조합을 만들어 관리할 배포 수를 줄일 수 있습니다. 각 모듈에는 자체 계층화된 배포가 있으며, 디바이스 태그는 각 건물에 추가되는 모듈을 식별합니다.

Screenshot that shows how layered automatic deployments simplify scenarios where the same modules are combined in different ways.

모듈 쌍 구성

계층화된 배포를 사용하면 의도적으로든, 그렇지 않든, 특정 디바이스를 대상으로 하는 동일한 모듈을 가진 두 개의 배포가 있을 수 있습니다. 이러한 경우 우선 순위가 높은 배포에서 모듈 쌍을 덮어쓸지 또는 해당 모듈 쌍에 추가할지 결정할 수 있습니다. 예를 들어 동일한 모듈을 100가지 디바이스에 적용하는 배포가 있을 수 있습니다. 그러나 이러한 디바이스 중 10개는 안전한 시설에 있으며 프록시 서버를 통해 통신하려면 추가 구성이 필요합니다. 이러한 10개 디바이스가 기본 배포의 기존 모듈 쌍 정보를 덮어쓰지 않고 안전하게 통신할 수 있도록 계층화된 배포를 사용하여 모듈 쌍 속성을 추가할 수 있습니다.

배포 매니페스트에 모듈 쌍 desired 속성을 추가할 수 있습니다. 표준 배포에서는 모듈 쌍의 properties.desired 섹션에 속성을 추가합니다. 그러나 계층화된 배포에서는 원하는 속성의 새 하위 집합을 선언할 수 있습니다.

예를 들어 표준 배포에서는 5초 간격으로 데이터를 보내도록 지시하는 다음과 같은 desired 속성을 사용하여 시뮬레이션된 온도 센서 모듈을 추가할 수 있습니다.

"SimulatedTemperatureSensor": {
  "properties.desired": {
    "SendData": true,
    "SendInterval": 5
  }
}

동일한 디바이스 중 일부 또는 모두를 대상으로 하는 계층화된 배포에서 시뮬레이션된 센서에 1,000개 메시지를 보낸 후 멈추도록 지시하는 속성을 추가할 수 있습니다. 기존 속성을 덮어쓰지 않으려면 desired 속성 내에 새 속성을 포함하는 layeredProperties라는 새 섹션을 만듭니다.

"SimulatedTemperatureSensor": {
  "properties.desired.layeredProperties": {
    "StopAfterCount": 1000
  }
}

두 배포가 모두 적용된 디바이스는 시뮬레이션된 온도 센서에 대한 모듈 쌍의 다음 속성을 반영합니다.

"properties": {
  "desired": {
    "SendData": true,
    "SendInterval": 5,
    "layeredProperties": {
      "StopAfterCount": 1000
    }
  }
}

계층화된 배포에서 모듈 쌍의 properties.desired 필드를 설정하면 우선 순위가 낮은 배포에서 해당 모듈의 desired 속성이 덮어써집니다.

단계별 배포

단계별 배포는 운영자가 대규모 IoT Edge 디바이스 집합에 변경 내용을 배포하는 전체적인 프로세스입니다. 목표는 점진적으로 변경하여 광범위한 새로운 변경에 따른 위험을 줄이는 것입니다. 자동 배포를 통해 대규모 IoT Edge 디바이스에 대한 단계적 롤아웃을 관리할 수 있습니다.

단계별 배포는 다음과 같은 단계로 실행됩니다.

  1. IoT Edge 디바이스를 프로비전하고 tag.environment='test'와 같이 디바이스 쌍 태그를 설정하여 해당 디바이스의 테스트 환경을 설정합니다. 테스트 환경은 배포에서 최종적인 대상이 되는 프로덕션 환경을 미러링해야 합니다.
  2. 원하는 모듈 및 구성이 포함된 배포를 만듭니다. 대상 조건은 IoT Edge 디바이스 테스트 환경을 대상으로 해야 합니다.
  3. 테스트 환경에서 새 모듈 구성의 유효성을 검사합니다.
  4. 대상 조건에 새 태그를 추가하여 프로덕션 IoT Edge 디바이스의 하위 집합이 포함되도록 배포를 업데이트합니다. 또한 배포의 우선 순위가 현재 해당 디바이스를 대상으로 하는 다른 배포보다 높은지 확인합니다.
  5. 배포 상태를 확인하여 대상 IoT Edge 디바이스에 대한 배포가 성공했는지 확인합니다.
  6. 나머지 모든 프로덕션 IoT Edge 디바이스를 대상으로 지정하도록 배포를 업데이트합니다.

롤백

오류 또는 잘못된 구성이 표시되면 배포를 롤백할 수 있습니다. 배포는 IoT Edge 디바이스에 대한 절대적인 모듈 구성을 정의하므로, 모든 모듈을 제거하는 것이 목표인 경우에도 우선 순위가 낮은 동일한 디바이스에 추가 배포를 대상으로 지정해야 합니다.

배포를 삭제해도 대상 디바이스에서 모듈이 제거되지는 않습니다. 빈 배포인 경우에도 디바이스의 새 구성을 정의하는 다른 배포가 있어야 합니다.

그러나 배포를 삭제하면 계층화된 배포인 경우 대상 디바이스에서 모듈이 제거될 수 있습니다. 계층화된 배포는 기본 배포를 업데이트하여 모듈을 추가할 수 있습니다. 계층화된 배포를 제거하면 기본 배포에 대한 업데이트가 제거되어 모듈이 제거될 수 있습니다.

예를 들어 디바이스에는 기본 배포 A, 계층화된 배포 O, M이 적용되어 있습니다(A, O, M 배포가 디바이스에 배포되도록). 계층화된 배포 M이 삭제되면 A 및 O가 디바이스에 적용되고 배포 M에 고유한 모듈이 제거됩니다.

롤백을 수행하는 순서는 다음과 같습니다.

  1. 동일한 디바이스 집합에도 추가 배포가 대상으로 지정되었는지 확인합니다. 롤백의 목표가 모든 모듈을 제거하는 것이면 추가 배포에 모듈이 포함되면 안됩니다.
  2. 디바이스가 더 이상 대상 조건을 충족하지 못하도록 롤백하려는 배포의 대상 조건식을 수정하거나 제거합니다.
  3. 배포 상태를 확인하여 롤백이 성공했는지 확인합니다.
    • 롤백된 배포에는 더 이상 롤백된 디바이스의 상태가 표시되지 않아야 합니다.
    • 이제 추가 배포에는 롤백된 디바이스의 배포 상태가 포함됩니다.

다음 단계