Использование Visual Studio 2022 для разработки и отладки модулей для Azure IoT Edge

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

Важно!

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

В этой статье показано, как использовать Visual Studio 2022 для разработки, отладки и развертывания пользовательских модулей Azure IoT Edge. Visual Studio 2022 предоставляет шаблоны для модулей IoT Edge, написанных на C и C#. Поддерживаемые архитектуры устройств : Windows x64, Linux x64, ARM32 и ARM64 (предварительная версия). Дополнительные сведения о поддерживаемых операционных системах, языках и архитектурах см. в разделе Поддержка языков и архитектур.

В этой статье приведены шаги для двух средств разработки IoT Edge.

  • Интерфейс командной строки (CLI) является предпочтительным средством для разработки.
  • Средства Azure IoT Edge для расширения Visual Studio . Расширение находится в режиме обслуживания.

Нажмите кнопку селектора инструментов в начале, чтобы выбрать вариант средства для этой статьи. Оба средства предоставляют следующие преимущества:

  • создание, изменение, сборку, запуск и отладку решений и модулей IoT Edge на локальном компьютере для разработки;
  • Закодируйте модули Интернета вещей Azure в C или C# с помощью преимуществ разработки Visual Studio.
  • развертывание решения IoT Edge на устройстве IoT Edge через Центр Интернета вещей;

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

В этой статье предполагается, что для разработки вы используете компьютер под управлением Windows.

  • Установите или измените Visual Studio 2022 на компьютере разработки. Выберите варианты разработки и разработки классических приложений Azure с помощью рабочих нагрузок C++.

  • Скачайте и установите средства Azure IoT Edge из Visual Studio Marketplace. Вы можете использовать расширение средств Azure IoT Edge для создания и создания решения IoT Edge. Предпочтительное средство разработки — это средство разработки Azure IoT Edge в командной строке (CLI). Расширение включает шаблоны проектов Azure IoT Edge, используемые для создания проекта Visual Studio. В настоящее время необходимо установить расширение независимо от используемого средства разработки.

    Важно!

    Расширение Средств Azure IoT Edge для VS 2022 находится в режиме обслуживания. Предпочтительное средство разработки — это средство разработки Azure IoT Edge в командной строке (CLI).

    Совет

    Если вы используете Visual Studio 2019, скачайте и установите средства Azure IoT Edge для VS 2019 из Visual Studio Marketplace.

  • Установка диспетчера библиотек Vcpkg

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    Установка пакета azure-iot-sdk-c для Windows

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • Скачайте и установите совместимую систему управления контейнерами Docker на компьютере разработки, чтобы создать и запустить образы модулей. Например, установите Docker Community Edition.

  • Для разработки модулей с контейнерами Linux используйте компьютер Windows, соответствующий требованиям для Docker Desktop.

  • Создайте Реестр контейнеров Azure или Центр Docker для хранения образов модулей.

    Совет

    Вместо облачного реестра можно использовать локальный реестр Docker для создания прототипов и тестирования.

  • Установите интерфейс командной строки Azure.

  • Чтобы протестировать модуль на устройстве, необходимо активное Центр Интернета вещей с по крайней мере одним устройством IoT Edge. Чтобы создать устройство IoT Edge для тестирования, можно создать его в портал Azure или с помощью интерфейса командной строки:

    • Создание одного в портал Azure является самым быстрым. В портал Azure перейдите к ресурсу Центр Интернета вещей. Выберите устройства в меню управления устройствами и выберите пункт "Добавить устройство".

      В разделе "Создание устройства", назовите устройство с помощью идентификатора устройства, проверка устройство IoT Edge, а затем нажмите кнопку "Сохранить" в левом нижнем левом слева.

      Наконец, убедитесь, что новое устройство существует в Центр Интернета вещей в меню "Устройства управления устройствами>". Дополнительные сведения о создании устройства IoT Edge с помощью портал Azure см. в статье "Создание и подготовка устройства IoT Edge в Linux с помощью симметричного ключа".

    • Чтобы создать устройство IoT Edge с помощью интерфейса командной строки, выполните действия, описанные в кратком руководстве по Linux или Windows. В процессе регистрации устройства IoT Edge создается устройство IoT Edge.

    Если на компьютере разработки запущена управляющая программа IoT Edge, вам может потребоваться остановить EdgeHub и EdgeAgent перед началом разработки в Visual Studio.

