Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: IoT Edge 1.5
Внимание
IoT Edge 1.5 LTS является поддерживаемым выпуском. IoT Edge 1.4 LTS заканчивается жизнью с 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.
В этом руководстве показано, как разрабатывать и развертывать код на устройстве IoT Edge. Модули Azure IoT Edge позволяют развертывать код, который запускает бизнес-логику непосредственно на устройстве IoT Edge. В кратком руководстве по развертыванию кода на устройстве Linux вы настроили устройство IoT Edge и развернули модуль из Azure Marketplace.
В этой статье рассматриваются действия для двух средств разработки IoT Edge:
- Командная строка средства разработки Azure IoT Edge (CLI), предпочитаемая для разработки.
- Расширение Azure IoT Edge для Visual Studio Code, которое находится в режиме обслуживания.
Нажмите кнопку селектора инструментов в начале этой статьи, чтобы выбрать средство.
В этом руководстве описано следующее:
- Настройка компьютера разработки
- Создание нового проекта с помощью средств IoT Edge
- Создание проекта в качестве контейнера Docker и его хранение в реестре контейнеров Azure
- Развертывание кода на устройстве IoT Edge
Модуль IoT Edge, создаваемый в этом руководстве, фильтрует данные температуры, создаваемые устройством. Он отправляет сообщения вверх, только если температура превышает заданное пороговое значение. Этот вид анализа на границе помогает уменьшить объем данных, отправляемых в облако и хранящихся в ней.
Необходимые компоненты
Компьютер для разработки:
- Используйте собственный компьютер или виртуальную машину.
- Убедитесь, что компьютер разработчика поддерживает вложенную виртуализацию для запуска контейнерного движка.
- Для разработки модулей IoT Edge для устройств Linux можно использовать большинство операционных систем, которые запускают подсистему контейнеров. В этом руководстве используется компьютер Windows, но он указывает на известные различия в macOS или Linux.
- Установка Visual Studio Code
- Установите интерфейс командной строки Azure.
Устройство Azure IoT Edge.
- Запустите IoT Edge на отдельном устройстве. Сохранение компьютера разработки и устройства IoT Edge отдельно имитирует реальный сценарий развертывания и помогает обеспечить четкость концепций. Используйте краткое руководство по развертыванию кода на устройстве Linux для создания устройства IoT Edge в Azure или шаблона ресурса Azure для развертывания виртуальной машины с поддержкой IoT Edge.
Облачные ресурсы.
- Используйте бесплатный или стандартный Центр Интернета вещей Azure.
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Совет
Рекомендации по интерактивной отладке в Visual Studio Code или Visual Studio 2022:
- Отладка модулей Azure IoT Edge с помощью Visual Studio Code
- Использование Visual Studio 2022 для разработки и отладки модулей для Azure IoT Edge
В этом руководстве рассматриваются этапы разработки для Visual Studio Code.
Основные понятия
В этом руководстве описывается разработка модуля IoT Edge. Модуль IoT Edge — это контейнер с исполняемым кодом. Разверните один или несколько модулей на устройстве IoT Edge. Модули выполняют определенные задачи, такие как прием данных из датчиков, очистка и анализ данных или отправка сообщений в Центр Интернета вещей. Дополнительные сведения см. в статье Understand Azure IoT Edge modules (Общие сведения о модулях Azure IoT Edge).
При разработке модулей IoT Edge важно понимать разницу между компьютером, на котором осуществляется разработка, и целевым устройством IoT Edge, где развертывается модуль. Контейнер, который вы создаете для хранения кода модуля, должен соответствовать операционной системе (ОС) целевого устройства. Например, наиболее распространенный сценарий — разработка модуля на компьютере Windows для целевого устройства Linux под управлением IoT Edge. В этом случае операционная система контейнера — Linux. При прохождении данного учебника помните о разнице между ОС компьютера разработки и ОС контейнера.
Совет
Если вы используете IoT Edge для Linux в Windows, целевое устройство в вашем сценарии — это виртуальная машина Linux, а не узел Windows.
Этот учебник предназначен для устройств с IoT Edge с контейнерами Linux. Используйте предпочтительную операционную систему, если компьютер разработки запускает контейнеры Linux. Visual Studio Code рекомендуется разрабатывать с помощью контейнеров Linux, поэтому в этом руководстве он используется. Вы можете также использовать Visual Studio, хотя поддержка этих двух инструментов отличается.
В следующей таблице перечислены поддерживаемые сценарии разработки для контейнеров Linux в Visual Studio Code и Visual Studio.
Visual Studio Code | Visual Studio 2019/2022 | |
---|---|---|
Архитектура устройств Linux | Linux AMD64 Linux ARM32v7 Linux ARM64 |
Linux AMD64 Linux ARM32 Linux ARM64 |
Службы Azure; | Функции Azure Azure Stream Analytics Машинное обучение Azure |
|
Языки | C C# Ява Node.js Питон |
C C# |
Дополнительные сведения | Azure IoT Edge для Visual Studio Code |
Средства Azure IoT Edge для Visual Studio 2019 Средства Azure IoT Edge для Visual Studio 2022 |
Установка платформы контейнеров
Модули IoT Edge упаковываются в контейнеры, поэтому для создания и управления ими на компьютере разработки требуется совместимая система управления контейнерами Docker. Docker Desktop — это популярный выбор для разработки, так как он имеет сильную поддержку функций. Docker Desktop в Windows позволяет переключаться между контейнерами Linux и контейнерами Windows, чтобы разрабатывать модули для различных типов устройств IoT Edge.
Используйте документацию Docker для установки Docker на компьютере разработки:
Установка Docker Desktop для Windows
- При установке Docker Desktop для Windows вы увидите запрос на использование контейнеров Linux или Windows. Этот параметр можно изменить в любое время. В этом руководстве используются контейнеры Linux, так как модули предназначены для устройств Linux. Дополнительные сведения см. в документации по Docker о переключении между контейнерами Windows и Linux.
Дополнительные сведения об установке на нескольких платформах Linux см. в статье о Docker CE.
- Для подсистемы Windows для Linux (WSL) установите Docker Desktop для Windows.
Настройка средств
Установите средство разработки Azure IoT Edge на основе Python, чтобы создать решение IoT Edge. У вас есть два варианта:
- Использование предпочтительного предварительно созданного контейнера разработки IoT Edge
- Установка средства с помощью программы разработки iotedgedev
Внимание
Средства Azure IoT Edge для расширения Visual Studio Code в режиме обслуживания. Предпочтительное средство разработки — это средство разработки Azure IoT Edge в командной строке (CLI).
При разработке модулей IoT Edge используйте расширения Интернета вещей для Visual Studio Code. Эти расширения предлагают шаблоны проектов, автоматизируйте создание манифеста развертывания и позволяет отслеживать устройства IoT Edge и управлять ими. В этом разделе вы установите Visual Studio Code и расширения Интернета вещей, а затем настроите учетную запись Azure для управления ресурсами Центра Интернета вещей в Visual Studio Code.
Установите расширение Azure IoT Edge .
Установите расширение Центр Интернета вещей Azure.
После установки расширений откройте палитру команд, выбрав "Просмотреть>палитру команд".
В палитре команд найдите и выберите Центр Интернета вещей Azure: выберите Центр Интернета вещей. Следуйте инструкциям, чтобы выбрать подписку Azure и Центр Интернета вещей.
Откройте раздел обозревателя Visual Studio Code, выбрав значок на панели активности или выбрав Вид>Обозреватель.
В нижней части раздела "Обозреватель" разверните свернутое меню Устройства/Центр Интернета вещей Azure. Вы видите устройства и устройства IoT Edge, связанные с Центром Интернета вещей, который вы выбрали с помощью командной палитры.
Установка определенных языковых средств
Установите средства, относящиеся к языку, который вы разрабатываете:
Создание реестра контейнеров
В этом руководстве вы используете расширения Azure IoT Edge и Центр Интернета вещей Azure для создания модуля и создания образа контейнера из файлов. Затем вы отправите этот образ в реестр, содержащий ваши образы и управляющий ими. Наконец, вы развернете свой образ из реестра для выполнения на устройстве IoT Edge.
Внимание
Расширение Visual Studio Code Azure IoT Edge находится в режиме обслуживания.
Для хранения образов контейнеров можно использовать любые реестры, совместимые с Docker. Две популярные службы реестров Docker — Реестр контейнеров Azure и Docker Hub. В этом руководстве используется Реестр контейнеров Azure.
Если вы еще не создали реестр контейнеров, выполните эти действия, чтобы создать реестр в Azure:
На портале Azure выберите Создать ресурс>Контейнеры>Реестр контейнеров.
Укажите следующие обязательные значения для создания реестра контейнеров:
Поле значение Отток подписок Выберите подписку из раскрывающегося списка. Группа ресурсов Используйте одну и ту же группу ресурсов для всех тестовых ресурсов, создаваемых во время кратких руководств и руководств По IoT Edge. Например, IoTEdgeResources. Имя реестра Укажите уникальное имя. Расположение Выберите расположение рядом с вами. Номер SKU Выберите Базовый. Нажмите кнопку "Рецензирование и создание", а затем "Создать".
Выберите новый реестр контейнеров в разделе "Ресурсы" на домашней странице портал Azure, чтобы открыть его.
В левой области реестра контейнеров выберите ключи доступа в меню, расположенном в разделе "Параметры".
Включите пользователя администратора с кнопкой переключателя и просмотрите имя пользователя и пароль для реестра контейнеров.
Скопируйте значения для сервера входа, имени пользователя и пароля и сохраните их в удобном месте. Они потребуются при работе с этим учебником для предоставления доступа к реестру контейнеров.
Создание проекта модуля
Расширение Azure IoT Edge предлагает шаблоны проектов для всех поддерживаемых языков модулей IoT Edge в Visual Studio Code. Эти шаблоны включают все файлы и код, необходимые для развертывания рабочего модуля для тестирования IoT Edge или отправной точки для настройки шаблона с помощью собственной бизнес-логики.
Создание шаблона проектов
Средство разработки IoT Edge упрощает разработку Azure IoT Edge с помощью команд, управляемых переменными среды. Это поможет вам приступить к разработке IoT Edge с помощью контейнера разработки IoT Edge и шаблонов решений IoT Edge, включающих модуль по умолчанию и все необходимые файлы конфигурации.
Создайте каталог для вашего решения в нужном месте. Перейдите в каталог
iotedgesolution
.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolution
Используйте команду инициализации решения iotedgedev, чтобы создать решение и настроить Центр Интернета вещей Azure на выбранном языке разработки.
Сценарий инициализации решения iotedgedev предлагает выполнить несколько шагов, включая:
- Аутентификация в Azure
- Выбор подписки Azure
- Выбор или создание группы ресурсов
- Выбор или создание Центр Интернета вещей Azure
- Выбор или создание устройства Azure IoT Edge
Используйте Visual Studio Code и расширение Azure IoT Edge . Сначала создайте решение, а затем создайте первый модуль в этом решении. Каждое решение может включать несколько модулей.
- Выберите Вид>Палитра команд.
- В палитре команд введите и выполните команду Azure IoT Edge: New IoT Edge Solution.
- Перейдите к папке, в которой нужно создать новое решение, а затем выберите " Выбрать папку".
- Введите имя для решения.
- Выберите шаблон модуля для предпочитаемого языка разработки. Он станет первым модулем в решении.
- Введите имя модуля. Оно должно быть уникальным в пределах реестра контейнеров.
- Введите имя репозитория образов модуля. Visual Studio Code автоматически заполняет имя модуля с помощью localhost:5000/<имя> модуля. Замените его собственными данными реестра. Используйте localhost , если вы используете локальный реестр Docker для тестирования. Если вы используете реестр контейнеров Azure, используйте сервер входа из параметров реестра. Сервер входа выглядит как <имя> реестра.azurecr.io. Замените только часть localhost:5000, чтобы конечный результат выглядел как<
Visual Studio Code принимает предоставленные сведения, создает решение IoT Edge, а затем загружает его в новом окне.
После создания решения эти основные файлы находятся в решении:
Папка VSCODE содержит файл конфигурации launch.json.
Папка модулей содержит отдельные подпапки для каждого модуля. В каждой вложенной папке файл module.json управляет тем, как создаются и развертываются модули.
Env-файл содержит переменные среды. Переменная среды для реестра контейнеров — localhost:5000 по умолчанию.
Два файла развертывания модуля ,deployment.template.json и deployment.debug.template.json, перечисляют модули для развертывания на устройстве. По умолчанию список включает в себя системные модули IoT Edge (edgeAgent и edgeHub) и примеры модулей, например:
- filtermodule — это пример модуля, реализующего простую функцию фильтра.
- Модуль SimulatedTemperatureSensor имитирует данные, которые можно использовать для тестирования. Дополнительные сведения о том, как работают манифесты развертывания, см. в разделе Сведения об использовании манифестов развертывания для развертывания модулей и установки маршрутов. Дополнительные сведения о том, как работает имитированный модуль температуры, см. в исходном коде SimulatedTemperatureSensor.csproj.
Примечание.
Точные установленные модули могут зависеть от выбранного языка.
Задание версии среды выполнения IoT Edge
Последняя стабильная версия системного модуля IoT Edge — 1.5. Задайте для системных модулей значение версии 1.5.
В Visual Studio Code откройте файл манифеста развертывания deployment.template.json . Манифест развертывания — это документ JSON, описывающий модули для настройки на целевом устройстве IoT Edge.
Измените версию среды выполнения для образов модулей среды выполнения системы edgeAgent и edgeHub. Например, если вы хотите использовать среду выполнения IoT Edge версии 1.5, измените следующие строки в файле манифеста развертывания:
"systemModules": { "edgeAgent": { "image": "mcr.microsoft.com/azureiotedge-agent:1.5", "edgeHub": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
Предоставление учетных данных реестра агенту IoT Edge
Файл среды хранит учетные данные для реестра контейнеров и совместно использует их со средой выполнения IoT Edge. Среда выполнения должна получить эти учетные данные для извлечения образов контейнеров на устройство IoT Edge.
Расширение IoT Edge пытается извлечь учетные данные реестра контейнеров из Azure и заполнить их в файле среды.
Примечание.
Файл среды создается только в том случае, если вы указали репозиторий образов для модуля. Если вы не изменяли значения по умолчанию localhost для тестирования и отладки локально, объявлять переменные среды не требуется.
Проверьте, существуют ли ваши учетные данные. В противном случае добавьте их:
Если Реестр контейнеров Azure является реестром, задайте Реестр контейнеров Azure имени пользователя и пароля. Получите эти значения из меню "Параметры> доступа" реестра контейнеров в портал Azure.
Откройте ENV-файл в модуле решения.
Добавьте значения имени пользователя и пароля, скопированные из своего реестра контейнера Azure. Например:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"
Сохраните изменения в env-файле .
Примечание.
В этом руководстве используются учетные данные администратора для реестра контейнеров Azure, которые удобны для сценариев разработки и тестирования. При переходе в рабочую среду рекомендуется использовать для проверки подлинности вариант с минимальными правами, например субъект-службу или маркеры уровня репозитория. Дополнительные сведения см. в разделе Управление доступом к реестру контейнеров.
Целевая архитектура
Выберите архитектуру, предназначенную для каждого решения, так как это влияет на создание и запуск контейнера. По умолчанию используется Linux AMD64. В этом руководстве используйте виртуальную машину Ubuntu в качестве устройства IoT Edge и оставьте значение amd64 по умолчанию.
Если вам нужно изменить целевую архитектуру решения, выполните следующие действия.
Откройте палитру команд и найдите Azure IoT Edge: задайте целевую платформу по умолчанию для решения Edge или щелкните значок ярлыка в боковой строке в нижней части окна.
В палитре команд выберите целевую архитектуру из списка параметров.
Целевая архитектура устанавливается при создании образа контейнера на следующем шаге.
Обновление модуля с помощью пользовательского кода
Каждый шаблон включает пример кода, который принимает имитированные данные датчика из модуля SimulatedTemperatureSensor и направляет его в Центр Интернета вещей. Пример модуля получает сообщения и передает их. Функциональность конвейера показывает важную концепцию в IoT Edge: как модули взаимодействуют друг с другом.
Каждый модуль может иметь несколько очередей ввода и вывода , объявленных в коде. Центр IoT Edge, работающий на устройстве, направляет сообщения из выходных данных одного модуля в входные данные одного или нескольких модулей. Конкретный код для объявления входных и выходных данных зависит от языков, но концепция одинакова для всех модулей. Дополнительные сведения о маршрутизации между модулями см. в разделе Объявление маршрутов.
В примере кода C#, который поставляется с шаблоном проекта, используется класс ModuleClient из пакета SDK для Центра Интернета вещей для .NET.
В обозревателе Visual Studio Code откройте >ModuleBackgroundService.cs.
Перед пространством имен filtermodule добавьте три оператора using для типов, которые используются позже:
using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConvert
Добавьте переменную temperatureThreshold в класс ModuleBackgroundService. Эта переменная задает значение, которое измеряемая температура должна превышать для отправки данных в Центр Интернета вещей.
static int temperatureThreshold { get; set; } = 25;
Добавьте классы MessageBody, Machine и Ambient. Эти классы определяют ожидаемую схему текста входящего сообщения.
class MessageBody { public Machine machine {get;set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} }
Найдите функцию ExecuteAsync . Эта функция создает и настраивает объект ModuleClient , позволяющий модулю подключаться к локальной среде выполнения Azure IoT Edge для отправки и получения сообщений. После создания ModuleClient код считывает значение temperatureThreshold из требуемых свойств двойника модуля. Этот код регистрирует обратный вызов для получения сообщений из центра IoT Edge через конечную точку input1.
Замените вызов метода ProcessMessageAsync новым, который обновляет имя конечной точки и метод, который вызывается при поступлении входных данных. Также добавьте метод SetDesiredPropertyUpdateCallbackAsync для обновления нужных свойств. Чтобы внести это изменение, замените последнюю строкуметода ExecuteAsync следующим кодом:
// Register a callback for messages that are received by the module. // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken); // Read the TemperatureThreshold value from the module twin's desired properties var moduleTwin = await _moduleClient.GetTwinAsync(); await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient); // Attach a callback for updates to the module twin's desired properties. await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null); // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method. await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);
Добавьте метод onDesiredPropertiesUpdate в класс ModuleBackgroundService. Этот метод принимает изменения требуемых свойств из двойника модуля и соответствующим образом изменяет переменную temperatureThreshold. У каждого модуля есть собственный модуль-двойник, что позволяет настроить код, выполняемый в модуле, непосредственно из облака.
static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext) { try { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); if (desiredProperties["TemperatureThreshold"]!=null) temperatureThreshold = desiredProperties["TemperatureThreshold"]; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", exception); } } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", ex.Message); } return Task.CompletedTask; }
Добавьте метод FilterMessages. Этот метод вызывается каждый раз, когда модуль получает сообщение из центра IoT Edge. Он отфильтровывает сообщения о температуре ниже порогового значения, настроенного с помощью двойника модуля. Он также добавляет свойство MessageType в сообщение со значением Alert.
async Task<MessageResponse> FilterMessages(Message message, object userContext) { var counterValue = Interlocked.Increment(ref _counter); try { ModuleClient moduleClient = (ModuleClient)userContext; var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {counterValue}: [{messageString}]"); // Get the message body. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " + $"exceeds threshold {temperatureThreshold}"); using (var filteredMessage = new Message(messageBytes)) { foreach (KeyValuePair<string, string> prop in message.Properties) { filteredMessage.Properties.Add(prop.Key, prop.Value); } filteredMessage.Properties.Add("MessageType", "Alert"); await moduleClient.SendEventAsync("output1", filteredMessage); } } // Indicate that the message treatment is completed. return MessageResponse.Completed; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", exception); } // Indicate that the message treatment is not completed. var moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); // Indicate that the message treatment is not completed. ModuleClient moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } }
Сохраните файл ModuleBackgroundService.cs .
В обозревателе Visual Studio Code откройте файл deployment.template.json в рабочей области решения IoT Edge.
Так как мы изменили имя конечной точки, которую модуль прослушивает, также необходимо обновить маршруты в манифесте развертывания, чтобы edgeHub отправлял сообщения в новую конечную точку.
Найдите раздел routes в двойнике модуля $edgeHub. Обновите маршрут sensorTofiltermodule, чтобы заменить
input1
наinputFromSensor
:"sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"
Добавьте двойник модуля filtermodule в манифест развертывания. Вставьте следующее содержимое JSON в нижней части раздела modulesContent после двойника модуля $edgeHub:
"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }
Сохраните файл deployment.template.json.
Сборка и отправка решения
Вы обновили код модуля и шаблон развертывания, чтобы понять некоторые основные понятия развертывания. Теперь вы готовы создать образ контейнера модуля и отправить его в реестр контейнеров.
В Visual Studio Code откройте файл манифеста развертывания deployment.template.json . Манифест развертывания описывает модули, которые необходимо настроить на целевом устройстве IoT Edge. Перед развертыванием необходимо обновить учетные данные Реестр контейнеров Azure и образы модулей соответствующими createOptions
значениями. Дополнительные сведения о значениях createOption см. в разделе "Настройка параметров создания контейнера для модулей IoT Edge".
Если вы используете Реестр контейнеров Azure для хранения образа модуля, добавьте свои учетные данные в >в deployment.template.json. Замените myacr собственным именем реестра и укажите пароль и адрес сервера входа. Например:
"registryCredentials": {
"myacr": {
"username": "myacr",
"password": "<your_acr_password>",
"address": "myacr.azurecr.io"
}
}
Добавьте или замените следующее строковое содержимое в значение createOptions для каждой системы (edgeHub и edgeAgent) и пользовательского модуля (filtermodule и tempSensor). При необходимости измените значения.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Например, конфигурация filtermodule должна быть похожа на следующую:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
Образ Docker модуля сборки
Откройте интегрированный терминал Visual Studio Code, выбрав терминал>"Новый терминал".
dotnet publish
Используйте команду для создания образа контейнера для архитектуры Linux и amd64. Измените каталог на каталог filtermodule в проекте и выполните команду dotnet publish .
dotnet publish --os linux --arch x64 /t:PublishContainer
В настоящее время шаблон средства iotedgedev предназначен для .NET 7.0. Если вы хотите настроить другую версию .NET, можно изменить файл filtermodule.csproj и изменить значения TargetFramework и PackageReference . Например, для целевого объекта .NET 8.0 файл filtermodule.csproj должен выглядеть следующим образом:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Пометьте образ Docker сведениями реестра контейнеров, версией и архитектурой. Замените myacr собственным именем реестра.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64
Образ Docker модуля push
Предоставьте учетные данные реестра контейнеров Docker, чтобы он смог отправить образ контейнера в хранилище в реестре.
Войдите в Docker с помощью учетных данных Реестр контейнеров Azure (ACR).
docker login -u <ACR username> -p <ACR password> <ACR login server>
Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать
--password-stdin
. Хотя это рекомендуемая практика для рабочих сценариев, она выходит за рамки этого руководства. Дополнительные сведения см. в описании команды docker login в справочнике.Войдите в Реестр контейнеров Azure. Чтобы использовать команду, необходимо
az
. Эта команда запрашивает имя пользователя и пароль, найденные в реестре контейнеров в разделах> "Параметры доступа".az acr login -n <ACR registry name>
Совет
Если вы вы выполнили вход в любой момент в этом руководстве, повторите docker и Реестр контейнеров Azure выполнить вход, чтобы продолжить.
Отправьте образ модуля в локальный реестр или реестр контейнеров.
docker push <ImageName>
Например:
# Push the Docker image to the local registry docker push localhost:5000/filtermodule:0.0.1-amd64 # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name. az acr login --name myacr docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Обновление шаблона развертывания
Обновите шаблон развертывания deployment.template.json с расположением образа реестра контейнеров. Например, если вы используете Реестр контейнеров Azure myacr.azurecr.io, а образ фильтруется:0.0.1-amd64, обновите конфигурацию фильтра следующим образом:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
В обозревателе Visual Studio Code щелкните правой кнопкой мыши файл deployment.template.json и выберите Build and Push IoT Edge solution (Создать и отправить решение IoT Edge).
Эта команда сборки и отправки позволяет запустить три операции. Во-первых,в решении создается папка с именем config, которая содержит полный манифест развертывания на основе информации из шаблона развертывания и других файлов решения. Во-вторых, выполняется docker build
для сборки образа контейнера на основе подходящего файла dockerfile для целевой архитектуры. В-третьих, выполняется docker push
для отправки образа в реестр контейнеров.
В первый раз выполнение этого процесса может занять несколько минут, но при следующем запуске команд он будет быстрее.
Необязательно. Обновление модуля и образа
При внесении изменений в код модуля необходимо перестроить и отправить образ модуля в реестр контейнеров. Чтобы обновить образ сборки и контейнера, выполните действия, описанные в этом разделе. Этот раздел можно пропустить, если вы не внесите никаких изменений в код модуля.
Откройте файл deployment.amd64.json в папке созданной конфигурации. Имя файла отражает целевую архитектуру, поэтому она отличается, если вы выбрали другую архитектуру.
Обратите внимание, что два параметра, которые имели заполнители, теперь содержат соответствующие значения. Раздел registryCredentials содержит имя пользователя и пароль реестра, полученные из env-файла . Фильтрмодул содержит полный репозиторий образов с тегом имени, версии и архитектуры из файла module.json.
Откройте файл module.json в папке filtermodule.
Измените номер версии для образа модуля. Например, увеличьте номер версии исправления так
"version": "0.0.2"
, как если бы вы сделали небольшое исправление в коде модуля.Совет
Версии модулей обеспечивают управление версиями и позволяют тестировать изменения на небольшом наборе устройств, прежде чем развертывать обновления в рабочей среде. Если перед построением и принудительной отправкой вы не увеличите версию модуля, перезапишите репозиторий в реестре контейнеров.
Сохраните изменения в файле module.json .
Создайте и отправьте обновленный образ с тегом версии 0.0.2 . Например, чтобы создать и отправить образ для локального реестра или реестра контейнеров Azure, используйте следующие команды:
# Build the container image for Linux and amd64 architecture.
dotnet publish --os linux --arch x64
# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.
docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64
# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64
Щелкните правой кнопкой мыши файл deployment.template.json и выберите Build and Push IoT Edge solution (Создать и отправить решение IoT Edge).
Снова откройте файл deployment.amd64.json. Обратите внимание, что система сборки не создает новый файл при повторном запуске команды сборки и отправки. Скорее, одно и то же обновление файла для отражения изменений. Теперь образ filtermodule указывает на версию контейнера 0.0.2.
Чтобы дополнительно проверить, что сделала команда создания и отправки, откройте портал Azure и перейдите к своему реестру контейнеров.
В реестре контейнеров выберите репозитории , а затем фильтруйте. Убедитесь, что обе версии образа отправляется в реестр.
Устранение неполадок
Если вы сталкиваетесь с ошибками при создании и отправке образа вашего модуля, это часто связано с настройкой Docker на вашем компьютере для разработки. Чтобы просмотреть конфигурацию, выполните следующие проверки:
- Вы выполнили команду
docker login
, используя учетные данные, скопированные из реестра контейнеров? Эти учетные данные отличаются от тех, которые вы используете для входа на портал Azure. - Правильно ли указан репозиторий контейнеров? У вас есть правильное имя реестра контейнеров и правильное имя модуля? Откройте файл module.json в папке filtermodule, чтобы проверить. Значение репозитория должно выглядеть как <имя> реестра.azurecr.io/filtermodule.
- Если для модуля используется другое имя, отличное от filtermodule , это имя согласовано во всем решении?
- Ваш компьютер использует тот же тип контейнеров, который вы создаете? Этот учебник предназначен для устройств IoT Edge с Linux, поэтому на боковой панели в Visual Studio Code должно отображаться amd64 или arm32v7, а на Docker Desktop должны запускаться контейнеры Linux.
Развертывание модулей на устройстве
Вы проверили, что в реестре контейнеров хранятся встроенные образы контейнеров, поэтому пришло время развернуть их на устройстве. Убедитесь, что устройство IoT Edge работает.
Используйте команду набора модулей Azure CLI IoT Edge для развертывания модулей в Центр Интернета вещей Azure. Например, чтобы развернуть модули, определенные в файле deployment.template.json, для Центр Интернета вещейmy-iot-hub для устройства IoT Edge используйте следующую команду. Замените значения для имени концентратора, идентификатора устройства и входа Центр Интернета вещей строка подключения собственным.
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
Совет
Найдите строку подключения Центра Интернета вещей, включая общий ключ доступа, на портале Azure. Перейдите к параметрам Центр Интернета вещей >>>
В обозревателе Visual Studio Code в разделе Центр Интернета вещей Azure разверните меню Устройства, чтобы отобразить список устройств Интернета вещей.
Щелкните устройство IoT Edge правой кнопкой мыши, а затем выберите Create Deployment for Single Device (Создание развертывания для одного устройства).
В проводнике перейдите в папку config и выберите файл deployment.amd64.json.
Не используйте файл deployment.template.json, у которого нет учетных данных реестра контейнеров или значений образов модуля. Если вы нацелены на устройство Linux ARM32, имя манифеста развертывания deployment.arm32v7.json.
Разверните меню Модули для своего устройства, чтобы просмотреть список развернутых и запущенных модулей. Нажмите кнопку обновления. На устройстве должны отображаться новые модули tempSensor и filtermodule .
Для запуска модулей может потребоваться несколько минут. Среда выполнения IoT Edge получает новый манифест развертывания, извлекает образы модулей из среды выполнения контейнера, а затем запускает каждый новый модуль.
Просмотр сообщений с устройства
Пример кода модуля получает сообщения через входную очередь и отправляет их через выходную очередь. Манифест развертывания настраивает маршруты, отправляющие сообщения в фильтромодуль от tempSensor, а затем пересылает сообщения из фильтромодуль в Центр Интернета вещей. Расширения Azure IoT Edge и Azure IoT Hub позволяют просматривать сообщения по мере их поступления в IoT Hub с устройства.
В обозревателе Visual Studio Code выберите устройство IoT Edge, которое вы хотите отслеживать, а затем нажмите кнопку "Начать мониторинг встроенной конечной точки события".
Просмотрите окно вывода в Visual Studio Code, чтобы увидеть сообщения, поступающие в Центр Интернета вещей.
Просмотр изменений на устройстве
Чтобы узнать, что происходит на устройстве, используйте команды, приведенные в этом разделе, для проверки среды выполнения и модулей IoT Edge, работающих на устройстве.
Эти команды предназначены для устройства IoT Edge, а не для компьютера разработки. Если вы используете виртуальную машину для устройства IoT Edge, подключитесь к ней сейчас. В Azure перейдите на страницу обзора виртуальной машины и щелкните Подключить, чтобы получить доступ к безопасному соединению оболочки.
Просмотрите все модули, развернутые на вашем устройстве, и проверьте их состояние:
iotedge list
Вы увидите четыре модуля: два модуля среды выполнения IoT Edge, tempSensor и filtermodule. Все четыре должны быть перечислены как находящиеся в рабочем состоянии.
Просмотрите журналы для определенного модуля:
iotedge logs <module name>
Имена модулей учитывают регистр букв.
Журналы tempSensor и filtermodule показывают сообщения, которые они обрабатывают. Модуль edgeAgent запускает другие модули, поэтому журналы содержат сведения о манифесте развертывания. Если модуль не указан или не запущен, проверьте журналы edgeAgent на наличие ошибок. Модуль EdgeHub управляет взаимодействием между модулями и Центром Интернета вещей. Если модули выполняются, но сообщения не приходят в Центр Интернета вещей, проверьте журналы edgeHub для ошибок.
Очистка ресурсов
Если вы хотите продолжить работу со следующей рекомендуемой статьей, сохраните созданные ресурсы и конфигурации и их повторное использование. Это же устройство IoT Edge также можно использовать в качестве тестового устройства.
В противном случае удалите локальные конфигурации и ресурсы Azure, используемые в этой статье, чтобы избежать расходов.
Удаление ресурсов Azure
Удаление ресурсов и групп ресурсов Azure является необратимым. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали Центр Интернета вещей в существующей группе ресурсов с ресурсами, которые необходимо сохранить, удалите только сам ресурс Центра Интернета вещей, а не группу ресурсов.
Удаление ресурсов:
Войдите на портал Azure и щелкните Группы ресурсов.
Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.
Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, можно выбрать каждый ресурс, чтобы удалить их по отдельности.
Следующие шаги
В этом руководстве вы настроите Visual Studio Code на компьютере разработки и развернете первый модуль IoT Edge с кодом, который фильтрует необработанные данные, созданные устройством IoT Edge.
Перейдите к следующим руководствам, чтобы узнать, как Azure IoT Edge позволяет развертывать облачные службы Azure для обработки и анализа данных на периферии.