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


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

Применимо к:IoT Edge 1.5 флажок IoT Edge 1.5

Внимание

IoT Edge 1.5 LTS — это поддерживаемый выпуск. IoT Edge 1.4 LTS достиг срока окончания службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update 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 Dev Tool (CLI), который является предпочтительным средством для разработки
  • Расширение Azure IoT Edge Tools для Visual Studio, которое находится в режиме обслуживания.

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

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

  • Настройка компьютера для разработки.
  • Используйте средства разработки IoT Edge для создания нового проекта.
  • Создайте проект как контейнер и сохраните его в Azure Container Registry.
  • Разверните код на устройстве 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 и Desktop для разработки с помощью C++.

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

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

    Совет

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

  • Создайте бесплатный или стандартный уровень IoT-хаб в Azure как облачный ресурс.

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

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

В этом руководстве рассматривается разработка модуля IoT Edge. Модуль IoT Edge — это контейнер с исполняемым кодом. Можно развернуть один или несколько модулей на устройстве IoT Edge. Модули выполняют определенные задачи, такие как прием данных с датчиков, выполнение анализа или очистки данных, или отправки сообщений в центр Интернета вещей. Для получения дополнительной информации см. Понимание модулей 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 Desktop для 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 для 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. Подключитесь к Docker движку IoT Edge для Linux в виртуальной машине Windows и выполните команду для запуска тестового контейнера hello-world. Замените <EFLOW-VM-IP> на IP-адрес виртуальной машины Windows IoT Edge для Linux, который вы получили на предыдущем шаге.

    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. Необходимо использовать расширение Azure IoT Edge Tools для создания проекта Visual Studio.

  1. В Visual Studio создайте проект, выбрав Create новый проект на начальной странице или нажав кнопку New Project на панели инструментов.

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

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

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

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

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

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

  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.5. Обновите версию среды выполнения IoT Edge до последней стабильной версии или версии, которую вы хотите использовать для ваших устройств:

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

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

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

    В настоящее время расширение не включает выбор последних версий среды выполнения. Если вы хотите задать версию среды выполнения выше 1.2, откройте файл манифеста deployment.debug.template.json развертывания. Измените версию среды выполнения для образов системного модуля среды выполнения 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",
       //...
    
  3. Если вы изменили версию, повторно создайте манифест развертывания, щелкнув правой кнопкой мыши имя проекта и выбрав Generate для IoT Edge. На этом шаге создается манифест развертывания на основе шаблона развертывания. Манифест отображается в папке config проекта Visual Studio.

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

  2. Измените версию среды выполнения для образов системного модуля среды выполнения 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",
        //...
    

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

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

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

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

    Скриншот настроек IoT Edge Tools

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

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

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

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

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

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

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

  1. В Solution Explorer выберите папку проекта модуля (например, myIotEdgeModule).

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

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

    Примечание.

    При выборе Debug Visual Studio использует Dockerfile.(amd64|windows-amd64).debug для создания образов Docker. Этот файл включает отладчик командной строки .NET Core VSDBG в образ контейнера в процессе его создания. Для готовых к работе модулей IoT Edge рекомендуется использовать конфигурацию Release, которая использует 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 Container Registry, используйте следующую команду Docker, чтобы войти в нее. Вы можете получить имя пользователя и пароль на странице Ключи доступа вашего реестра на портале Azure. Если вы используете локальный реестр, можно запустить локальный реестр.

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

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

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

    Примечание.

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

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

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

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

  6. В Cloud Explorer разверните подписку, а затем найдите Azure IoT Hub и устройство 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 Container Registry, используйте следующие команды:

# 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 Container Registry, образы модулей и соответствующие значения createOptions. Дополнительные сведения о значениях createOption см. в разделе Как настроить параметры создания контейнеров для модулей IoT Edge.

  1. Если вы используете Azure Container Registry для хранения образа модуля, добавьте учетные данные для 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. Используйте команду IoT Edge Azure CLI set-modules для развертывания модулей в центре Azure IoT. Например, чтобы развернуть модули, определенные в файле deployment.debug.amd64.json в центре Интернета вещей my-iot-hub для устройства IoT Edge my-device, используйте следующую команду:

    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>"
    

    Совет

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

  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"
      

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

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

  2. После успешного запуска службы SSH выберите Debug>Attach to Process, и установите Connection Type в SSH, а также задайте Connection target как IP-адрес вашей IoT Edge для Linux на виртуальной машине Windows. Если вы не знаете IP-адрес вашего IoT Edge для Linux, работающего на виртуальной машине Windows, можно использовать командлет PowerShell Get-EflowVmAddr.

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

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

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

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

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

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

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

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

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

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

Отменить удаление Azure ресурсов и групп ресурсов невозможно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали IoT Hub внутри существующей группы ресурсов с ресурсами, которые нужно сохранить, удалите только сам IoT Hub ресурс, а не группу ресурсов.

Чтобы удалить ресурсы:

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

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

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