Поделиться через


Руководство. Разработка модулей IoT Edge с помощью контейнеров Linux с помощью IoT Edge для Linux в Windows

Область применения: Флажок IoT Edge 1.4 IoT Edge 1.4

Внимание

Поддерживаются выпуски Azure IoT Edge 1.5 LTS и IoT Edge 1.4. IoT Edge 1.4 LTS достигает окончания службы 12 ноября 2024 года. При использовании более раннего выпуска см. раздел Обновление IoT Edge.

В этом руководстве описывается разработка, отладка и развертывание собственного кода на устройстве Azure IoT Edge с помощью IoT Edge для Linux в Windows и Visual Studio 2022. Вы узнаете наиболее распространенный сценарий разработчика для решений IoT Edge, развернув модуль C# на устройстве Linux. Вы развернете и отладите пользовательский модуль IoT Edge, работающий в контейнере Linux в Windows. Даже если вы планируете использовать другой язык или развернуть службу Azure, это руководство по-прежнему полезно для изучения средств разработки и концепций.

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

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

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

В этом руководстве описано следующее:

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

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

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

Подготовка к работе:

  • Установите IoT Edge для Linux в Windows.

  • Ознакомьтесь с кратким руководством по развертыванию первого модуля IoT Edge на устройстве с Windows.

  • Скачайте пакет SDK для .NET Core.

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

  • После завершения установки Visual Studio 2022 скачайте и установите средства Azure IoT Edge из Visual Studio Marketplace.

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

    Совет

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

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Основные понятия

В этом руководстве описывается разработка модуля IoT Edge. Модуль IoT Edge — это контейнер с исполняемым кодом. На устройстве IoT Edge можно развернуть один или несколько модулей. Модули выполняют определенные задачи, такие как прием данных с датчиков, выполнение анализа или очистки данных, или отправки сообщений в центр Интернета вещей. Дополнительные сведения см. в статье Understand Azure IoT Edge modules (Общие сведения о модулях Azure IoT Edge).

При разработке модулей IoT Edge важно понимать разницу между компьютером разработки и целевым устройством IoT Edge, где модуль в конечном итоге будет развернут. Контейнер, созданный для хранения кода модуля, должен соответствовать операционной системе (ОС) целевого устройства.

Например, наиболее распространенный сценарий — это кто-то, кто разрабатывает модуль на компьютере Windows, который намерен нацелиться на устройство Linux под управлением IoT Edge. В этом случае ос контейнера — Linux.

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

В этом руководстве предназначены устройства, работающие под управлением IoT Edge с контейнерами Linux. Вы можете использовать предпочитаемую операционную систему, пока компьютер разработки может запускать контейнеры Linux. Мы рекомендуем использовать Visual Studio для разработки с помощью контейнеров Linux, поэтому это то, что используется в этом руководстве. Вы также можете использовать Visual Studio Code, хотя между этими двумя инструментами существуют различия. Дополнительные сведения см. в статье "Разработка модулей Azure IoT Edge с помощью Visual Studio Code".

Настройка интерфейса командной строки Docker и подсистемы Docker для удаленного подключения

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

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

Настройка интерфейса командной строки Docker

Первым шагом является настройка интерфейса командной строки Docker на компьютере разработки Windows для подключения к удаленному обработчику Docker:

  1. Скачайте предварительно скомпилированную docker.exe версию Интерфейса командной строки Docker из Chocolatey. Вы также можете скачать официальный проект cli из GitHub и скомпилировать его, следуя инструкциям репозитория.

  2. Извлечение docker.exe в каталог на компьютере разработки, C:\Docker\binнапример.

  3. Откройте дополнительные параметры системы для>пк.>

  4. Выберите переменные расширенной>среды. В разделе "Пользовательские переменные" выберите "Путь".

  5. Измените переменную Path и добавьте расположение docker.exe.

  6. Откройте сеанс PowerShell с повышенными привилегиями.

  7. Убедитесь, что интерфейс командной строки Docker доступен с помощью этой команды:

    docker --version
    

    Если вы успешно настроили все, выходные данные команды должны отображать версию Docker. Она должна выглядеть примерно так: Docker version 20.10.12, build e91ed57.

