Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:
IoT Edge 1.5
Внимание
IoT Edge 1.5 LTS — это поддерживаемый выпуск. IoT Edge 1.4 LTS достиг срока окончания службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update IoT Edge.
В этом руководстве показано, как разрабатывать и развертывать код на устройстве IoT Edge. модули Azure IoT Edge позволяют развертывать код, который выполняет бизнес-логику непосредственно на устройстве IoT Edge. В руководстве быстрого старта Развертывание кода на устройстве Linux вы настроили устройство IoT Edge и развернули модуль из Azure Marketplace.
В этой статье описаны шаги для двух средств разработки IoT Edge:
- Azure IoT Edge Dev Tool инструмент командной строки (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 CLI.
Устройство Azure IoT Edge:
- Запустите IoT Edge на отдельном устройстве. Сохранение компьютера разработки и IoT Edge устройства отдельно имитирует реальный сценарий развертывания и помогает обеспечить четкость концепций. Используйте статью Развертывание кода на устройстве Linux, чтобы создать устройство IoT Edge в Azure, или используйте шаблон Azure Resource Manager для развертывания виртуальной машины с включенной поддержкой IoT Edge.
Облачные ресурсы.
- Используйте бесплатный или стандартный уровень Azure IoT Hub.
Если у вас нет учетной записи Azure, создайте учетную запись free перед началом работы.
Совет
Рекомендации по интерактивной отладке в Visual Studio Code или Visual Studio 2022:
- Отладка модулей Azure IoT Edge с помощью Visual Studio Code
- Use Visual Studio 2022 для разработки и отладки модулей для Azure IoT Edge
В этом руководстве рассматриваются этапы разработки для Visual Studio Code.
Основные понятия
В этом руководстве описывается разработка модуля IoT Edge. Модуль IoT Edge — это контейнер с исполняемым кодом. Можно развернуть один или несколько модулей на устройстве IoT Edge. Модули выполняют определенные задачи, такие как прием данных из датчиков, очистка и анализ данных или отправка сообщений в IoT Hub. Для получения дополнительной информации см. Понимание модулей 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 Операционная система ARM64 |
Linux AMD64 Linux ARM32 Операционная система ARM64 |
| службы Azure | Azure Functions Azure Stream Analytics Azure Machine Learning |
|
| Языки | C C# Java Node.js Python |
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. Дополнительные сведения см. в разделе Switch между контейнерами Windows и Linux.
Дополнительные сведения об установке на нескольких платформах Linux см. в статье о Docker CE. Для Windows Subsystem for Linux (WSL) установите Docker Desktop для Windows.
Настройка средств
Установите разработанное на основе Python средство Azure IoT Edge Dev Tool для создания вашего решения IoT Edge. У вас есть два варианта:
- Используйте предпочтительный готовый IoT Edge контейнер разработки.
- Установите средство с помощью программы iotedgedev development setup.
Внимание
Средство Azure IoT Edge tools для Visual Studio Code находится в режиме поддержки. Предпочтительным инструментом разработки является средство командной строки (CLI) Azure IoT Edge Dev Tool.
Используйте расширения Интернета вещей для Visual Studio Code для разработки модулей IoT Edge. Эти расширения предлагают шаблоны проектов, автоматизируйте создание манифеста развертывания и позволяет отслеживать устройства IoT Edge и управлять ими. В этом разделе описано, как установить Visual Studio Code и расширение Интернета вещей, а затем настроить учетную запись Azure для управления ресурсами IoT Hub из Visual Studio Code.
- Установите расширение Azure IoT Edge.
- Установите расширение Azure IoT Hub.
- После установки расширений откройте палитру команд, выбрав "Просмотреть > палитру команд".
- В палитре команд найдите и выберите Azure IoT Hub: выберите IoT Hub. Следуйте инструкциям, чтобы выбрать подписку Azure и IoT Hub.
- Откройте раздел обозревателя Visual Studio Code, выбрав значок на панели действий или выбрав View > Explorer.
- В нижней части раздела обозревателя разверните свернутое меню Azure IoT Hub / Devices. Вы увидите устройства и IoT Edge устройства, связанные с выбранным в командной панели IoT Hub.
Установка определенных языковых средств
Установите средства, относящиеся к языку, который вы разрабатываете:
Создание реестра контейнеров
В этом руководстве вы используете расширения Azure IoT Edge и Azure IoT Hub для создания модуля и создания образа контейнера из файлов. Затем вы отправляете этот образ в реестр, в который хранятся образы и управляют ими. Наконец, вы развернете образ из репозитория для запуска на устройстве IoT Edge.
Внимание
Расширение Azure IoT Edge Visual Studio Code находится в режиме обслуживания.
Для хранения образов контейнеров можно использовать любые реестры, совместимые с Docker. Две популярные службы реестра Docker: Azure Container Registry и Docker Hub. В этом руководстве используется Azure Container Registry.
Если у вас еще нет реестра контейнеров, выполните следующие действия, чтобы создать новый в Azure:
На портале Azure выберите Create a resource>Containers>Container Registry.
Укажите следующие обязательные значения для создания реестра контейнеров:
Поле значение Подписка Выберите подписку из раскрывающегося списка. Группа ресурсов Используйте одну и ту же группу ресурсов для всех ресурсов для тестирования, создаваемых в ходе IoT Edge кратких и практических руководств; например, IoTEdgeResources. Имя реестра Укажите уникальное имя. Расположение Выберите расположение рядом с вами. Номер SKU Выберите Базовый. Нажмите кнопку "Рецензирование и создание", а затем "Создать".
Выберите новый реестр контейнеров в разделе Resources домашней страницы портала 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 solution initдля создания решения и настройки Azure IoT Hub на выбранном языке разработки:
Команда iotedgedev solution init предлагает выполнить несколько шагов, в том числе:
- Проверка подлинности в Azure
- Выбор подписки Azure
- Выбор или создание группы ресурсов
- Выбор или создание Azure IoT Hub
- Выбор или создание устройства Azure IoT Edge
Используйте Visual Studio Code и расширение Azure IoT Edge. Сначала создайте решение, а затем создайте первый модуль в этом решении. Каждое решение может включать несколько модулей.
- Выберите палитру команд view>.
- В палитре команд введите и запустите команду Azure IoT Edge: новое решение IoT Edge.
- Перейдите к папке, в которой нужно создать новое решение, а затем выберите " Выбрать папку".
- Введите название для вашего решения.
- Выберите шаблон модуля для предпочитаемого языка разработки. Он станет первым модулем в решении.
- Введите имя модуля. Выберите имя, которое будет уникальным в пределах реестра контейнеров.
- Введите имя репозитория образов модуля. Visual Studio Code автоматически заполняет имя модуля localhost:5000/<your module name>. Замените его собственными данными реестра. Используйте localhost , если вы используете локальный реестр Docker для тестирования. Если вы используете Azure Container Registry, используйте сервер Login из параметров реестра. Сервер входа выглядит как <реестр с именем>.azurecr.io. Замените только часть localhost:5000, чтобы окончательный результат выглядел как <имя реестра>.azurecr.io/<ваше имя модуля>.
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 Container Registry является реестром, задайте Azure Container Registry имя пользователя и пароль. Получите эти значения из меню Настройки>Ключи доступа на портале Azure.
Откройте ENV-файл в модуле решения.
Добавьте значения username и password, скопированные из реестра контейнеров Azure. Например:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"Сохраните изменения в env-файле .
Примечание.
В этом руководстве используются учетные данные администратора для Azure Container Registry, которые удобны для сценариев разработки и тестирования. Когда вы будете готовы к рабочим сценариям, мы рекомендуем использовать вариант аутентификации с минимальными привилегиями, например учетные записи службы или токены, ограниченные репозиторием. Дополнительные сведения см. в разделе Управление доступом к реестру контейнеров.
Целевая архитектура
Выберите архитектуру, предназначенную для каждого решения, так как это влияет на создание и запуск контейнера. По умолчанию используется Linux AMD64. В этом руководстве используйте виртуальную машину Ubuntu в качестве устройства IoT Edge и сохраните значение по умолчанию amd64.
Если вам нужно изменить целевую архитектуру решения, выполните следующие действия.
- Откройте палитру команд и найдите Azure IoT Edge: установите целевую платформу по умолчанию для пограничного решения или щелкните значок ярлыка в боковой панели в нижней части окна.
- В палитре команд выберите целевую архитектуру из списка параметров.
Целевая архитектура устанавливается при создании образа контейнера на следующем шаге.
Обновление модуля с помощью пользовательского кода
Каждый шаблон включает пример кода, который принимает имитированные данные датчика из модуля SimulatedTemperatureSensor и направляет его в IoT Hub. Пример модуля получает сообщения и передает их. Функциональность конвейера показывает важную концепцию в IoT Edge: как модули взаимодействуют друг с другом.
Каждый модуль может иметь несколько очередей ввода и вывода , объявленных в коде. Центр IoT Edge, работающий на устройстве, направляет сообщения из выходных данных одного модуля в входные данные одного или нескольких модулей. Конкретный код для объявления входных и выходных данных зависит от языков, но концепция одинакова для всех модулей. Дополнительные сведения о маршрутизации между модулями см. в разделе Объявление маршрутов.
Пример кода C#, который поставляется с шаблоном проекта, использует класс ModuleClient из пакета SDK IoT Hub для .NET.
В обозревателе Visual Studio Code откройте modules > filtermodule > ModuleBackgroundService.cs.
filtermoduleПеред пространством имен добавьте триusingинструкции для типов, которые используются позже:using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConverttemperatureThresholdДобавьте переменную вModuleBackgroundServiceкласс. Эта переменная задает значение, которое измеряемая температура должна превышать для отправки данных в IoT Hub.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. Манифест deployment описывает модули, которые необходимо настроить на целевом IoT Edge устройстве. Перед развертыванием необходимо обновить учетные данные Azure Container Registry и образы модулей соответствующими значениями createOptions. Дополнительные сведения о значениях createOptions см. в разделе Как настроить параметры создания контейнеров для модулей IoT Edge.
Если вы используете Azure Container Registry для хранения образа модуля, добавьте свои учетные данные в раздел modulesContent > edgeAgent > settings > registryCredentials в 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, выбрав Terminal > Новый терминал.
dotnet publish Используйте команду для создания образа контейнера для архитектуры Linux и amd64. Измените каталог на каталог filtermodule в проекте и выполните dotnet publish команду.
dotnet publish --os linux --arch x64 /t:PublishContainer
В настоящее время шаблон средства iotedgedev предназначен для .NET 7.0, который перестал поддерживаться в мае 2024 года. Обновите проект до целевого .NET версии 8.0 (LTS, поддерживаемая до ноября 2026 г.), изменив файл filtermodule.csproj и изменив значения TargetFramework и PackageReference. Файл 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 модуля
Предоставьте учетные данные реестра контейнеров Docker, чтобы он смог отправить образ контейнера в хранилище в реестре.
Войдите в Docker с помощью учетных данных Azure Container Registry (ACR):
docker login -u <ACR username> -p <ACR password> <ACR login server>Возможно, вы получите предупреждение системы безопасности, рекомендуемое использовать
--password-stdin. Хотя это рекомендуемая практика для рабочих сценариев, она выходит за рамки этого руководства. Для проверки подлинности реестра рабочих контейнеров используйте маркеры, управляемые субъектом-службой или репозиторием, а не учетными данными администратора. Дополнительные сведения см. в разделе "Управление доступом к реестру контейнеров " и ссылке на имя входа Docker .Войдите в Azure Container Registry. Чтобы использовать команду
az, необходимо установить Azure CLI. Эта команда запрашивает имя пользователя и пароль, найденные в реестре контейнеров в разделах > "Параметры доступа":az acr login -n <ACR registry name>Совет
Если вы вышли из системы в любой момент в этом руководстве, повторите шаги входа в Docker и Azure Container Registry, чтобы продолжить.
Отправьте образ модуля в локальный реестр или реестр контейнеров:
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 Container Registry myacr.azurecr.io и образ filtermodule:0.0.1-amd64, то обновите конфигурацию 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\"}]}}}"
}
}
В обозревателе Visual Studio Code щелкните правой кнопкой мыши на файле deployment.template.json и выберите Собрать и Отправить решение IoT Edge.
Команда сборки и отправки запускает три операции. Во-первых,в решении создается папка с именем config, которая содержит полный манифест развертывания на основе информации из шаблона развертывания и других файлов решения. Во-вторых, выполняется docker build для сборки образа контейнера на основе соответствующего файла "dockerfile" для целевой архитектуры. Затем выполняется docker push для передачи репозитория образов в реестр контейнеров.
Этот процесс может занять несколько минут в первый раз, но это быстрее при следующем выполнении команд.
Необязательно. Обновление модуля и образа
При внесении изменений в код модуля необходимо перестроить и отправить образ модуля в реестр контейнеров. Чтобы обновить образ сборки и контейнера, выполните действия, описанные в этом разделе. Этот раздел можно пропустить, если вы не внесите никаких изменений в код модуля.
Откройте файл deployment.amd64.json в папке созданной конфигурации. Имя файла отражает целевую архитектуру, поэтому она отличается, если вы выбрали другую архитектуру.
Обратите внимание, что два параметра, которые ранее имели заполнители, теперь содержат соответствующие значения. В разделе registryCredentials содержатся ваше имя пользователя и пароль реестра, извлеченные из файла .env. У filtermodule находится полный репозиторий образов с тегами имени, версии и архитектуры из файла 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 и снова выберите Сборка и отправка решения IoT Edge.
Снова откройте файл deployment.amd64.json. Обратите внимание, что система сборки не создает новый файл при повторном запуске команды сборки и отправки. Скорее, одно и то же обновление файла для отражения изменений. Теперь изображение filtermodule указывает на версию 0.0.2 контейнера.
Чтобы дополнительно проверить, что сделала команда сборки и отправки, откройте портал Azure и перейдите в реестр контейнеров. В реестре контейнеров выберите репозитории, а затем filtermodule. Убедитесь, что обе версии образа отправляются в реестр.
Устранение неполадок
Если вы сталкиваетесь с ошибками при создании и отправке образа вашего модуля, это часто связано с настройкой Docker на вашем компьютере для разработки. Чтобы просмотреть конфигурацию, выполните следующие проверки:
- Вы выполнили команду
docker login, используя учетные данные, скопированные из реестра контейнеров? Эти учетные данные отличаются от тех, которые вы используете для входа в Azure. - Правильно ли указан репозиторий контейнеров? У вас есть правильное имя реестра контейнеров и правильное имя модуля? Откройте файл module.json в папке filtermodule, чтобы проверить. Значение репозитория должно совпадать с <именем> реестра.azurecr.io/filtermodule.
- Если для модуля используется другое имя, отличное от filtermodule , это имя согласовано во всем решении?
- Ваш компьютер использует тот же тип контейнеров, который вы создаете? Это руководство предназначено для устройств Linux IoT Edge, поэтому в Visual Studio Code должно быть указано amd64 или arm32v7 на боковой панели, и Docker Desktop должен использовать контейнеры Linux.
Развертывание модулей на устройстве
Вы проверили, что в реестре контейнеров хранятся встроенные образы контейнеров, поэтому пришло время развернуть их на устройстве. Убедитесь, что устройство IoT Edge работает.
Используйте команду IoT Edge Azure CLI set-modules для развертывания модулей в Azure IoT Hub. Например, чтобы развернуть модули, определенные в файле deployment.template.json в IoT Hub my-iot-hub для устройства IoT Edge my-device, используйте следующую команду. Замените значения hub-name, device-id и login в строке подключения IoT Hub на собственные.
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>"
Совет
Найдите строку подключения IoT Hub, включая общий ключ доступа, в портале Azure. Перейдите к IoT Hub и выберите параметры Security > политики общего доступа > iothubowner.
В обозревателе Visual Studio Code в разделе Azure IoT Hub разверните узел Devices, чтобы просмотреть список устройств Интернета вещей.
Щелкните правой кнопкой мыши устройство IoT Edge, на которое нужно развернуть, а затем выберите Создать развертывание для одного устройства.
В проводнике перейдите в папку config и выберите файл deployment.amd64.json.
Не используйте файл deployment.template.json, у которого нет учетных данных реестра контейнеров или значений образов модуля. Если вы нацелены на устройство Linux ARM32, имя манифеста развертывания deployment.arm32v7.json.
Разверните меню Модули для своего устройства, чтобы просмотреть список развернутых и запущенных модулей. Нажмите кнопку обновления. На устройстве должны отображаться новые модули tempSensor и filtermodule .
Для запуска модулей может потребоваться несколько минут. Среда выполнения IoT Edge получает новый манифест развертывания, извлекает образы модулей из среды выполнения контейнера, а затем запускает каждый новый модуль.
Просмотр сообщений с устройства
Пример кода модуля получает сообщения через входную очередь и отправляет их через выходную очередь. Манифест развертывания настраивает маршруты, которые отправляют сообщения в filtermodule из tempSensor, а затем перенаправляет сообщения из filtermodule в IoT Hub. Расширения Azure IoT Edge и Azure IoT Hub позволяют просматривать сообщения по мере поступления IoT Hub с устройства.
В обозревателе Visual Studio Code выберите устройство IoT Edge, которое вы хотите отслеживать, а затем выберите Start Monitoring Built-in Event Endpoint.
Просмотрите окно вывода в Visual Studio Code, чтобы увидеть сообщения, поступающие в IoT Hub.
Просмотр изменений на устройстве
Чтобы узнать, что происходит на устройстве, используйте команды, приведенные в этом разделе, для проверки среды выполнения и модулей IoT Edge, работающих на устройстве.
Эти команды предназначены для устройства IoT Edge, а не для компьютера разработки. Если вы используете виртуальную машину для устройства IoT Edge, подключитесь к нему. В Azure перейдите на страницу сведений виртуальной машины и выберите Connect для доступа к SSH-подключению.
Просмотрите все модули, развернутые на вашем устройстве, и проверьте их состояние:
iotedge listВы увидите четыре модуля: два модуля среды выполнения IoT Edge, tempSensor и filtermodule. Все четыре должны быть перечислены как находящиеся в рабочем состоянии.
Просмотрите журналы для определенного модуля:
iotedge logs <module name>Имена модулей учитывают регистр букв.
Журналы tempSensor и filtermodule показывают сообщения, которые они обрабатывают. Модуль edgeAgent запускает другие модули, поэтому журналы содержат сведения о манифесте развертывания. Если модуль не указан или не запущен, проверьте журналы edgeAgent на наличие ошибок. Модуль edgeHub управляет взаимодействием между модулями и IoT Hub. Если модули выполняются, но сообщения не приходят в IoT Hub, проверьте журналы edgeHub на наличие ошибок.
Очистка ресурсов
Если вы хотите продолжить работу со следующей рекомендуемой статьей, сохраните созданные ресурсы и конфигурации и их повторное использование. Вы также можете использовать то же IoT Edge устройство, что и тестовое устройство. В противном случае, чтобы избежать расходов, удалите локальную конфигурацию и Azure ресурсы, используемые в этой статье.
Удаление ресурсов Azure
Отменить удаление Azure ресурсов и групп ресурсов невозможно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали IoT Hub внутри существующей группы ресурсов с ресурсами, которые нужно сохранить, удалите только сам IoT Hub ресурс, а не группу ресурсов.
Чтобы удалить ресурсы:
- Войдите на портал Azure, а затем выберите группы Resource.
- Выберите имя группы ресурсов, содержащей IoT Edge тестовые ресурсы.
- Просмотрите список ресурсов, содержащихся в группе ресурсов. Если вы хотите удалить их все, щелкните Удалить группу ресурсов. Если вы хотите удалить только некоторые из них, выберите каждый ресурс, чтобы удалить их по отдельности.
Следующие шаги
В этом руководстве вы настроили Visual Studio Code на компьютере разработки и развернете первый модуль IoT Edge с кодом, который фильтрует необработанные данные, созданные устройством IoT Edge.
Переходите к следующим руководствам, чтобы узнать, как Azure IoT Edge позволяет развертывать облачные службы Azure для обработки и анализа данных на периферии.