Azure IoT Edge-modulok hibakeresése a Visual Studio Code használatával
A következőkre vonatkozik: IoT Edge 1.5 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:
- Azure IoT Edge-bővítmény . A Visual Studio Code-bővítményhez készült Azure IoT Edge-eszközök karbantartási módban használhatók.
- Azure IoT Hub-bővítmény .
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.
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" } } } }, ...
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\"}]}}}" }
- A Visual Studio Code parancskatalógusában futtassa az Azure IoT Edge: Build and Push IoT Edge-megoldást.
- Válassza ki a
deployment.debug.template.json
megoldáshoz tartozó fájlt. - 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.
- 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.
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-stdin
javasolja. 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.Jelentkezzen be az Azure Container Registrybe. Előfordulhat, hogy a parancs használatához telepítenie kell az Azure CLI-t
az
. 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
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.
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.
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.
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
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
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)..
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és nézetében a bal oldali panelen láthatók a változók.
A Visual Studio Code-ban állítson be töréspontokat az egyéni modulban.
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.
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.