Megosztás a következőn keresztül:


Azure IoT Edge-modulok hibakeresése a Visual Studio Code használatával

A következőkre vonatkozik: IoT Edge 1.5 pipa IoT Edge 1.5 IoT Edge 1.4 pipa IoT Edge 1.4

Fontos

Az IoT Edge 1.5 LTS és az IoT Edge 1.4 LTS támogatott kiadások. Az IoT Edge 1.4 LTS 2024. november 12-én megszűnik. Ha egy korábbi kiadáson dolgozik, olvassa el az IoT Edge frissítése című témakört.

Ez a cikk bemutatja, hogyan használhatja a Visual Studio Code-ot az IoT Edge-modulok hibakeresésére több nyelven. A fejlesztői számítógépen a Visual Studio Code használatával csatolhatja és hibakereséssel végezheti el a modult egy helyi vagy távoli modultárolóban.

Ez a cikk két IoT Edge-fejlesztési eszköz lépéseit tartalmazza.

  • Azure IoT Edge Fejlesztői eszköz parancssori eszköz (CLI). Ezt az eszközt előnyben részesítik a fejlesztéshez.
  • Azure IoT Edge-eszközök Visual Studio Code-bővítményhez . A bővítmény karbantartási módban van.

Az eszközverzió kiválasztásához használja a cikk elején található eszközválasztó gombot.

A Visual Studio Code az alábbi programozási nyelveken támogatja az IoT Edge-modulok írását:

  • C# és C# Azure Functions
  • C
  • Python
  • Node.js
  • Java

Az Azure IoT Edge a következő eszközarchitektúrákat támogatja:

  • AMD64
  • ARM32v7
  • ARM64

A támogatott operációs rendszerekről, nyelvekről és architektúrákról további információt a Nyelv és az architektúra támogatása című témakörben talál.

A Visual Studio Code IoT Edge-bővítmény használatakor a modulkódot az IoT Edge-szimulátorban is elindíthatja és hibakereséssel végezheti el.

Windows rendszerű fejlesztőszámítógépet és hibakeresési modulokat is használhat Linux-tárolókban a Windowson futó IoT Edge (EFLOW) használatával. További információ az EFLOW modulfejlesztéshez való használatáról: Oktatóanyag: IoT Edge-modulok fejlesztése Linux-tárolókkal linuxos IoT Edge használatával Windows rendszeren.

Ha nem ismeri a Visual Studio Code hibakeresési képességeit, tekintse meg a Visual Studio Code hibakeresését.

Előfeltételek

Fejlesztési gépként használhat windowsos, macOS vagy Linux rendszerű számítógépet vagy virtuális gépet. Windows rendszerű számítógépeken Windows- vagy Linux-modulokat is fejleszthet. Linux-modulok fejlesztéséhez olyan Windows rendszerű számítógépet használjon, amely megfelel a Docker Desktop követelményeinek.

A fejlesztéshez és hibakereséshez szükséges eszközök telepítéséhez végezze el az Azure IoT Edge-modulok fejlesztését a Visual Studio Code oktatóanyagával.

A Visual Studio Code telepítése

Adja hozzá a következő bővítményeket:

A modul eszközön való hibakereséséhez a következőkre van szüksége:

  • Aktív IoT Hub legalább egy IoT Edge-eszközzel.
  • Fizikai IoT Edge-eszköz vagy virtuális eszköz. Ha virtuális eszközt szeretne létrehozni az Azure-ban, kövesse a Linuxhoz készült rövid útmutató lépéseit.
  • Egyéni IoT Edge-modul. Egyéni modul létrehozásához kövesse az Azure IoT Edge-modulok fejlesztésének lépéseit a Visual Studio Code oktatóanyagával.

Hibakeresés tároló nélkül IoT Edge-szimulátor használatával

Az IoT Edge-szimulátor egy olyan eszköz, amely a fejlesztői számítógépen fut, és egyetlen IoT Edge-eszköz viselkedését szimulálja. Az IoT Edge-szimulátor használatával fizikai eszköz vagy teljes IoT Edge-eszköz futtatókörnyezet nélkül fejlesztheti és tesztelheti az IoT Edge-modulokat.

