Развертывание и мониторинг модулей IoT Edge в масштабе с помощью Azure CLI

Область применения:IoT Edge 1.4 checkmark IoT Edge 1.4

Важно!

IoT Edge 1.4 является поддерживаемым выпуском. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Создайте автоматическое развертывание Azure IoT Edge с помощью Azure CLI для управления текущими развертываниями для нескольких устройств одновременно. Автоматическое развертывание для IoT Edge является частью функции управления устройствами Центр Интернета вещей Azure. Развертывания — это динамические процессы, которые позволяют развертывать несколько модулей на нескольких устройствах, отслеживать состояние и работоспособность этих модулей и вносить изменения при необходимости.

В этой статье описана настройка Azure CLI и расширения Интернета вещей. Затем вы узнаете, как развернуть модули в наборе устройств IoT Edge и отслеживать ход выполнения с помощью доступных команд CLI.

Необходимые компоненты

Настройка манифеста развертывания

Манифест развертывания — это документ JSON, в котором определены развертываемые модули, способ передачи данных между этими модулями и требуемые свойства для двойников модулей. Подробную информацию см. в статье Сведения о развертывании модулей и настройке маршрутов в IoT Edge.

Чтобы развернуть модули с помощью Azure CLI, сохраните манифест развертывания локально в виде txt-файла. В следующем разделе вы примените путь к файлу для выполнения команды, применяющей конкретную конфигурацию к устройству.

Вот пример простого манифеста развертывания с одним модулем.

{
  "content": {
    "modulesContent": {
      "$edgeAgent": {
        "properties.desired": {
          "schemaVersion": "1.1",
          "runtime": {
            "type": "docker",
            "settings": {
              "minDockerVersion": "v1.25",
              "loggingOptions": "",
              "registryCredentials": {}
            }
          },
          "systemModules": {
            "edgeAgent": {
              "type": "docker",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-agent:1.1",
                "createOptions": "{}"
              }
            },
            "edgeHub": {
              "type": "docker",
              "status": "running",
              "restartPolicy": "always",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
              }
            }
          },
          "modules": {
            "SimulatedTemperatureSensor": {
              "version": "1.1",
              "type": "docker",
              "status": "running",
              "restartPolicy": "always",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0",
                "createOptions": "{}"
              }
            }
          }
        }
      },
      "$edgeHub": {
        "properties.desired": {
          "schemaVersion": "1.0",
          "routes": {
            "upstream": "FROM /messages/* INTO $upstream"
          },
          "storeAndForwardConfiguration": {
            "timeToLiveSecs": 7200
          }
        }
      },
      "SimulatedTemperatureSensor": {
        "properties.desired": {
          "SendData": true,
          "SendInterval": 5
        }
      }
    }
  }
}

Примечание.

Этот пример манифеста развертывания использует схему версии 1.1 для агента IoT Edge и центра. Схема версии 1.1 была выпущена вместе с IoT Edge версии 1.0.10. Он включает такие функции, как порядок запуска модуля и определение приоритетов маршрутов.

Многоуровневое развертывание

Многоуровневые развертывания — это автоматические развертывания, которые можно размещать друг поверх друга. Дополнительную информацию о многоуровневых развертываниях см. в статье Общие сведения об автоматических развертываниях IoT Edge для отдельных устройств или в большом масштабе.

Многоуровневые развертывания можно создавать и администрировать с помощью Azure CLI, как и любое другое автоматическое развертывание. Есть лишь несколько несущественных отличий. После создания многоуровневого развертывания Azure CLI работает для многоуровневых развертываний так же, как и для любого развертывания. Чтобы создать многоуровневое развертывание, добавьте флаг --layered в команду создания.

Второе отличие заключается в структуре манифеста развертывания. В то время как стандартное автоматическое развертывание должно содержать модули среды выполнения системы в дополнение к любым пользовательским модулям, многоуровневые развертывания могут содержать только пользовательские модули. Многоуровневые развертывания также требуют стандартного автоматического развертывания на устройстве для предоставления необходимых компонентов каждого устройства IoT Edge, таких как модули среды выполнения системы.

