Отладка модулей Azure IoT Edge с помощью Visual Studio Code

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

Внимание

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

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

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

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

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

Visual Studio Code поддерживает написание модулей IoT Edge на следующих языках программирования:

  • Функции Azure C# и C#
  • C
  • Python
  • Node.js
  • Java

Azure IoT Edge поддерживает следующие архитектуры устройств:

  • AMD64
  • ARM32v7
  • ARM64

Дополнительные сведения о поддерживаемых операционных системах, языках и архитектурах см. в разделе Поддержка языков и архитектур.

При использовании расширения IoT Edge Visual Studio Code можно также запустить и отладить код модуля в симуляторе IoT Edge.

Вы также можете использовать компьютер разработки Windows и модули отладки в контейнере Linux с помощью IoT Edge для Linux в Windows (EFLOW). Дополнительные сведения об использовании EFLOW для разработки модулей см. в руководстве по разработке модулей IoT Edge с помощью контейнеров Linux с помощью IoT Edge для Linux в Windows.

Если вы не знакомы с возможностями отладки Visual Studio Code, ознакомьтесь с отладкой Visual Studio Code.

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

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

Чтобы установить необходимые средства для разработки и отладки, выполните инструкции по разработке модулей Azure IoT Edge с помощью руководства по Visual Studio Code .

Установка Visual Studio Code

Добавьте следующие расширения:

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

  • Активная Центр Интернета вещей с по крайней мере одним устройством IoT Edge.
  • Физическое устройство IoT Edge или виртуальное устройство. Чтобы создать виртуальное устройство в Azure, выполните действия, описанные в кратком руководстве по Linux.
  • Пользовательский модуль IoT Edge. Чтобы создать пользовательский модуль, выполните действия, описанные в руководстве по разработке модулей Azure IoT Edge с помощью Visual Studio Code .

Отладка без контейнера с помощью симулятора IoT Edge

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

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

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

Отладка в режиме подключения с помощью симулятора IoT Edge

Отладка в режиме подключения не поддерживается для C или Python.

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

В папке каждого модуля находится несколько файлов Docker для разных типов контейнеров. Вы можете использовать любой DEBUG-файл, чтобы создать модуль для тестирования.

При отладке модулей с помощью этого метода модули выполняются поверх среды выполнения IoT Edge. Устройство IoT Edge и ваш Visual Studio Code могут находиться на одном и том же компьютере или, как правило, на разных компьютерах (Visual Studio Code находится на компьютере разработчика, а среда выполнения IoT Edge и модули работают на другом физическом компьютере). Чтобы выполнить отладку из Visual Studio Code, необходимо:

  • Настройте устройство IoT Edge, создайте модули IoT Edge с помощью файла Dockerfile отладки и разверните его на устройстве IoT Edge.
  • Обновите, launch.json чтобы Visual Studio Code смог подключиться к процессу в контейнере на удаленном компьютере. Этот файл можно найти в папке .vscode в рабочей области и каждый раз, когда вы добавляете новый модуль, поддерживающий отладку.
  • Используйте удаленную отладку SSH для подключения к контейнеру на удаленном компьютере.

Создание и развертывание модуля на устройстве IoT Edge

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

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

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_azure_container_registry_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    ...
    
  2. Добавьте или замените следующее строковое содержимое в значение createOptions для каждой системы (edgeHub и edgeAgent) и пользовательского модуля (например, filtermodule). При необходимости измените значения.

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    

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

    "filtermodule": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    
  1. В палитре команд Visual Studio Code выполните команду Azure IoT Edge: создание и отправка решения IoT Edge.
  2. Выберите файл deployment.debug.template.json для вашего решения.
  3. В разделе Центр Интернета вещей Azure> Devices представления обозревателя Visual Studio Code щелкните правой кнопкой мыши имя устройства IoT Edge для развертывания и выберите команду "Создать развертывание для одного устройства".

    Совет

    Чтобы подтвердить, что выбранное устройство является устройством IoT Edge, выберите его, после чего развернется список модулей, где можно проверить наличие $edgeHub и $edgeAgent. Каждое устройство IoT Edge содержит эти два модуля.

  4. Перейдите к папке config решения, выберите файл deployment.debug.amd64.json, а затем щелкните Select Edge Deployment Manifest (Выбрать манифест развертывания Edge).

Вы можете проверить состояние контейнера с устройства или виртуальной машины, выполнив docker ps команду в терминале. Вы увидите контейнер, указанный после выполнения команды. Если ваш Visual Studio Code и среда выполнения IoT Edge работают на одном компьютере, вы также можете проверить состояние в представлении Docker Visual Studio Code.

Внимание

Если вы используете частный реестр, например Реестр контейнеров Azure для образов, может потребоваться пройти проверку подлинности для отправки образов. Использование docker login <Azure Container Registry login server> или az acr login --name <Azure Container Registry name> проверка подлинности.

Вход в Docker

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

  1. Войдите в Docker с помощью учетных данных Реестр контейнеров Azure, сохраненных после создания реестра.

    docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
    

    Возможно, появится предупреждение системы безопасности, в котором рекомендуется использовать --password-stdin. Хотя это рекомендуемая практика для рабочих сценариев, она выходит за рамки этого руководства. Дополнительные сведения см. в описании команды docker login в справочнике.

  2. Войдите в Реестр контейнеров Azure. Чтобы использовать az команду, может потребоваться установить Azure CLI. Эта команда запрашивает имя пользователя и пароль, найденные в реестре контейнеров в разделах> "Параметры доступа".

    az acr login -n <Azure Container Registry name>
    

