Sdílet prostřednictvím


Ladění modulů Azure IoT Edge pomocí Visual Studio Code

Použitelné pro:IoT Edge 1.5 zaškrtnuto IoT Edge 1.5

Důležité

IoT Edge 1.5 LTS je podporovaná verze. IoT Edge 1,4 LTS dosáhl konce životnosti 12. listopadu 2024. Pokud používáte starší verzi, přečtěte si téma Update IoT Edge.

Tento článek vysvětluje, jak pomocí Visual Studio Code ladit moduly IoT Edge ve více jazycích. Na vývojovém počítači použijte Visual Studio Code k připojení a ladění modulu v místním nebo vzdáleném kontejneru modulu.

Tento článek obsahuje kroky pro dva IoT Edge vývojové nástroje.

  • Azure IoT Edge Nástroj pro vývoj nástroj příkazového řádku (CLI). Tento nástroj je upřednostňovaný pro vývoj.
  • nástroje Azure IoT Edge pro rozšíření Visual Studio Code Rozšíření je v režimu údržby.

Vyberte verzi nástroje pomocí tlačítka pro selektor nástrojů na začátku tohoto článku.

Visual Studio Code podporuje psaní modulů IoT Edge v následujících programovacích jazycích:

  • Azure Functions C# a C#
  • C
  • Python
  • Node.js
  • Java

Azure IoT Edge funguje s těmito architekturami zařízení:

  • AMD64
  • ARM32v7
  • ARM64

Další informace o podporovaných operačních systémech, jazycích a architekturách najdete v tématu Podpora jazyka a architektury.

Při použití rozšíření Visual Studio Code IoT Edge můžete také spustit a ladit kód modulu v simulátoru IoT Edge.

Můžete také použít počítač pro vývoj na Windows a ladit moduly v kontejneru Linuxu pomocí IoT Edge pro Linux na Windows (EFLOW). Další informace o používání EFLOW pro vývoj modulů najdete v tématu Tutorial: Vývoj modulů IoT Edge s linuxovými kontejnery pomocí IoT Edge pro Linux v Windows.

Pokud jste noví v ladících schopnostech ve Visual Studio Code, podívejte se na ladění ve Visual Studio Code.

Požadavky

Jako vývojový počítač můžete použít počítač nebo virtuální počítač se systémem Windows, macOS nebo Linux. Na Windows počítačích můžete vyvíjet moduly Windows nebo Linux. Pokud chcete vyvíjet linuxové moduly, použijte počítač Windows, který splňuje požadavky poručky pro Docker Desktop.

Pokud chcete nainstalovat požadované nástroje pro vývoj a ladění, dokončete moduly Develop Azure IoT Edge pomocí kurzu Visual Studio Code.

Nainstalujte Visual Studio Code.

Přidejte tato rozšíření:

Abyste mohli ladit svůj modul na zařízení, budete potřebovat:

Ladění bez kontejneru pomocí simulátoru IoT Edge

Simulátor IoT Edge je nástroj, který běží na vývojovém počítači a simuluje chování jednoho IoT Edge zařízení. Pomocí simulátoru IoT Edge můžete vyvíjet a testovat moduly IoT Edge bez fyzického zařízení nebo plného běhového prostředí IoT Edge zařízení.

Následující kroky ladění předpokládají, že jste už vytvořili vlastní modul. Pokud jste nevytvořili vlastní modul, postupujte podle kroků v kurzu Develop Azure IoT Edge pomocí kurzu Visual Studio Code.

Ladění modulu bez kontejneru není dostupné při použití C nebo Python.

Ladění v režimu připojení pomocí simulátoru IoT Edge

Ladění v režimu připojení není dostupné pro C nebo Python.

Ladění modulu pomocí modulu IoT Edge runtime

Každá složka modulu obsahuje několik souborů Dockeru pro různé typy kontejnerů. K sestavení modulu pro testování použijte libovolný soubor končící příponou .debug .

Při ladění modulů pomocí této metody běží vaše moduly na runtime IoT Edge. Zařízení IoT Edge a Visual Studio Code můžou běžet na stejném počítači, ale obvykle Visual Studio Code běží na vývojovém stroji, zatímco běhové prostředí IoT Edge a jeho moduly běží na jiném fyzickém počítači. Ladění z Visual Studio Code:

  • Nastavte IoT Edge zařízení, sestavte moduly IoT Edge pomocí souboru .debug Dockerfile a pak je nasaďte do IoT Edge zařízení.
  • Aktualizujte launch.json, aby se Visual Studio Code mohlo připojit k procesu v kontejneru na vzdáleném počítači. Tento soubor najdete ve .vscode složce v pracovním prostoru a aktualizuje se pokaždé, když přidáte nový modul, který podporuje ladění.
  • Pomocí vzdáleného ladění SSH se připojte ke kontejneru na vzdáleném počítači.