Создание проекта Azure IoT Edge

Шаблон проекта IoT Edge в Visual Studio создает решение для развертывания на устройствах IoT Edge. Сначала вы создадите решение Azure IoT Edge. Затем вы создадите модуль в этом решении. Каждое решение IoT Edge может содержать несколько модулей.

В нашем решении мы создадим три проекта. Основной модуль, содержащий EdgeAgent и EdgeHub, в дополнение к модулю датчика температуры. Затем вы добавите еще два модуля IoT Edge.

Важно!

Структура проекта IoT Edge, созданная Visual Studio, не совпадает с структурой проекта в Visual Studio Code.

В настоящее время интерфейс командной строки средства разработки Azure IoT Edge не поддерживает создание типа проекта Visual Studio. Для создания проекта Visual Studio IoT Edge необходимо использовать расширение Visual Studio IoT Edge.

  1. В Visual Studio создайте проект .

  2. В разделе "Создание проекта" найдите Azure IoT Edge. Выберите проект, соответствующий платформе и архитектуре устройства IoT Edge, и нажмите кнопку "Далее".

    Create New Project

  3. В поле "Настройка нового проекта" введите имя проекта, укажите расположение и нажмите кнопку "Создать".

  4. В разделе "Добавить модуль" выберите тип модуля, который требуется разработать. Если у вас есть существующий модуль, который вы хотите добавить в развертывание, выберите существующий модуль.

  5. В поле "Имя модуля" введите имя модуля. Оно должно быть уникальным в пределах реестра контейнеров.

  6. В URL-адресе репозитория укажите имя репозитория образов модуля. Visual Studio автоматически заполняет имя модуля с помощью localhost:5000/<имя> модуля. Замените его собственными данными реестра. Используйте localhost , если вы используете локальный реестр Docker для тестирования. Если используется Реестр контейнеров Azure, укажите сервер входа, заданный в параметрах реестра. Значение для сервера входа выглядит так: <имя реестра>.azurecr.io. Замените только часть localhost:5000, чтобы конечный результат выглядел как< имя> модуля реестра.azurecr.io/< your.>

  7. Выберите Добавить, чтобы добавить модуль в проект.

    Screenshot of how to add Application and Module.

    Примечание.

    Если у вас есть существующий проект IoT Edge, можно изменить URL-адрес репозитория, открыв файл module.json . URL-адрес репозитория находится в свойстве репозитория JSON-файла.

Теперь у вас есть проект IoT Edge и модуль IoT Edge в решении Visual Studio.

Структура проекта

В решении есть две папки уровня проекта, включая основную папку проекта и одну папку модуля. Например, у вас может быть основная папка проекта с именем AzureIotEdgeApp1 и папка модуля с именем IotEdgeModule1. Основная папка проекта содержит манифест развертывания.

Папка проекта модуля содержит файл для кода модуля с именем Program.cs или main.c в зависимости от выбранного языка. В этой папке также содержится файл с именем module.json, описывающий метаданные модуля. Различные файлы Docker, включенные здесь, предоставляют сведения, необходимые для сборки модуля в виде контейнера Windows или Linux.

Манифест развертывания проекта

Измененный манифест развертывания называется deployment.debug.template.json. Этот файл представляет собой шаблон манифеста развертывания IoT Edge, который определяет все модули, которые выполняются на устройстве вместе с тем, как они взаимодействуют друг с другом. Дополнительные сведения о манифестах развертывания см. в статье Сведения о развертывании модулей и настройке маршрутов.

Если открыть этот шаблон развертывания, отобразятся два модуля среды выполнения, edgeAgent и edgeHub, а также настраиваемый модуль, созданный в этом проекте Visual Studio. Также в нем имеется четвертый модуль — SimulatedTemperatureSensor. Этот модуль по умолчанию генерирует смоделированные данные, которые можно использовать для тестирования модулей. Если он не требуется, его можно удалить. Чтобы увидеть, как работает смоделированный датчик температуры, просмотрите исходный код SimulatedTemperatureSensor.csproj.