Az alábbi hibakeresési lépések feltételezik, hogy már létrehozott egy egyéni modult. Ha még nem hozott létre egyéni modult, kövesse az Azure IoT Edge-modulok fejlesztése a Visual Studio Code-oktatóanyagban leírt lépéseket.

A modul tároló nélküli hibakeresése nem érhető el C vagy Python használatakor.

Hibakeresés csatolási módban az IoT Edge-szimulátor használatával

A csatolási módban történő hibakeresés nem támogatott C vagy Python esetén.

Modul hibakeresése az IoT Edge-futtatókörnyezettel

Minden modulmappában több Docker-fájl található a különböző tárolótípusokhoz. A .debug kiterjesztéssel végződő fájlok bármelyikével létrehozhatja a modult tesztelésre.

Ha ezzel a módszerrel hibakeresést hajt végre, a modulok az IoT Edge-futtatókörnyezeten futnak. Az IoT Edge-eszköz és a Visual Studio Code lehet ugyanazon a gépen, vagy jellemzően a Visual Studio Code a fejlesztő gépen van, és az IoT Edge-futtatókörnyezet és a modulok egy másik fizikai gépen futnak. A Visual Studio Code-ból való hibakereséshez a következőt kell tennie:

  • Állítsa be az IoT Edge-eszközt, hozza létre az IoT Edge-modulokat a .debug Dockerfile használatával, majd telepítse az IoT Edge-eszközön.
  • Frissítsen launch.json , hogy a Visual Studio Code csatolhassa a folyamatot egy tárolóban a távoli gépen. Ezt a fájlt a .vscode munkaterület mappájában találja, és minden alkalommal frissül, amikor új modult ad hozzá, amely támogatja a hibakeresést.
  • Távoli SSH-hibakereséssel csatolhatja a tárolót a távoli gépen.

Modul létrehozása és üzembe helyezése IoT Edge-eszközön

A Visual Studio Code-ban nyissa meg a deployment.debug.template.json üzembehelyezési jegyzékfájlt. Az üzembe helyezési jegyzék ismerteti a célzott IoT Edge-eszközön konfigurálni kívánt modulokat. Az üzembe helyezés előtt frissítenie kell az Azure Container Registry hitelesítő adatait és a modul lemezképeit a megfelelő createOptions értékekkel. A createOption-értékekkel kapcsolatos további információkért tekintse meg az IoT Edge-modulok tároló-létrehozási beállításainak konfigurálását ismertető témakört.

  1. Ha egy Azure Container Registryt használ a modul lemezképének tárolásához, adja hozzá a hitelesítő adatait az edgeAgent>beállítások>beállításjegyzékének Hitelesítő adatok szakaszához deployment.debug.template.json. Cserélje le a myacr-t a saját regisztrációs adatbázis nevére mindkét helyen, és adja meg a jelszavát és a bejelentkezési kiszolgáló címét. Példa:

    "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. Adja hozzá vagy cserélje le a következő sztringezett tartalmat a createOptions értékre a felsorolt rendszerek (edgeHub és edgeAgent) és egyéni modul (például filtermodule) esetében. Szükség esetén módosítsa az értékeket.

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

    A szűrőmodul konfigurációjának például a következőhöz hasonlónak kell lennie:

    "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. A Visual Studio Code parancskatalógusában futtassa az Azure IoT Edge: Build and Push IoT Edge-megoldást.
  2. Válassza ki a deployment.debug.template.json megoldáshoz tartozó fájlt.
  3. A Visual Studio Code Explorer nézet Azure IoT Hub-eszközök> szakaszában kattintson a jobb gombbal az üzembe helyezéshez szükséges IoT Edge-eszköz nevére, majd válassza az Üzembe helyezés létrehozása önálló eszközhöz lehetőséget.

    Tipp.

    Ha meg szeretné győződni arról, hogy a kiválasztott eszköz egy IoT Edge-eszköz, jelölje ki a modulok listájának kibontásához, és ellenőrizze a $edgeHub és a $edgeAgent jelenlétét. Minden IoT Edge-eszköz tartalmazza ezt a két modult.

  4. Lépjen a megoldás konfigurációs mappájába, válassza ki a deployment.debug.amd64.json fájlt, majd válassza az Edge üzembehelyezési jegyzék kiválasztása lehetőséget.

