Развертывание хранилища BLOB-объектов Azure в модуле IoT Edge на устройстве
Область применения: IoT Edge 1.5
Внимание
IoT Edge 1.5 LTS является поддерживаемым выпуском. IoT Edge 1.4 LTS заканчивается жизнью с 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.
Существует несколько способов развертывания модулей на устройстве IoT Edge, и все они подходят для Хранилища BLOB-объектов Azure на модулях IoT Edge. Два простейших метода — это портал Azure или шаблоны Visual Studio Code.
Необходимые компоненты
Центр Интернета вещей в подписке Azure.
Устройство IoT Edge.
Если устройство IoT Edge не настроено, его можно создать на виртуальной машине Azure. Выполните действия, описанные в одном из кратких руководств, чтобы создать виртуальное устройство Linux или создать виртуальное устройство Windows.
Расширение Azure IoT Edge. Средства Azure IoT Edge для расширения Visual Studio Code в режиме обслуживания.
Центр Интернета вещей Azure расширение при развертывании из Visual Studio Code.
Развертывание на портале Azure
Портал Azure поможет вам создать манифест развертывания и отправить это развертывание на устройство IoT Edge.
Выбор устройства
- Войдите на портал Azure и перейдите к своему Центру Интернета вещей.
- Выберите устройства в меню управления устройствами .
- Выберите целевое устройство IoT Edge из списка.
- Щелкните Set Modules (Настроить модули).
Настройка манифеста развертывания
Манифест развертывания — это документ JSON, в котором определены развертываемые модули, способ передачи данных между этими модулями и требуемые свойства для двойников модулей. На портале Azure имеется мастер, который в пошаговом режиме помогает создать манифест развертывания. Он состоит из трех шагов, расположенных на вкладках: Модули, Маршруты и Просмотр и создание.
Добавление модулей
В разделе "Модули IoT Edge" на странице выберите раскрывающийся список "Добавить" и выберите модуль IoT Edge, чтобы отобразить страницу "Добавить модуль IoT Edge".
На вкладке "Параметры " укажите имя модуля и укажите универсальный код ресурса (URI) образа контейнера:
-
Имя модуля IoT Edge:
azureblobstorageoniotedge
-
URI образа:
mcr.microsoft.com/azure-blob-storage:latest
Не нажимайте кнопку Добавить, пока не укажете значения на вкладках Параметры модуля, Параметры создания контейнера и Параметры двойника модуля, как описано в этой процедуре.
Внимание
Azure IoT Edge учитывает регистр при вызове модулей, а имя пакета SDK для службы хранилища по умолчанию также преобразовывается в нижний регистр. Изменение имени на нижний регистр помогает убедиться, что подключения к Хранилище BLOB-объектов Azure в модуле IoT Edge не прерваны.
-
Имя модуля IoT Edge:
Откройте вкладку Параметры создания контейнера.
Скопируйте и вставьте следующий код JSON в поле, чтобы предоставить сведения об учетной записи хранения и точку подключения к хранилищу на устройстве.
{ "Env":[ "LOCAL_STORAGE_ACCOUNT_NAME=<local storage account name>", "LOCAL_STORAGE_ACCOUNT_KEY=<local storage account key>" ], "HostConfig":{ "Binds":[ "<mount>" ], "PortBindings":{ "11002/tcp":[{"HostPort":"11002"}] } } }
Измените JSON, скопированный в Параметры создания контейнера, следующим образом:
Замените
<local storage account name>
запоминаемым именем. Имена учетных записей должны содержать от 3 до 24 знаков — строчных букв и цифр. Пробелы отсутствуют.Замените
<local storage account key>
на 64-байтовый ключ Base64. Ключ можно создать с помощью таких средств, как Генератор Base64. Эти учетные данные используются для доступа к хранилищу BLOB-объектов из других модулей.Замените
<mount>
в соответствии с операционной системой контейнера. Укажите имя тома или абсолютный путь к существующему каталогу на устройстве IoT Edge, где модуль BLOB-объектов хранит свои данные. Привязка каталога хранения сопоставляет указанное расположение на устройстве с определением расположения в модуле.
Для контейнеров Linux формат — это <путь к хранилищу или том>:/blobroot. Например:
- Используйте подключение тома:
my-volume:/blobroot
- использовать подключение привязки:
/srv/containerdata:/blobroot
. Обязательно выполните действия по предоставлению доступа к каталогу пользователю контейнера.
Внимание
Не изменяйте вторую половину значения точки подключения каталога хранения, которая указывает на определенное расположение в хранилище BLOB-объектов в модуле IoT Edge. Подключение хранилища всегда должно заканчиваться :/blobroot для контейнеров Linux.
IoT Edge не удаляет тома, подключенные к контейнерам модулей. Это поведение реализовано намеренно, так как оно позволяет сохранять данные в экземплярах контейнеров, например в сценариях обновления. Однако если эти тома не используются, это может привести к нехватке места на диске и последующим системным ошибкам. Если в сценарии используются тома docker, рекомендуется использовать такие средства docker, как docker volume prune и docker volume rm , чтобы удалить неиспользуемые тома, особенно для рабочих сценариев.
Скопируйте следующий код JSON и вставьте его в поле на вкладке Параметры двойника модуля.
{ "deviceAutoDeleteProperties": { "deleteOn": <true, false>, "deleteAfterMinutes": <timeToLiveInMinutes>, "retainWhileUploading": <true,false> }, "deviceToCloudUploadProperties": { "uploadOn": <true, false>, "uploadOrder": "<NewestFirst, OldestFirst>", "cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>; EndpointSuffix=<your end point suffix>", "storageContainersForUpload": { "<source container name1>": { "target": "<your-target-container-name>" } }, "deleteAfterUpload": <true,false> } }
Присвойте каждому свойству соответствующее значение, как указано заполнителями. Если вы используете симулятор IoT Edge, задайте значения соответствующим переменным среды для этих свойств, как описано deviceToCloudUploadProperties и deviceAutoDeleteProperties.
Совет
Имя
target
контейнера имеет ограничения именования, например при использовании$
префикса, не поддерживается. Чтобы просмотреть все ограничения, просмотрите имена контейнеров.Примечание.
Если целевой объект контейнера не именован или имеет значение NULL
storageContainersForUpload
, имя по умолчанию будет назначено целевому объекту. Если вы хотите прекратить отправку в контейнер, его необходимо полностью удалить.storageContainersForUpload
Дополнительные сведения смdeviceToCloudUploadProperties
. в разделе данных Store на границе с Хранилище BLOB-объектов Azure в IoT Edge.Сведения о настройке deviceToCloudUploadProperties и deviceAutoDeleteProperties после развертывания модуля см. в разделе "Изменение двойника модуля". Дополнительные сведения о требуемых свойствах см. в разделе Определение или обновление требуемых свойств.
Выберите Добавить.
Нажмите Далее: Маршруты, чтобы перейти в раздел маршрутов.
Настройка маршрутов
Сохраните маршруты по умолчанию и нажмите кнопку Далее: просмотр и создание, чтобы перейти к разделу проверки.
Проверка развертывания
В разделе обзорной информации вы увидите манифест развертывания в формате JSON, который был создан на основе параметров, выбранных вами в двух предыдущих разделах. Здесь также объявлены два дополнительных модуля, которые вы не добавляли: $edgeAgent и $edgeHub. Эти два модуля составляют среду выполнения IoT Edge и являются обязательными для каждого развертывания.
Просмотрите сведения о развертывании, а затем нажмите Создать.
Проверка развертывания
После создания развертывания вернитесь на страницу "Устройства" центра Интернета вещей.
- Выберите устройство IoT Edge, на которое отправили развертывание, чтобы открыть сведения о нем.
- В сведениях об устройстве убедитесь, что для модуля службы хранилища BLOB-объектов настроены параметры Указано в развертывании и Данные, полученные от устройства.
Запуск модуля на устройстве может занять несколько секунд. Затем информация о нем будет передана в Центр Интернета вещей. Обновите страницу, чтобы увидеть обновленное состояние.
Развертывание из Visual Studio Code
Azure IoT Edge предоставляет шаблоны в Visual Studio Code для разработки решений для границы. Выполните следующие действия для создания нового решения IoT Edge с модулем хранилища BLOB-объектов и настройки манифеста развертывания.
Внимание
Расширение Visual Studio Code Azure IoT Edge находится в режиме обслуживания.
Выберите Вид>Палитра команд.
В палитре команд введите и выполните команду Azure IoT Edge: New IoT Edge solution.
Следуйте инструкциям на экране в палитре команд для создания решения.
Поле значение Выбрать папку Выберите расположение на компьютере разработчика для Visual Studio Code, чтобы создать файлы решения. Введите название решения. Введите описательное имя решения или примите имя по умолчанию EdgeSolution. Выбор шаблона модуля Выберите Existing Module (Enter full image URL) (Имеющийся модуль (введите полный URL-адрес образа)). Указание имени модуля Введите имя модуля, используя знаки нижнего регистра, например azureblobstorageoniotedge.
В модуле IoT Edge очень важно использовать знаки нижнего регистра для имени хранилища BLOB-объектов Azure. IoT Edge учитывает регистр при ссылке на модули, а название пакета SDK службы хранилища по умолчанию преобразовывается в нижний регистр.Указание образа Docker для модуля Укажите универсальный код ресурса (URI) образа: mcr.microsoft.com/azure-blob-storage:latest. Visual Studio Code принимает предоставленные сведения, создает решение IoT Edge, а затем загружает его в новом окне. Шаблон решения создает шаблон манифеста развертывания, который содержит образ модуля хранилища BLOB-объектов, но вам нужно настроить параметры создания модуля.
Откройте deployment.template.json в рабочей области нового решения и найдите раздел modules. Внесите следующие изменения конфигурации.
Скопируйте и вставьте следующий код в
createOptions
поле для модуля хранилища BLOB-объектов:```json "Env":[ "LOCAL_STORAGE_ACCOUNT_NAME=<local storage account name>", "LOCAL_STORAGE_ACCOUNT_KEY=<local storage account key>" ], "HostConfig":{ "Binds": ["<mount>"], "PortBindings":{ "11002/tcp": [{"HostPort":"11002"}] } }
Замените
<local storage account name>
запоминаемым именем. Имена учетных записей должны содержать от 3 до 24 знаков — строчных букв и цифр. Пробелы отсутствуют.Замените
<local storage account key>
на 64-байтовый ключ Base64. Ключ можно создать с помощью таких средств, как Генератор Base64. Эти учетные данные используются для доступа к хранилищу BLOB-объектов из других модулей.Замените
<mount>
в соответствии с операционной системой контейнера. Укажите имя тома или абсолютный путь к каталогу на устройстве IoT Edge, где модуль BLOB-объектов должен хранить данные. Привязка каталога хранения сопоставляет указанное расположение на устройстве с определением расположения в модуле.Для контейнеров Linux формат — это <путь к хранилищу или том>:/blobroot. Например:
- Используйте подключение тома:
my-volume:/blobroot
- использовать подключение привязки:
/srv/containerdata:/blobroot
. Обязательно выполните действия по предоставлению доступа к каталогу пользователю контейнера.
Внимание
Не изменяйте вторую половину значения точки подключения каталога хранения, которая указывает на определенное расположение в хранилище BLOB-объектов в модуле IoT Edge. Подключение хранилища всегда должно заканчиваться :/blobroot для контейнеров Linux.
IoT Edge не удаляет тома, подключенные к контейнерам модулей. Это поведение реализовано намеренно, так как оно позволяет сохранять данные в экземплярах контейнеров, например в сценариях обновления. Однако если эти тома не используются, это может привести к нехватке места на диске и последующим системным ошибкам. Если в сценарии используются тома docker, рекомендуется использовать такие средства docker, как docker volume prune и docker volume rm , чтобы удалить неиспользуемые тома, особенно для рабочих сценариев.
- Используйте подключение тома:
Настройте параметры deviceToCloudUploadProperties и deviceAutoDeleteProperties для модуля, добавив следующий код JSON в файл deployment.template.json. Присвойте каждому свойству соответствующее значение и сохраните файл. Если вы используете симулятор IoT Edge, задайте значения соответствующим переменным среды для этих свойств, которые можно найти в разделе объяснения deviceToCloudUploadProperties и deviceAutoDeleteProperties
"<your azureblobstorageoniotedge module name>":{ "properties.desired": { "deviceAutoDeleteProperties": { "deleteOn": <true, false>, "deleteAfterMinutes": <timeToLiveInMinutes>, "retainWhileUploading": <true, false> }, "deviceToCloudUploadProperties": { "uploadOn": <true, false>, "uploadOrder": "<NewestFirst, OldestFirst>", "cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>", "storageContainersForUpload": { "<source container name1>": { "target": "<target container name1>" } }, "deleteAfterUpload": <true, false> } } }
Сведения о настройке deviceToCloudUploadProperties и deviceAutoDeleteProperties после развертывания модуля см. в разделе "Изменение двойника модуля". Дополнительные сведения о возможностях при создании контейнера, политике перезапуска и требуемом состоянии см. в разделе Требуемые свойства EdgeAgent.
Сохраните файл deployment.template.json.
Щелкните правой кнопкой мыши deployment.template.json и выберите Создать манифест развертывания IoT Edge.
Visual Studio Code принимает данные из файла deployment.template.json и использует их для создания файла манифеста развертывания. Манифест развертывания создается в новой папке config в рабочей области решения. После получения этого файла можно выполнить действия, описанные в разделе "Развертывание модулей Azure IoT Edge с помощью Azure CLI 2.0".
Развертывание нескольких экземпляров модуля
Если вы хотите развернуть несколько экземпляров Хранилища BLOB-объектов Azure в модуле IoT Edge, необходимо указать другой путь к хранилищу и изменить значение HostPort
, к которому привязан модуль. Модули службы хранилища BLOB-объектов всегда предоставляют порт 11002 в контейнере, но вы можете объявить, к какому порту он привязан в узле.
Чтобы изменить значение HostPort
, измените Параметры создания контейнера (на портале Azure) или поле createOptions (в файле deployment.template.json в Visual Studio Code).
"PortBindings":{
"11002/tcp": [{"HostPort":"<port number>"}]
}
При подключении к дополнительным модулям хранилища BLOB-объектов измените конечную точку, чтобы она указывала на обновленный порт узла.
Настройка поддержки прокси-сервера
Если ваша организация использует прокси-сервер, необходимо настроить поддержку прокси-сервера для модулей среды выполнения edgeAgent и edgeHub. Этот процесс включает следующие две задачи.
- Настройка управляющих программ среды выполнения и агента IoT Edge на устройстве.
- Настройка переменной среды HTTPS_PROXY для модулей в JSON-файле манифеста развертывания.
Этот процесс описан в статье Настройка устройства IoT Edge для обмена данными через прокси-сервер.
Кроме того, для модуля хранилища BLOB-объектов также требуется параметр HTTPS_PROXY в файле развертывания манифеста. Вы можете непосредственно изменить файл манифеста развертывания или воспользоваться порталом Azure.
Перейдите к Центр Интернета вещей в портал Azure и выберите "Устройства" в меню "Управление устройствами"
Выберите устройство с модулем для настройки.
Щелкните Set Modules (Настроить модули).
На странице в разделе Модули IoT Edge выберите модуль хранилища BLOB-объектов.
На странице Обновление модуля IoT Edge перейдите на вкладку Переменные среды.
Укажите
HTTPS_PROXY
в качестве имени и URL-адрес прокси-сервера в качестве значения.Выберите "Обновить", а затем "Проверить и создать".
См. сведения о добавлении прокси-сервера в модуль в манифесте развертывания и нажмите кнопку "Создать".
Проверьте настройки, выбрав модуль на странице сведений об устройстве, а затем в нижней части страницы Сведения о модулях IoT Edge перейдите на вкладку Переменные среды.
Следующие шаги
Дополнительные сведения о Хранилище BLOB-объектов Azure в IoT Edge.
Дополнительные сведения о работе манифестов развертывания и об их создании см. в руководстве по использованию, настройке и повторном использовании модулей Azure IoT Edge.