Совет

Если вы вы выполнили вход в любой момент в этом руководстве, повторите docker и Реестр контейнеров Azure выполнить вход, чтобы продолжить.

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

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

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

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

# Build the image for the local registry

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

# Or build the image for an Azure Container Registry

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

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

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

docker push <ImageName>

Например:

# Push the Docker image to the local registry

docker push localhost:5000/filtermodule:0.0.1-amd64

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

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

Используйте команду набора модулей Azure CLI IoT Edge для развертывания модулей в Центр Интернета вещей Azure. Например, чтобы развернуть модули, определенные в файле deployment.debug.template.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 в >параметрах>безопасности Центр Интернета вещей политики>общего доступа iothubowner.

Отладка модуля

Для отладки модулей на удаленном устройстве можно использовать отладку удаленного SSH в Visual Studio Code.

Чтобы включить удаленную отладку Visual Studio Code, установите расширение удаленной разработки. Дополнительные сведения об удаленной отладке Visual Studio Code см. в статье "Удаленная разработка Visual Studio Code".

Дополнительные сведения об использовании удаленной отладки SSH в Visual Studio Code см. в статье "Удаленная разработка с помощью SSH"

В представлении отладки Visual Studio Code выберите файл конфигурации отладки для модуля. По умолчанию отладочный dockerfile, параметры контейнера createOptions модуля и launch.json файл используют localhost.

Выберите Начать отладку или нажмите клавишу F5. Выберите процесс для присоединения. В представлении отладки Visual Studio Code на левой панели отображаются переменные.

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

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

Предварительные требования для удаленной отладки SSH могут отличаться в зависимости от используемого языка. В следующих разделах описана настройка для .NET. Дополнительные сведения о других языках см. в статье "Удаленная разработка с помощью SSH " для обзора. Сведения о настройке удаленной отладки включены в разделы отладки для каждого языка в документации по Visual Studio Code.

Настройка туннелирования Docker SSH

  1. Выполните действия, описанные в туннеле Docker SSH, чтобы настроить туннелирование SSH на компьютере разработки. Для туннелирования SSH требуется проверка подлинности пары открытых и закрытых ключей и контекст Docker, определяющий конечную точку удаленного устройства.

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

  3. В Visual Studio Code используйте палитру команд (CTRL+SHIFT+P) для выдачи контекста Docker: используйте команду для активации контекста Docker, указывающего на удаленный компьютер. Эта команда приводит к тому, что Visual Studio Code и Docker CLI используют контекст удаленного компьютера.

    Совет

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

  4. Чтобы проверить, активен ли удаленный контекст Docker, перечислите запущенные контейнеры на удаленном устройстве:

    docker ps
    

    Выходные данные должны вывести список контейнеров, работающих на удаленном устройстве, аналогично:

    PS C:\> docker ps        
    CONTAINER ID   IMAGE                                                             COMMAND                   CREATED        STATUS         PORTS                                                                                                                                   NAMES
    a317b8058786   myacr.azurecr.io/filtermodule:0.0.1-amd64                         "dotnet filtermodule…"    24 hours ago   Up 6 minutes                                                                                                                                           filtermodule
    d4d949f8dfb9   mcr.microsoft.com/azureiotedge-hub:1.5                            "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes   0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5671->5671/tcp, :::5671->5671/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 1883/tcp   edgeHub
    1f0da9cfe8e8   mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0   "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes                                                                                                    
                                           tempSensor
    66078969d843   mcr.microsoft.com/azureiotedge-agent:1.5                          "/bin/sh -c 'exec /a…"    24 hours ago   Up 6 minutes                                                                                                    
                                           edgeAgent
    
  5. В каталоге VSCODE добавьте новую конфигурацию для launch.json , открыв файл в Visual Studio Code. Выберите " Добавить конфигурацию", а затем выберите соответствующий шаблон удаленного подключения для модуля. Например, следующая конфигурация для .NET Core. Измените значение параметра -H в PipeArgs на DNS-имя устройства или IP-адрес.

    "configurations": [
    {
      "name": "Remote Debug IoT Edge Module (.NET Core)",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:pickRemoteProcess}",
      "pipeTransport": {
        "pipeProgram": "docker",
        "pipeArgs": [
          "-H",
          "ssh://user@my-device-vm.eastus.cloudapp.azure.com:22",
          "exec",
          "-i",
          "filtermodule",
          "sh",
          "-c"
        ],
        "debuggerPath": "~/vsdbg/vsdbg",
        "pipeCwd": "${workspaceFolder}",
        "quoteArgs": true
      },
      "sourceFileMap": {
        "/app": "${workspaceFolder}/modules/filtermodule"
      },
      "justMyCode": true
    },
    

Удаленная отладка модуля

  1. В представлении отладки Visual Studio Code выберите модуль удаленной отладки Отладки IoT Edge (.NET Core).

  2. Выберите Начать отладку или нажмите клавишу F5. Выберите процесс для присоединения.

  3. В представлении отладки Visual Studio Code отображаются переменные на левой панели.

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

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

    Снимок экрана: Visual Studio Code, подключенный к контейнеру Docker на удаленном устройстве, приостановленном в точке останова.

Примечание.

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

См. эту запись блога разработчика Интернета вещей, например с помощью устройства Raspberry Pi.

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

После создания модуля вы узнаете, как развернуть модули Azure IoT Edge.

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