A tároló állapotát az eszközről vagy a virtuális gépről ellenőrizheti a docker ps parancs terminálban való futtatásával. A parancs futtatása után a tárolónak szerepelnie kell a listában. Ha a Visual Studio Code és az IoT Edge futtatókörnyezete ugyanazon a gépen fut, a Visual Studio Code Docker nézetben is ellenőrizheti az állapotot.

Fontos

Ha magánregisztrációs adatbázist használ, például az Azure Container Registryt a rendszerképekhez, előfordulhat, hogy hitelesítenie kell magát a rendszerképek leküldéséhez. Használja docker login <Azure Container Registry login server> vagy az acr login --name <Azure Container Registry name> hitelesítse.

Bejelentkezés a Dockerbe

Adja meg a tárolóregisztrációs adatbázis hitelesítő adatait a Dockernek, hogy az le tudja küldeni a tárolólemezképet a tárolóregisztrációs adatbázisban lévő tárolóba.

  1. Jelentkezzen be a Dockerbe a beállításjegyzék létrehozása után mentett Azure Container Registry-hitelesítő adatokkal.

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

    Biztonsági figyelmeztetést kaphat, amely a használatát --password-stdinjavasolja. Bár ez az ajánlott eljárás éles forgatókönyvekhez, az oktatóanyag hatókörén kívül esik. További információkért tekintse meg a Docker bejelentkezési referenciát.

  2. Jelentkezzen be az Azure Container Registrybe. Előfordulhat, hogy a parancs használatához telepítenie kell az Azure CLI-taz. Ez a parancs a tárolóregisztrációs adatbázisban található felhasználónevet és jelszót kéri a Beállítások>hozzáférési kulcsaiban.

    az acr login -n <Azure Container Registry name>
    

Tipp.

Ha az oktatóanyag bármely pontján kijelentkezik, ismételje meg a Docker és az Azure Container Registry bejelentkezési lépéseit a folytatáshoz.

Build modul Docker-rendszerképe

A modul Docker-rendszerképének létrehozásához használja a modul Docker-fájlját.

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

Ha például a rendszerképet a helyi beállításjegyzékhez vagy egy Azure Container Registryhez szeretné létrehozni, használja a következő parancsokat:

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

Leküldéses modul Docker-rendszerképe

Küldje el a modul rendszerképét a helyi beállításjegyzékbe vagy egy tárolóregisztrációs adatbázisba.

docker push <ImageName>

Példa:

# 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

A modul üzembe helyezése az IoT Edge-eszközön

Az IoT Edge Azure CLI set-modules parancsával üzembe helyezheti a modulokat az Azure IoT Hubon. Ha például a deployment.debug.template.json fájlban definiált modulokat az IoT Hub my-iot-hubra szeretné telepíteni az IoT Edge-eszköz my-device eszközén, használja a következő parancsot:

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

Tipp.

Az IoT Hub megosztott hozzáférési kulcsát az Azure Portalon találja az IoT Hub >biztonsági beállításai>között megosztott hozzáférési szabályzatok>iothubownerben.

A modul hibakeresése

A modulok távoli eszközön való hibakereséséhez használhatja a Távoli SSH-hibakeresést a Visual Studio Code-ban.

A Visual Studio Code távoli hibakeresésének engedélyezéséhez telepítse a Remote Development bővítményt. További információ a Visual Studio Code távoli hibakereséséről: Visual Studio Code Remote Development.

A Távoli SSH-hibakeresés Visual Studio Code-ban való használatával kapcsolatos részletekért lásd : Távoli fejlesztés SSH használatával

A Visual Studio Code Hibakeresési nézetben válassza ki a modul hibakeresési konfigurációs fájlját. Alapértelmezés szerint a .debug Dockerfile, a modul tárolóbeállításai createOptions és a fájl a launch.json localhostot használja.

Válassza a Hibakeresés indítása vagy az F5 lehetőséget. Válassza ki a csatolandó folyamatot. A Visual Studio Code Hibakeresési nézetben változók láthatók a bal oldali panelen.

Hibakeresés a Docker Távoli SSH használatával