Настройка подсистемы Docker

Второй шаг — настроить модуль IoT Edge для Linux на виртуальной машине Windows Docker для принятия внешних подключений и добавить соответствующие правила брандмауэра.

Предупреждение

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

  1. Откройте сеанс PowerShell с повышенными привилегиями и выполните следующие команды:

    # Configure the IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules.
    Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    
    # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder.
    Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    
    # Replace the service execution line to listen for external connections.
    Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g'  /etc/systemd/system/docker.service"
    
    # Reload the IoT Edge for Linux on Windows VM services configurations.
    Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    
    # Reload the Docker engine service.
    Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    
    # Check that the Docker engine is listening to external connections.
    Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    

    Ниже приведен пример выходных данных:

    PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules.
    PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    PS C:\>
    PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder.
    PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Replace the service execution line to listen for external connections.
    PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    PS C:\>
    PS C:\> # Reload the Docker engine service.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    PS C:\>
    PS C:\> # Check that the Docker engine is listening to external connections.
    PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    tcp6       0      0 :::2375                 :::*                    LISTEN      2790/dockerd
    

Проверка подключения

Последний этап установки — проверить подключение Docker к IoT Edge для Linux в подсистеме Docker виртуальной машины Windows:

  1. Получите IP-адрес IoT Edge для Linux на виртуальной машине Windows:

    Get-EflowVmAddr
    

    Совет

    Если ioT Edge для Linux на виртуальной машине Windows был развернут без статического IP-адреса, IP-адрес может измениться через перезапуск ос узла Windows или изменения сети. Убедитесь, что вы используете правильный IP-адрес для IoT Edge для Linux на виртуальной машине Windows каждый раз, когда вы хотите установить удаленное подключение к подсистеме Docker.

    Ниже приведен пример выходных данных:

    PS C:\> Get-EflowVmAddr
    [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW)
     - Virtual machine MAC: 00:15:5d:6f:da:78
     - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine
    00:15:5d:6f:da:78
    172.31.24.105 
    
  2. Подключитесь к IoT Edge для Linux в подсистеме Docker виртуальной машины Windows и запустите hello-world пример контейнера. Замените <EFLOW-VM-IP> IoT Edge для Linux на IP-адрес виртуальной машины Windows, полученный на предыдущем шаге.

    docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
    

    Когда загрузка контейнера завершится, контейнер запускается и создает следующие выходные данные:

    PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete
    Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you're currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

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

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

Внимание

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

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

  1. В Visual Studio создайте проект, нажав кнопку "Создать проект" на начальной странице или нажав кнопку "Создать проект" на панели инструментов.

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

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

  4. В диалоговом окне "Добавление модуля" выберите тип модуля, который требуется разработать. Также можно выбрать Существующий модуль, чтобы добавить в разработку существующий модуль IoT Edge.

  5. В имени модуля укажите имя модуля.

  6. В URL-адресе репозитория укажите имя репозитория образов модуля. Visual Studio автоматически заполняет имя модуля именем localhost:5000/<имя модуля>. Замените его собственными данными реестра.

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

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

    Снимок экрана: выбор для добавления приложения и модуля в решение Visual Studio.

    Примечание.

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

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

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

Решение содержит две папки уровня проекта: основную папку проекта и папку модуля. Например, у вас может быть основная папка проекта с именем AzureIotEdgeApp1 и папкой IotEdgeModule1модуля.

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

Папка модуля содержит файл для кода модуля. Он называется либо 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".

    Снимок экрана: выбор версии среды выполнения IoT Edge.

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

    В настоящее время расширение не включает выбор последних версий среды выполнения. Если вы хотите задать версию среды выполнения выше 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". На этом шаге создается манифест развертывания на основе шаблона развертывания. Манифест отображается в папке config проекта Visual Studio.

  1. Откройте файл манифеста deployment.debug.template.json развертывания.

  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",
        //...
    