Вот пример простого манифеста для многоуровневого развертывания с одним модулем.

{
  "content": {
    "modulesContent": {
      "$edgeAgent": {
        "properties.desired.modules.SimulatedTemperatureSensor": {
          "settings": {
            "image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0",
              "createOptions": "{}"
          },
          "type": "docker",
          "status": "running",
          "restartPolicy": "always",
          "version": "1.0"
        }
      },
      "$edgeHub": {
        "properties.desired.routes.upstream": "FROM /messages/* INTO $upstream"
      },
      "SimulatedTemperatureSensor": {
        "properties.desired": {
          "SendData": true,
          "SendInterval": 5
        }
      }
    }
  }
}

Примечание.

Этот многоуровневый манифест развертывания немного отличается от стандартного манифеста развертывания. Требуемые свойства модулей среды выполнения свернуты и используют нотацию точек. Это форматирование требуется для портал Azure для распознавания многоуровневого развертывания. Например:

  • properties.desired.modules.<module_name>
  • properties.desired.routes.<route_name>

В предыдущем примере показан параметр properties.desired многоуровневого развертывания для модуля. Если это многоуровневое развертывание предназначено для устройства, на котором уже был применен этот модуль, все существующие требуемые свойства будут перезаписаны. Чтобы обновить нужные свойства вместо перезаписи, можно определить новый подраздел. Например:

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

То же самое можно выразить с помощью следующих выражений:

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

Примечание.

В настоящее время все многоуровневые развертывания должны включать edgeAgent объект, который будет считаться допустимым. Даже если многоуровневое развертывание обновляет только свойства модуля, включите пустой объект. Например: "$edgeAgent":{}. Многоуровневое развертывание с пустым edgeAgent объектом будет отображаться как целевое в edgeAgent двойнике модуля, а не применено.

В итоге для создания многоуровневого развертывания:

  • Добавьте флаг в --layered команду создания Azure CLI.
  • Не включать системные модули.
  • Используйте полную нотацию точек под $edgeAgent и $edgeHub.

Дополнительные сведения о настройке двойников модулей в многоуровневых развертываниях см. в разделе "Многоуровневые развертывания".

Определение устройств с помощью тегов

Перед созданием развертывания необходимо указать устройства, на которые вы хотите повлиять. Azure IoT Edge определяет устройства с помощью тегов в двойнике устройства.

Каждое устройство может иметь несколько тегов, которые вы определяете по своему усмотрению с учетом особенностей решения. Например, при управлении кампусом интеллектуальных зданий можно добавлять к устройству следующие теги.

"tags":{
  "location":{
    "building": "20",
    "floor": "2"
  },
  "roomtype": "conference",
  "environment": "prod"
}

Дополнительные сведения о двойниках устройств и тегах см. в статье Общие сведения о двойниках устройств и их использование в Центре Интернета вещей.

Создание развертывания

Модули развертываются на целевых устройствах путем создания развертывания, состоящего из манифеста развертывания и других параметров.

Чтобы создать развертывание, используйте команду az iot edge deployment create.

az iot edge deployment create --deployment-id [deployment id] --hub-name [hub name] --content [file path] --labels "[labels]" --target-condition "[target query]" --priority [int]

Чтобы создать многоуровневое развертывание, выполните ту же команду с флагом --layered.

Команда create для развертывания принимает следующие параметры:

  • --слоистый. Необязательный флаг для определения развертывания как многоуровневого развертывания.
  • --deployment-id. Имя развертывания, которое будет создано в Центре Интернета вещей. Присвойте развертыванию уникальное имя до 128 строчных букв. Не используйте пробелы и следующие недопустимые символы: & ^ [ ] { } \ | " < > /. Этот параметр является обязательным.
  • --content. Путь к файлу манифеста развертывания JSON. Этот параметр является обязательным.
  • --hub-name. Имя Центра Интернета вещей, в котором будет создано развертывание. Центр должен быть в текущей подписке. Измените текущую az account set -s [subscription name] подписку с помощью команды.
  • --labels. Пары "Имя-значение", описывающие и помогающие отслеживать развертывания. Метки имеют формат JSON для имен и значений. Например: {"HostPlatform":"Linux", "Version:"3.0.1"}.
  • --target-condition. Условие, определяющее, какие устройства будут нацелены на это развертывание. Условие основано на тегах двойника устройства или сообщаемых свойствах двойника устройства, и оно должно соответствовать формату выражения. Например: tags.environment='test' and properties.reported.devicemodel='4000x'. Если целевое условие не указано, развертывание не применяется к каким-либо устройствам.
  • --priority. Положительное целое число. Если два или более развертываний предназначены для одного устройства, развертывание с наибольшим числовым значением для приоритета будет применено.
  • --метрики. Метрики, запрашивающие edgeHub сообщаемые свойства для отслеживания состояния развертывания. Метрики принимают входные данные JSON или путь к файлу. Например: '{"queries": {"mymetric": "SELECT deviceId FROM devices WHERE properties.reported.lastDesiredStatus.code = 200"}}'.

Сведения о мониторинге развертывания с помощью Azure CLI см. в статье "Мониторинг развертываний IoT Edge".

Примечание.

При создании нового развертывания IoT Edge иногда может потребоваться до 5 минут, чтобы Центр Интернета вещей обработать новую конфигурацию и распространить новые нужные свойства на целевые устройства.

Изменение развертывания

При изменении развертывания изменения немедленно реплицируются во все целевые устройства.

Если обновить целевое условие, произойдут следующие обновления:

  • Если устройство не соответствует предыдущему условию назначения, однако соответствует новому и это развертывание имеет самый высокий приоритет для устройства, то оно будет применено к устройству.
  • Если устройство, выполняющееся в настоящее время, больше не соответствует целевому условию, оно удаляет это развертывание и принимает следующее первоприоритетное развертывание.
  • Если устройство, на котором сейчас выполняется развертывание, больше не соответствует условию назначения, а также условию назначения любого другого развертывания, в устройстве не происходит никаких изменений. Устройство продолжает работать с текущими модулями в текущем состоянии, но больше не управляется в рамках этого развертывания. После того как устройство соответствует целевому условию любого другого развертывания, оно удаляет это развертывание и принимает новое.

Содержимое развертывания невозможно обновить, включая модули и маршруты, определенные в манифесте развертывания. Если вы хотите обновить содержимое развертывания, создайте новое развертывание, которое предназначено для одних и того же устройств с более высоким приоритетом. Вы можете изменить некоторые свойства существующего модуля, например целевое условие, метки, метрики и приоритет.

Чтобы обновить развертывание, используйте команду az iot edge deployment update.

az iot edge deployment update --deployment-id [deployment id] --hub-name [hub name] --set [property1.property2='value']

Команда обновления развертывания принимает следующие параметры:

  • --deployment-id. Имя развертывания, существующего в Центре Интернета вещей.
  • --hub-name. Имя Центра Интернета вещей, в котором существует развертывание. Центр должен быть в текущей подписке. Переключитесь на нужную подписку с помощью команды az account set -s [subscription name].
  • --set. Обновите свойство в развертывании. Вы можете обновить следующие свойства:
    • targetCondition (например, targetCondition=tags.location.state='Oregon')
    • labels
    • priority
  • --add. Добавьте новое свойство в развертывание, включая целевые условия или метки.
  • --remove. Удалите существующее свойство, включая целевые условия или метки.

Удаление развертывания

При удалении развертывания все устройства принимают на себя следующее первоприоритетное развертывание. Если устройства не соответствуют целевому условию другого развертывания, модули не удаляются при удалении развертывания.

Чтобы удалить развертывание, используйте команду az iot edge deployment delete.

az iot edge deployment delete --deployment-id [deployment id] --hub-name [hub name]

Команда deployment delete принимает следующие параметры.

  • --deployment-id. Имя развертывания, существующего в Центре Интернета вещей.
  • --hub-name. Имя Центра Интернета вещей, в котором существует развертывание. Центр должен быть в текущей подписке. Переключитесь на нужную подписку с помощью команды az account set -s [subscription name].

Следующие шаги

Дополнительные сведения о развертывании модулей на устройствах IoT Edge.