A Docker és a Moby motorjai támogatják a tárolókhoz való SSH-kapcsolatokat, így a Visual Studio Code-ban hibakeresést végezhet egy távoli eszközhöz csatlakoztatva. A funkció használatához meg kell felelnie az alábbi előfeltételeknek.

A távoli SSH hibakeresési előfeltételei a használt nyelvtől függően eltérőek lehetnek. A következő szakaszok a .NET beállítását ismertetik. A többi nyelvről további információt az SSH-t használó távoli fejlesztés című témakörben talál. A távoli hibakeresés konfigurálásával kapcsolatos részletek a Visual Studio Code dokumentációjában találhatók az egyes nyelvek hibakeresési szakaszaiban.

Docker SSH-bújtatás konfigurálása

  1. A Docker SSH-bújtatás lépéseit követve konfigurálhatja az SSH-bújtatást a fejlesztői számítógépen. Az SSH-bújtatáshoz nyilvános/titkos kulcspáros hitelesítésre és a távoli eszközvégpontot meghatározó Docker-környezetre van szükség.

  2. A Dockerhez való csatlakozáshoz gyökérszintű jogosultságok szükségesek. A Docker nem gyökérfelhasználóként való kezelésének lépéseit követve engedélyezheti a kapcsolatot a Docker démonával a távoli eszközön. Ha befejezte a hibakeresést, érdemes lehet eltávolítania a felhasználót a Docker-csoportból.

  3. A Visual Studio Code-ban a Parancskatalógus (Ctrl+Shift+P) segítségével adja ki a Docker-környezetet: A parancs használatával aktiválhatja a távoli gépre mutató Docker-környezetet. Ez a parancs miatt a Visual Studio Code és a Docker CLI is a távoli gép környezetét használja.

    Tipp.

    Minden Docker-parancs az aktuális környezetet használja. Ha végzett a hibakereséssel, ne felejtse el a környezet alapértelmezettre történő módosítását.

  4. A távoli Docker-környezet aktív állapotának ellenőrzéséhez sorolja fel a távoli eszközön futó tárolókat:

    docker ps
    

    A kimenetnek hasonlónak kell lennie a távoli eszközön futó tárolóknak:

    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. A .vscode könyvtárban adjon hozzá egy új konfigurációt a launch.json a fájl Visual Studio Code-ban való megnyitásával. Válassza a Konfiguráció hozzáadása lehetőséget, majd válassza ki a modulhoz megfelelő távoli csatolási sablont. Az alábbi konfiguráció például a .NET Core-hoz készült. Módosítsa a PipeArgs -H paraméterének értékét az eszköz DNS-nevére vagy IP-címére.

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

A modul távoli hibakeresése

  1. A Visual Studio Code Hibakeresési nézetben válassza ki a hibakeresési konfiguráció távoli hibakeresési IoT Edge-modulját (.NET Core)..

  2. Válassza a Hibakeresés indítása vagy az F5 lehetőséget. Válassza ki a csatolandó folyamatot.

  3. A Visual Studio Code Hibakeresés nézetében a bal oldali panelen láthatók a változók.

  4. A Visual Studio Code-ban állítson be töréspontokat az egyéni modulban.

  5. Töréspont elérésekor megvizsgálhatja a változókat, végiglépkedhet a kódon, és hibakeresést végezhet a modulban.

    Képernyőkép a Docker-tárolóhoz csatolt Visual Studio Code-ról egy távoli eszközön, töréspontnál szüneteltetve.

Feljegyzés

Az előző példa bemutatja, hogyan lehet hibakeresést végezni az IoT Edge-modulokon távoli tárolókon. A példa egy távoli Docker-környezetet ad hozzá, és módosítja a Docker-jogosultságokat a távoli eszközön. Miután befejezte a modulok hibakeresését, állítsa be a Docker-környezetet alapértelmezettre, és távolítsa el a jogosultságokat a felhasználói fiókjából.

Az IoT Developer blog bejegyzésében egy Raspberry Pi-eszközt használó példát talál.

Következő lépések

Miután elkészítette a modult, megtudhatja, hogyan helyezhet üzembe Azure IoT Edge-modulokat.

Az IoT Edge-eszközök moduljainak fejlesztéséhez ismerje meg és használja az Azure IoT Hub SDK-jait.