Sestavení a nasazení modulu do zařízení IoT Edge

V Visual Studio Code otevřete soubor manifestu nasazení deployment.debug.template.json. Manifest deployment popisuje moduly, které se mají nakonfigurovat na cílovém zařízení IoT Edge. Před nasazením aktualizujte přihlašovací údaje Azure Container Registry a snímky modulů správnými hodnotami createOptions. Další informace o hodnotách createOption najdete v tématu Jak konfigurovat možnosti vytvoření kontejneru pro moduly IoT Edge.

  1. Pokud k uložení image modulu používáte Azure Container Registry, přidejte přihlašovací údaje do edgeAgent>settings>registryCredentials v části deployment.debug.template.json. Nahraďte myacr vlastním názvem registru na obou místech a zadejte své heslo a adresu serveru pro přihlášení. Příklad:

    "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. Přidejte nebo nahraďte následující řetězecifikovaný obsah k hodnotě createOptions pro každý systém (edgeHub a edgeAgent) a vlastní modul (například filtermodule). V případě potřeby změňte hodnoty.

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

    Například konfigurace filtru by měla vypadat nějak takto:

    "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. Na paletě příkazů Visual Studio Code spusťte příkaz Azure IoT Edge: Build and Push IoT Edge solution.
  2. deployment.debug.template.json Vyberte soubor pro vaše řešení.
  3. V části Azure IoT Hub>Devices zobrazení průzkumníka Visual Studio Code klikněte pravým tlačítkem myši na název zařízení IoT Edge pro nasazení a potom zvolte Vytvoření nasazení pro jedno zařízení.

    Návod

    Pokud chcete ověřit, že zvolené zařízení je IoT Edge zařízení, vyberte ho a rozbalte seznam modulů a ověřte přítomnost $edgeHub a $edgeAgent. Každé IoT Edge zařízení zahrnuje tyto dva moduly.

  4. Přejděte do konfigurační složky vašeho řešení, vyberte ten deployment.debug.amd64.json soubor a pak vyberte Vyberte manifest nasazení Edge.

Spuštěním docker ps příkazu v terminálu zkontrolujte stav kontejneru ze zařízení nebo virtuálního počítače. Po spuštění příkazu by se měl zobrazit váš kontejner. Pokud Visual Studio Code a modul runtime IoT Edge běží na stejném počítači, zkontrolujte stav v zobrazení Visual Studio Code Dockeru.

Důležité

Pokud používáte privátní registr, jako je Azure Container Registry, pro vaše image, možná budete muset autentizovat, abyste mohli nahrávat image. K ověření použijte docker login <Azure Container Registry login server> nebo az acr login --name <Azure Container Registry name>.

Přihlášení k Dockeru

Zadejte přihlašovací údaje registru kontejneru do Dockeru, aby mohla odeslat image kontejneru do úložiště v registru.

  1. Přihlaste se k Dockeru pomocí přihlašovacích údajů Azure Container Registry, které jste uložili po vytvoření registru.

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

    Může se zobrazit upozornění zabezpečení, které doporučuje použití --password-stdin. I když se jedná o doporučený osvědčený postup pro produkční scénáře, je mimo rozsah tohoto kurzu. Další informace najdete v referenčních informacích k přihlášení dockeru .

  2. Přihlaste se k Azure Container Registry. Abyste mohli použít příkaz , budete možná muset az. Tento příkaz požádá o uživatelské jméno a heslo, které najdete v registru kontejneru vpřístupových klíčích>.

    az acr login -n <Azure Container Registry name>
    

Návod

Pokud se v tomto kurzu v libovolném okamžiku odhlásíte, opakujte kroky pro přihlášení do Docker a Azure Container Registry, abyste mohli pokračovat.

Image Dockeru pro sestavení modulu

Pomocí Dockerfile modulu sestavte Docker image.

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

Pokud chcete například vytvořit image pro místní registr nebo Azure Container Registry, použijte následující příkazy:

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

Odeslat obrázek Dockeru modulu

Vložte image modulu do místního registru nebo do registru kontejneru.

docker push <ImageName>

Příklad:

# 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

Nasazení modulu do zařízení IoT Edge

Pomocí příkazu IoT Edge Azure CLI set-modules nasaďte moduly do Azure IoT Hub. Pokud chcete například nasadit moduly definované v souboru deployment.debug.template.json na IoT Hub my-iot-hub pro IoT Edge zařízení my-device, použijte následující příkaz:

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

Návod

Sdílený přístupový klíč IoT Hub najdete na portálu Azure na portálu IoT Hub >Nastavení zabezpečení>Sdílené zásady přístupu>iothubowner.

Ladění modulu

Pokud chcete ladit moduly na vzdáleném zařízení, použijte vzdálené ladění SSH v Visual Studio Code.