Задание версии среды выполнения IoT Edge

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

  1. В Обозреватель решений щелкните правой кнопкой мыши имя основного проекта и выберите "Задать версию среды выполнения IoT Edge".

    Screenshot of how to find and select the menu item named 'Set IoT Edge Runtime version'.

  2. Используйте раскрывающееся меню, чтобы выбрать версию среды выполнения, под управлением которой работают ваши устройства IoT Edge, а затем нажмите кнопку OK, чтобы сохранить изменения. Если изменения не были сделаны, нажмите кнопку "Отмена ", чтобы выйти.

    В настоящее время расширение не включает выбор последних версий среды выполнения. Если вы хотите задать версию среды выполнения выше 1.2, откройте файл манифеста развертывания deployment.debug.template.json . Измените версию среды выполнения для образов модулей среды выполнения системы edgeAgent и edgeHub. Например, если вы хотите использовать среду выполнения IoT Edge версии 1.4, измените следующие строки в файле манифеста развертывания:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. Если вы изменили версию, повторно создайте манифест развертывания, щелкнув правой кнопкой мыши имя проекта и выбрав "Создать развертывание для IoT Edge". Это создает манифест развертывания на основе шаблона развертывания и отображается в папке конфигурации проекта Visual Studio.

  1. Откройте файл манифеста развертывания deployment.debug.template.json . Манифест развертывания — это документ JSON, описывающий модули для настройки на целевом устройстве IoT Edge.

  2. Измените версию среды выполнения для образов модулей среды выполнения системы edgeAgent и edgeHub. Например, если вы хотите использовать среду выполнения IoT Edge версии 1.4, измените следующие строки в файле манифеста развертывания:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

Параметры инфраструктуры модулей и разработки

При добавлении нового модуля он поставляется с кодом по умолчанию, готовым к сборке и развертыванию на устройстве, чтобы можно было начать тестирование, не затрагивая код. Код модуля находится в папке module в файле Program.cs (для C#) или main.c (для C).

Решение по умолчанию создается таким образом, что смоделированные данные из модуля SimulatedTemperatureSensor направляются в ваш модуль, который принимает ввод и отправляет его в центр Интернета вещей.

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

Отладка с помощью симулятора

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

Подробнее см. в статье Средство разработки Azure IoT EdgeHub.

Чтобы инициализировать средство в Visual Studio, выполните следующие действия.

  1. Получите строка подключения устройства IoT Edge (найденного в Центр Интернета вещей) из портал Azure или из Azure CLI.

    При использовании интерфейса командной строки для получения строка подключения используйте эту команду, заменив "[device_id]" и "[hub_name]" собственными значениями:

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. В меню "Сервис" в Visual Studio выберите Azure IoT Edge Tools>Setup IoT Edge Simulator.

  3. Вставьте строка подключения и нажмите кнопку "ОК".

Примечание.

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

Создание и отладка одного модуля

Как правило, необходимо протестировать и отладить каждый модуль перед запуском в целом решении с несколькими модулями. Средство симулятора IoT Edge позволяет запускать один модуль в изоляции отправки сообщений через порт 53000.

  1. В Обозреватель решений выберите и выделите папку проекта модуля (например, IotEdgeModule1). Задайте пользовательский модуль в качестве запускаемого проекта. Выберите "Набор проектов" в качестве начального проекта> в меню.

  2. Нажмите клавишу F5 или нажмите кнопку запуска панели инструментов, чтобы запустить симулятор IoT Edge для одного модуля. Изначально может потребоваться от 10 до 20 секунд.

    Screenshot of how to run a module.

  3. Появится окно консольного приложения .NET Core, если модуль успешно инициализирован.

  4. Задайте точку останова для проверки модуля.

    • При разработке в C#задайте точку останова PipeMessage() в функции в ModuleBackgroundService.cs.
    • Если для разработки используется C, задайте точку остановка в функции InputQueue1Callback() в файле main.c.
  5. Проверьте модуль, отправив сообщение. При отладке одного модуля симулятор прослушивает порт 53000 по умолчанию для сообщений. Чтобы отправить сообщение в модуль, выполните следующую команду curl из командной оболочки, например Git Bash или WSL Bash.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    Если вы получаете ошибку , не совпадающую с закрывающей скобкой или скобкой в URL-адресе, попробуйте выполнить следующую команду:

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    Screenshot of the output console, Visual Studio project, and Bash window.

    Точка останова должна быть активирована. Переменные можно просмотреть в окне "Локальные параметры Visual Studio " при запуске отладчика. Перейдите к разделу Отладка>локальных параметров Windows.>

    В оболочке или Bash появится {"message":"accepted"} подтверждение.

    В консоли .NET вы увидите следующее:

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    Совет

    Вместо curl для отправки сообщений можно использовать PostMan или другие средства API.

  6. Нажмите клавиши CTRL+F5 или выберите кнопку "Остановить", чтобы остановить отладку.

Создание и отладка нескольких модулей

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

  1. В Обозреватель решений добавьте второй модуль в решение, щелкнув правой кнопкой мыши папку основного проекта. В меню выберите Добавить>Новый модуль IoT Edge.

    Screenshot of how to add a 'New IoT Edge Module' from the menu.

  2. Add module В окне присвойте новому модулю имя и замените localhost:5000 часть URL-адреса репозитория вашим Реестр контейнеров Azure сервером входа, как и раньше.

  3. Откройте файл deployment.debug.template.json , чтобы увидеть, что новый модуль добавлен в раздел модулей . Новый маршрут также был добавлен в раздел маршрутов для EdgeHub отправки сообщений из нового модуля в Центр Интернета вещей. Чтобы отправить данные из имитированного датчика температуры в новый модуль, добавьте другой маршрут со следующей строкой JSON. Замените <NewModuleName> (в двух местах) собственным именем модуля.

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. Щелкните правой кнопкой мыши основной проект (например, AzureIotEdgeApp1) и выберите "Задать в качестве проекта запуска". Задав основной проект в качестве запускаемого проекта, все модули в запуске решения. Сюда входят оба модуля, добавленные в решение, модуль имитированного датчика температуры и имитированный концентратор Edge.

  5. Нажмите клавишу F5 или нажмите кнопку "Запустить панель инструментов", чтобы запустить решение. Изначально может потребоваться от 10 до 20 секунд. Убедитесь, что у вас нет других контейнеров Docker, которые могут привязать порт, необходимый для этого проекта.

  6. Для каждого модуля должно появиться два окна консольного приложения .NET Core.

  7. Установите точку останова для проверки модулей.

    • При разработке в C#задайте точку останова PipeMessage() в функции в ModuleBackgroundService.cs.
    • Если для разработки используется C, задайте точку остановка в функции InputQueue1Callback() в файле main.c.
  8. Создайте точки останова в каждом модуле, а затем нажмите клавишу F5 для одновременного запуска и отладки нескольких модулей. Вы увидите несколько окон консольного приложения .NET Core с каждым окном, представляющим другой модуль.

    Screenshot of Visual Studio with two output consoles.

  9. Нажмите клавиши CTRL+F5 или выберите кнопку "Остановить", чтобы остановить отладку.

Создание и отправка образов в реестр

После разработки и отладки модуля можно создать и отправить образ модуля в Реестр контейнеров Azure. Затем модуль можно развернуть на устройстве IoT Edge.

  1. Задайте основной проект IoT Edge в качестве начального проекта, а не одного из отдельных модулей.

  2. Выберите конфигурацию Отладка или Выпуск, которая будет применяться для образов модуля.

    Примечание.

    В случае выбора конфигурации Отладка Visual Studio будет использовать Dockerfile.(amd64|windows-amd64).debug для сборки образов Docker. Это включает отладчик командной строки .Net Core VSDBG в образе контейнера при его создании. Для модулей IoT Edge, готовых для рабочей среды, мы советуем выбрать конфигурацию Выпуск, которая использует Dockerfile.(amd64|windows-amd64) без VSDBG.

  3. Если вы используете частный реестр, например Реестр контейнеров Azure (ACR), используйте следующую команду Docker, чтобы войти в него. Получить имя пользователя и пароль можно на странице Ключи доступа реестра на портале Microsoft Azure.

    docker login <ACR login server>
    
  4. Давайте добавим сведения о входе Реестр контейнеров Azure в параметры среды выполнения, найденные в файлеdeployment.debug.template.json. Это можно сделать двумя способами. Вы можете добавить учетные данные реестра в .env файл (наиболее безопасный) или добавить их непосредственно в deployment.debug.template.json файл.

    Добавьте учетные данные в .env файл:

    В Обозреватель решений нажмите кнопку "Показать все файлы". Появится .env файл. Добавьте в файл Реестр контейнеров Azure имя пользователя и пароль.env. Эти учетные данные можно найти на странице ключей доступа Реестр контейнеров Azure в портал Azure.

    Screenshot of button that shows all files in the Solution Explorer.

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    Добавление учетных данных непосредственно в deployment.debug.template.json

    Если вы хотите добавить учетные данные непосредственно в шаблон развертывания, замените заполнители именем администратора ACR, паролем и именем реестра.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Примечание.

    При работе с этой статьей используются учетные данные администратора для Реестра контейнеров Azure, что удобно для сценариев разработки и тестирования. Но после перехода в рабочую среду рекомендуется использовать для проверки подлинности вариант с минимальными правами, например субъект-службу. Дополнительные сведения см. в разделе Управление доступом к реестру контейнеров.

  5. Если вы используете локальный реестр, можно запустить локальный реестр.

  6. Наконец, в Обозреватель решений щелкните правой кнопкой мыши главную папку проекта и выберите "Сборка и отправка модулей IoT Edge", чтобы создать и отправить образ Docker для каждого модуля. Это может занять минуту. Когда вы увидите Finished Build and Push IoT Edge Modules. в консоли вывода Visual Studio, все готово.

Развертывание решения

Теперь, когда вы создали и направили образы модулей в Реестр контейнеров Azure, вы можете развернуть решение на устройстве IoT Edge. У вас уже есть шаблон манифеста развертывания, который вы наблюдали в этом руководстве. Давайте создадим манифест развертывания из этого, а затем используйте команду Azure CLI для развертывания модулей на устройстве IoT Edge в Azure.

  1. Щелкните правой кнопкой мыши основной проект в Visual Studio Обозреватель решений и выберите "Создать развертывание для IoT Edge".

    Screenshot of location of the 'generate deployment' menu item.

  2. Перейдите в локальную папку основного проекта Visual Studio и просмотрите config ее. Путь к файлу может выглядеть следующим образом: C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config Здесь вы найдете созданный манифест развертывания, например deployment.amd64.debug.json.

  3. deployment.amd64.debug.json Проверьте файл, чтобы убедиться, edgeHub что версия схемы имеет значение 1.2.

     "$edgeHub": {
         "properties.desired": {
           "schemaVersion": "1.2",
           "routes": {
             "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream",
             "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")",
             "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream"
           },
           "storeAndForwardConfiguration": {
             "timeToLiveSecs": 7200
           }
         }
       }
    

    Совет

    Шаблон развертывания для Visual Studio 2022 требует версии схемы 1.2. Если требуется, чтобы оно было равно 1.1 или 1.0, дождитесь, пока развертывание не будет создано (не изменяйте его).deployment.debug.template.json Создание развертывания по умолчанию создаст схему 1.2. Однако вы можете вручную изменить deployment.amd64.debug.jsonсозданный манифест перед развертыванием в Azure.

    Важно!

    После развертывания устройства IoT Edge он в настоящее время не будет отображаться правильно в портал Azure с схемой 1.2 (версия 1.1 будет нормальной). Это известная ошибка и будет исправлена в ближайшее время. Однако это не повлияет на устройство, так как оно по-прежнему подключено в Центр Интернета вещей и может взаимодействовать с ним в любое время с помощью Azure CLI.

    Screenshot of Azure portal error on the IoT Edge device page.

  4. Теперь давайте развернем наш манифест с помощью команды Azure CLI. Откройте командную строку разработчика Visual Studio и перейдите в каталог конфигурации.

        cd config
    
  5. Разверните манифест для устройства IoT Edge, чтобы Центр Интернета вещей. Команда настраивает устройство для использования модулей, разработанных в решении. Манифест развертывания был создан на предыдущем шаге и сохранен в папке конфигурации . В папке конфигурации выполните следующую команду развертывания. Замените [device id]значения , [hub name]а также [file path] значениями. Если идентификатор устройства IoT Edge не существует в Центр Интернета вещей, его необходимо создать.

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    Например, команда может выглядеть следующим образом:

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. После выполнения команды вы увидите подтверждение развертывания, напечатанного в JSON командной строке.

Образ Docker модуля сборки

После разработки модуля можно создать образ модуля для хранения в реестре контейнеров для развертывания на устройстве IoT Edge.

Используйте Dockerfile модуля для создания образа Docker модуля.

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

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

# Build the image for the local registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

# Or build the image for an Azure Container Registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

Образ Docker модуля push

Отправьте образ модуля в локальный реестр или реестр контейнеров.

docker push <ImageName>

Например:

# Push the Docker image to the local registry

docker push localhost:5000/iotedgemodule1:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64

Разверните модуль на устройстве IoT Edge.

В Visual Studio откройте файл манифеста развертывания deployment.debug.template.json в основном проекте. Манифест развертывания — это документ JSON, описывающий модули для настройки на целевом устройстве IoT Edge. Перед развертыванием необходимо обновить учетные данные Реестр контейнеров Azure, образы модулей и соответствующие createOptions значения. Дополнительные сведения о значениях createOption см. в разделе "Настройка параметров создания контейнера для модулей IoT Edge".

  1. Если вы используете Реестр контейнеров Azure для хранения образа модуля, необходимо добавить учетные данные в deployment.debug.template.json в параметры edgeAgent. Например,

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_acr_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    //...
    
  2. Замените значение свойства изображения именем образа модуля, отправленного в реестр. Например, если вы принудили изображение, помеченное myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 для пользовательского модуля IotEdgeModule1, замените значение свойства изображения значением тега.

  3. Добавьте или замените значение createOptions строковым содержимым для каждого системного и пользовательского модуля в шаблоне развертывания.

    Например, образ IotEdgeModule1 и параметры createOptions будут похожи на следующие:

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    