Настройка удаленного экземпляра ядра Docker Visual Studio 2022

Настройте расширение средств Azure IoT Edge для использования удаленного ядра Docker, работающего внутри IoT Edge для Linux на виртуальной машине Windows:

  1. >Выберите параметры инструментов Azure IoT Edge для инструментов>IoT Edge.

  2. Замените значение DOCKER_HOST localhost IP-адресом для IoT Edge для Linux на виртуальной машине Windows. Если ВЫ не помните IP-адрес, используйте командлет Get-EflowVmAddr IoT Edge для Linux в Windows PowerShell, чтобы получить его. Например, если IP-адрес виртуальной машины Windows для IoT Edge для Linux равен 172.20.1.100, новое значение должно быть tcp://172.20.1.100:2375.

    Снимок экрана: параметры инструментов IoT Edge

  3. Нажмите ОК.

Разработка модуля

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

В решении по умолчанию имитация данных из SimulatedTemperatureSensor модуля направляется в модуль. Модуль принимает входные данные, а затем отправляет его в Центр Интернета вещей Azure.

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

Сборка и отправка одного модуля

Как правило, необходимо протестировать и отладить каждый модуль перед запуском в целом решении с несколькими модулями. Так как решение будет создавать или отлаживаться с помощью подсистемы Docker, работающей внутри IoT Edge для Linux на виртуальной машине Windows, первый шаг — создание и публикация модуля для включения удаленной отладки:

  1. В Обозреватель решений выберите папку проекта модуля (например, myIotEdgeModule).

  2. Задайте пользовательский модуль в качестве запускаемого проекта. В меню выберите "Набор проектов>" в качестве начального проекта.

  3. Для отладки модуля Linux C# необходимо обновить Dockerfile.amd64.debug файл, чтобы включить службу SSH. Dockerfile.amd64.debug Обновите файл, чтобы использовать следующий шаблон: Dockerfile для модуля AZURE IoT Edge AMD64 C# с поддержкой удаленной отладки.

    Примечание.

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

    Убедитесь, что в последней строке шаблона ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]имя библиотеки DLL соответствует имени проекта модуля IoT Edge.

  4. Чтобы установить подключение SSH к модулю Linux, необходимо создать ключ RSA. Откройте сеанс PowerShell с повышенными привилегиями и выполните следующие команды, чтобы создать новый ключ RSA. Сохраните ключ RSA в той же папке модуля IoT Edge и убедитесь, что имя ключа равно id_rsa.

    ssh-keygen -t RSA -b 4096 -m PEM
    

    Снимок экрана: команда PowerShell для создания ключа SSH.

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

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
    
  1. В Обозреватель решений щелкните правой кнопкой мыши папку проекта и выберите "Сборка и отправка модулей IoT Edge". Эта команда создает и отправляет образ Docker для каждого модуля.

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

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

    Примечание.

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

  3. Для доступа к службе SSH модуля необходимо предоставить порт 22. В этом руководстве в качестве порта узла используется 10022, но можно указать другой порт. Указанный порт будет использоваться в качестве порта SSH для подключения к модулю Linux C#. Необходимо добавить сведения о createOptions порту SSH в этот параметр модуля Linux в файле deployment.debug.template.json:

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. В Обозреватель решений щелкните правой кнопкой мыши папку проекта и выберите команду "Создать развертывание для IoT Edge", чтобы создать новый JSON развертывания IoT Edge.

  5. Выберите Представление>Cloud Explorer. Убедитесь, что вы вошли в Visual Studio 2019.

  6. В Cloud Explorer разверните подписку, а затем найдите Центр Интернета вещей Azure и устройство Azure IoT Edge, которое требуется развернуть.

  7. Щелкните правой кнопкой мыши устройство IoT Edge и выберите "Создать развертывание". Перейдите в манифест развертывания отладки, настроенный для вашей платформы. Он находится в папке config в решении Visual Studio, например deployment.amd64.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 модуля

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

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 развертывания в основном проекте.