Povolte ve Visual Studio Code vzdálené ladění instalací rozšíření Remote Development. Další informace o vzdáleném ladění Visual Studio Code naleznete v tématu Visual Studio Code Vzdálený vývoj.

Podrobnosti o používání vzdáleného ladění SSH v Visual Studio Code najdete v tématu Remote Development using SSH.

Vyberte v zobrazení ladění Visual Studio Code konfigurační soubor ladění pro modul. Ve výchozím nastavení soubor .debug Dockerfile, nastavení kontejneru createOptions modulu a launch.json soubor používají localhost.

Vyberte Spustit ladění nebo F5 a pak vyberte proces, ke který se chcete připojit. V zobrazení ladění v aplikaci Visual Studio Code vidíte proměnné na panelu vlevo.

Ladění pomocí vzdáleného SSH Dockeru

Moduly Docker a Moby podporují SSH připojení ke kontejnerům, což umožňuje ladit ve Visual Studio Code připojeném ke vzdálenému zařízení. Abyste mohli tuto funkci použít, musíte splnit následující požadavky.

Požadavky na vzdálené ladění SSH se můžou lišit v závislosti na používaném jazyce. Následující části popisují nastavení .NET. Informace o jiných jazycích najdete v tématu Vzdálený vývoj pomocí SSH , kde najdete přehled. Podrobnosti o tom, jak nakonfigurovat vzdálené ladění, najdete v částech ladění pro každý jazyk v dokumentaci Visual Studio Code.

Konfigurace tunelového propojení Docker SSH

  1. Pomocí kroků v tunelovém propojení Docker SSH nastavte tunelové propojení SSH na vývojovém počítači. Tunelování SSH vyžaduje ověřování páru veřejného a privátního klíče a kontext Dockeru definující koncový bod vzdáleného zařízení.

  2. Připojení k Dockeru vyžaduje kořenová oprávnění. Postupujte podle kroků v části Správa Dockeru jako uživatel bez root oprávnění, abyste mohli povolit připojení k démonu Dockeru na vzdáleném zařízení. Po dokončení ladění můžete chtít odebrat uživatele ze skupiny Dockeru.

  3. V aplikaci Visual Studio Code pomocí příkazové palety (Ctrl+Shift+P) spusťte příkaz Docker Context: Use a aktivujte kontext Docker, který ukazuje na vzdálený stroj. Tento příkaz umožňuje Visual Studio Code i Docker CLI pracovat s kontextem vzdáleného počítače.

    Návod

    Všechny příkazy Dockeru používají aktuální kontext. Při ladění nezapomeňte změnit kontext zpět na výchozí .

  4. Pokud chcete ověřit, že je vzdálený kontext Dockeru aktivní, vypíšete spuštěné kontejnery na vzdáleném zařízení:

    docker ps
    

    Výstup zobrazí seznam kontejnerů spuštěných na vzdáleném zařízení, podobně jako v následujícím příkladu:

    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. V adresáři .vscode otevřete launch.json v Visual Studio Code a přidejte novou konfiguraci. Vyberte Přidat konfiguraci a pak zvolte odpovídající šablonu vzdáleného připojení pro váš modul. Například následující konfigurace je určená pro .NET Core. Změňte hodnotu parametru -H v PipeArgs na název DNS nebo IP adresu vašeho zařízení.

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

Vzdálené ladění modulu

  1. V zobrazení ladění Visual Studio Code vyberte konfiguraci ladění Vzdálené ladění modulu IoT Edge (.NET Core).

  2. Vyberte Spustit ladění nebo vyberte F5. Vyberte proces, ke který se chcete připojit.

  3. V ladicím zobrazení aplikace Visual Studio Code se proměnné zobrazí v levém panelu.

  4. V Visual Studio Code nastavte zarážky ve vlastním modulu.

  5. Po dosažení zarážky můžete zkontrolovat proměnné, procházet kód a ladit modul.

    Screenshot nástroje Visual Studio Code připojeného ke kontejneru Dockeru na vzdáleném zařízení, které je pozastaveno na zarážce.

Poznámka:

Předchozí příklad ukazuje, jak ladit moduly IoT Edge ve vzdálených kontejnerech. Příklad přidá vzdálený kontext Dockeru a změní oprávnění Dockeru na vzdáleném zařízení. Po dokončení ladění modulů nastavte kontext Dockeru na výchozí a odeberte oprávnění z uživatelského účtu.

Příklad použití zařízení Raspberry Pi najdete v tomto blogovém příspěvku pro vývojáře IoT.

Další kroky

Po sestavení modulu se dozvíte, jak nasadit moduly Azure IoT Edge.

Pokud chcete vyvíjet moduly pro zařízení IoT Edge, přečtěte si informace o sadách SDK Azure IoT Hub.