Используйте команду набора модулей Azure CLI IoT Edge для развертывания модулей в Центр Интернета вещей Azure. Например, чтобы развернуть модули, определенные в файле deployment.debug.amd64.json, в Центр Интернета вещей my-iot-hub для устройства IoT Edge используйте следующую команду:

az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Совет

Вы можете найти Центр Интернета вещей строка подключения в портал Azure в разделе политики общего доступа параметров>безопасности Центр Интернета вещей Azure. >

Подтверждение развертывания на устройстве

Чтобы проверка, что модули IoT Edge были развернуты в Azure, войдите на устройство (или виртуальную машину), например через SSH или Бастион Azure и выполните команду списка IoT Edge.

   iotedge list

Вы увидите список модулей, работающих на устройстве или виртуальной машине.

   NAME                        STATUS           DESCRIPTION      CONFIG
   SimulatedTemperatureSensor  running          Up a minute      mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
   edgeAgent                   running          Up a minute      mcr.microsoft.com/azureiotedge-agent:1.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   IotEdgeModule1              running          Up a minute      myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
   myIotEdgeModule2            running          Up a minute      myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug

Отладка с помощью Удаленного SSH Docker

Подсистемы Docker и Moby поддерживают подключения SSH к контейнерам, что позволяет подключать и отлаживать код на удаленном устройстве с помощью Visual Studio.

  1. Подключение удаленное подключение к Docker требует привилегий корневого уровня. Выполните действия, описанные в разделе "Управление docker в качестве пользователя, не являющегося корневым пользователем ", чтобы разрешить подключение к управляющей программе Docker на удаленном устройстве. После завершения отладки может потребоваться удалить пользователя из группы Docker.

  2. Выполните действия, чтобы использовать Visual Studio для подключения к процессу, запущенного в контейнере Docker на удаленном устройстве.

  3. В Visual Studio установите точки останова в пользовательском модуле.

  4. При попадании в точку останова можно проверить переменные, выполнить пошаговое выполнение кода и выполнить отладку модуля.

    Screenshot of Visual Studio attached to remote docker container on a device paused on a breakpoint.

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