Перед развертыванием необходимо обновить учетные данные Реестр контейнеров 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. Замените image значение свойства именем образа модуля, которое было отправлено в реестр. Например, если вы принудили изображение, помеченное myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 для пользовательского модуля IotEdgeModule1, замените значение свойства изображения значением тега.

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

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

    "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\"}]}}}"
    }
    
  4. Используйте команду набора модулей Azure CLI IoT Edge для развертывания модулей в Центре Интернета вещей Azure. Например, чтобы развернуть модули, определенные в файле, в Центре my-iot-hub Интернета вещей deployment.debug.amd64.json для устройства my-deviceIoT 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> Security.

  5. В Cloud Explorer щелкните правой кнопкой мыши пограничное устройство и обновите его, чтобы убедиться, что новый модуль запущен вместе с $edgeAgent модулями и $edgeHub модулями.

Отладка решения

  1. В сеансе PowerShell с повышенными привилегиями выполните следующие команды:

    1. moduleId Получите значение на основе имени модуля Linux C#. Замените <iot-edge-module-name> заполнитель именем модуля.

      $moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
      
    2. Проверьте правильность $moduleId . Если переменная пуста, убедитесь, что вы используете правильное имя модуля.

    3. Запустите службу SSH в контейнере Linux:

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Откройте порт SSH модуля в IoT Edge для Linux на виртуальной машине Windows. (В этом руководстве используется порт 10022.)

      Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
      

    Предупреждение

    По соображениям безопасности при каждом перезапуске виртуальной машины Windows IoT Edge для Linux правило таблицы IP-адресов удаляется и возвращается к исходным параметрам. Кроме того, необходимо снова запустить службу SSH модуля вручную.

  2. После успешного запуска службы SSH выберите "Отладить>подключение к процессу", задайте тип подключения на SSH и задайте целевой объект подключения IP-адресу IoT Edge для Linux на виртуальной машине Windows. Если вы не знаете IP-адрес IoT Edge для Linux на виртуальной машине Windows, можно использовать Get-EflowVmAddr командлет PowerShell.

    Введите IP-адрес и выберите клавишу ВВОД. Во всплывающем окне введите следующие конфигурации:

    Поле значение
    Hostname IP-адрес для IoT Edge для Linux на виртуальной машине Windows
    порт. 10022 (или тот, который использовался в конфигурации развертывания)
    Username root
    Тип проверки подлинности Закрытый ключ.
    Файл закрытого ключа Полный путь к значению id_rsa , созданному на предыдущем шаге
    Парольная фраза Парольная фраза, используемая для ключа, созданного на предыдущем шаге
  3. После успешного подключения к модулю с помощью SSH можно выбрать процесс и выбрать "Присоединить". Для модуля C# необходимо выбрать метод dotnet и подключиться к управляемому (CoreCLR) процессу. В первый раз может потребоваться от 10 до 20 секунд.

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

    • Если вы разрабатываетесь в C#, установите точку PipeMessage() останова в функции ModuleBackgroundService.cs.
    • Если вы используете C, установите точку останова InputQueue1Callback() в функции main.cв .
  5. Выходные данные SimulatedTemperatureSensor должны быть перенаправлены в input1 пользовательский модуль C# Linux. Точка останова должна быть активирована. Вы можете просмотреть переменные в окне Локальные элементы Visual Studio.

    Снимок экрана: отладка одного модуля.

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

Очистка ресурсов

Если вы планируете перейти к следующей рекомендуемой статье, можно сохранить созданные и повторно используемые ресурсы и конфигурации. Это же устройство IoT Edge также можно использовать в качестве тестового устройства.

В противном случае удалите локальные конфигурации и ресурсы Azure, используемые в этой статье, чтобы избежать расходов.

Удаление ресурсов Azure

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

Удаление ресурсов:

  1. Войдите на портал Azure и щелкните Группы ресурсов.

  2. Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.

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

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

В этом руководстве вы настроили Visual Studio на компьютере разработки и развернули и отладили первый модуль IoT Edge из него. Теперь, когда вы знаете основные понятия, попробуйте добавить функции в модуль, чтобы он смог проанализировать данные, проходящие через него: