Fouten opsporen in Azure IoT Edge-modules met Visual Studio Code
Van toepassing op: IoT Edge 1.5 IoT Edge 1.4
Belangrijk
IoT Edge 1.5 LTS en IoT Edge 1.4 LTS worden ondersteund releases. IoT Edge 1.4 LTS eindigt op 12 november 2024. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.
In dit artikel leest u hoe u Visual Studio Code gebruikt om fouten in IoT Edge-modules in meerdere talen op te sporen. Op uw ontwikkelcomputer kunt u Visual Studio Code gebruiken om uw module te koppelen en fouten op te sporen in een lokale of externe modulecontainer.
Dit artikel bevat stappen voor twee IoT Edge-ontwikkelhulpprogramma's.
- Azure IoT Edge Dev Tool - opdrachtregelprogramma (CLI). Dit hulpprogramma heeft de voorkeur voor ontwikkeling.
- Azure IoT Edge-hulpprogramma's voor Visual Studio Code-extensie . De extensie bevindt zich in de onderhoudsmodus.
Gebruik de knop toolselector aan het begin van dit artikel om de versie van het hulpprogramma te selecteren.
Visual Studio Code ondersteunt het schrijven van IoT Edge-modules in de volgende programmeertalen:
- C# en C# Azure Functions
- E
- Python
- Node.js
- Java
Azure IoT Edge ondersteunt de volgende apparaatarchitecturen:
- AMD64
- ARM32v7
- ARM64
Zie taal- en architectuurondersteuning voor meer informatie over ondersteunde besturingssystemen, talen en architecturen.
Wanneer u de Visual Studio Code IoT Edge-extensie gebruikt, kunt u ook de modulecode starten en fouten opsporen in de IoT Edge-simulator.
U kunt ook een Windows-ontwikkelcomputer en foutopsporingsmodules in een Linux-container gebruiken met Behulp van IoT Edge voor Linux in Windows (EFLOW). Zie zelfstudie: IoT Edge-modules ontwikkelen met Linux-containers met Behulp van IoT Edge voor Linux in Windows voor meer informatie over het gebruik van EFLOW voor het ontwikkelen van modules.
Als u niet bekend bent met de foutopsporingsmogelijkheden van Visual Studio Code, raadpleegt u Foutopsporing in Visual Studio Code.
Vereisten
U kunt een computer of een virtuele machine met Windows, macOS of Linux gebruiken als uw ontwikkelcomputer. Op Windows-computers kunt u Windows- of Linux-modules ontwikkelen. Als u Linux-modules wilt ontwikkelen, gebruikt u een Windows-computer die voldoet aan de vereisten voor Docker Desktop.
Voltooi de zelfstudie Azure IoT Edge-modules ontwikkelen met behulp van Visual Studio Code om de vereiste hulpprogramma's voor ontwikkeling en foutopsporing te installeren.
Visual Studio Code installeren
Voeg de volgende extensies toe:
- Azure IoT Edge-extensie . De Azure IoT Edge-hulpprogramma's voor de Visual Studio Code-extensie bevindt zich in de onderhoudsmodus.
- Azure IoT Hub-extensie .
Als u fouten in uw module op een apparaat wilt opsporen, hebt u het volgende nodig:
- Een actieve IoT Hub met ten minste één IoT Edge-apparaat.
- Een fysiek IoT Edge-apparaat of een virtueel apparaat. Als u een virtueel apparaat in Azure wilt maken, volgt u de stappen in de quickstart voor Linux.
- Een aangepaste IoT Edge-module. Als u een aangepaste module wilt maken, volgt u de stappen in de zelfstudie Azure IoT Edge-modules ontwikkelen met behulp van Visual Studio Code .
Fouten opsporen zonder een container met behulp van ioT Edge-simulator
De IoT Edge-simulator is een hulpprogramma dat wordt uitgevoerd op uw ontwikkelcomputer en het gedrag van één IoT Edge-apparaat simuleert. U kunt de IoT Edge-simulator gebruiken om uw IoT Edge-modules te ontwikkelen en te testen zonder een fysiek apparaat of een volledige Runtime van een IoT Edge-apparaat.
Bij de volgende foutopsporingsstappen wordt ervan uitgegaan dat u al een aangepaste module hebt gemaakt. Als u nog geen aangepaste module hebt gemaakt, volgt u de stappen in de zelfstudie Azure IoT Edge-modules ontwikkelen met behulp van Visual Studio Code .
Foutopsporing van een module zonder container is niet beschikbaar bij het gebruik van C of Python.
Fouten opsporen in de bijlagemodus met behulp van ioT Edge-simulator
Foutopsporing in de bijlagemodus wordt niet ondersteund voor C of Python.
Fouten opsporen in een module met de IoT Edge-runtime
In elke modulemap zijn er verschillende Docker-bestanden voor verschillende containertypen. Gebruik een van de bestanden die eindigen met de extensie .debug om uw module te bouwen voor testen.
Wanneer u fouten in modules opssport met deze methode, worden uw modules uitgevoerd boven op de IoT Edge-runtime. Het IoT Edge-apparaat en uw Visual Studio Code kunnen zich op dezelfde computer bevinden. Visual Studio Code bevindt zich meestal op de ontwikkelcomputer en de IoT Edge-runtime en -modules worden uitgevoerd op een andere fysieke computer. Als u fouten wilt opsporen vanuit Visual Studio Code, moet u het volgende doen:
- Stel uw IoT Edge-apparaat in, bouw uw IoT Edge-modules met het Dockerfile voor foutopsporing en implementeer vervolgens op het IoT Edge-apparaat.
- Werk
launch.json
bij zodat Visual Studio Code kan worden gekoppeld aan het proces in een container op de externe computer. U vindt dit bestand in de.vscode
map in uw werkruimte en wordt bijgewerkt telkens wanneer u een nieuwe module toevoegt die ondersteuning biedt voor foutopsporing. - Gebruik externe SSH-foutopsporing om te koppelen aan de container op de externe computer.
Uw module bouwen en implementeren op een IoT Edge-apparaat
Open in Visual Studio Code het manifestbestand voor de deployment.debug.template.json-implementatie . In het implementatiemanifest worden de modules beschreven die moeten worden geconfigureerd op het beoogde IoT Edge-apparaat. Voordat u gaat implementeren, moet u uw Azure Container Registry-referenties en uw moduleinstallatiekopieën bijwerken met de juiste createOptions
waarden. Zie Opties voor het maken van containers configureren voor IoT Edge-modules voor meer informatie over createOption-waarden.
Als u een Azure Container Registry gebruikt om de installatiekopie van de module op te slaan, voegt u uw referenties toe aan de sectie registerCredentials van edgeAgent>>in deployment.debug.template.json. Vervang myacr door uw eigen registernaam op beide plaatsen en geef uw wachtwoord en aanmeldingsserveradres op. Voorbeeld:
"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" } } } }, ...
Voeg de volgende tekenreeksinhoud toe aan of vervang deze door de waarde createOptions voor elk systeem (edgeHub en edgeAgent) en aangepaste module (bijvoorbeeld filtermodule). Wijzig indien nodig de waarden.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
De filtermoduleconfiguratie moet bijvoorbeeld vergelijkbaar zijn met:
"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\"}]}}}" }
- Voer in het opdrachtenpalet van Visual Studio Code de opdracht Azure IoT Edge uit: Een IoT Edge-oplossing bouwen en pushen.
- Selecteer het
deployment.debug.template.json
bestand voor uw oplossing. - Klik in de sectie Azure IoT Hub-apparaten> van de Visual Studio Code Explorer-weergave met de rechtermuisknop op de naam van het IoT Edge-apparaat voor implementatie en kies Implementatie voor één apparaat maken.
Tip
Als u wilt controleren of het apparaat dat u hebt gekozen een IoT Edge-apparaat is, selecteert u het om de lijst met modules uit te vouwen en de aanwezigheid van $edgeHub en $edgeAgent te controleren. Elk IoT Edge-apparaat bevat deze twee modules.
- Navigeer naar de configuratiemap van uw oplossing, selecteer het
deployment.debug.amd64.json
bestand en selecteer vervolgens Edge-implementatiemanifest selecteren.
U kunt de containerstatus controleren vanaf uw apparaat of virtuele machine door de docker ps
opdracht uit te voeren in een terminal. De container wordt weergegeven nadat u de opdracht hebt uitgevoerd. Als uw Visual Studio Code- en IoT Edge-runtime op dezelfde computer worden uitgevoerd, kunt u ook de status controleren in de Docker-weergave van Visual Studio Code.
Belangrijk
Als u een privéregister zoals Azure Container Registry voor uw installatiekopieën gebruikt, moet u zich mogelijk verifiëren om installatiekopieën te pushen. Gebruik docker login <Azure Container Registry login server>
of az acr login --name <Azure Container Registry name>
om te verifiëren.
Aanmelden bij Docker
Geef uw containerregisterreferenties op voor Docker, zodat deze uw containerinstallatiekopieën naar de opslag in het register kan pushen.
Meld u aan bij Docker met de Azure Container Registry-referenties die u hebt opgeslagen nadat u het register hebt gemaakt.
docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
Mogelijk wordt een beveiligingswaarschuwing weergegeven waarin het gebruik van
--password-stdin
wordt aanbevolen. Hoewel dit een aanbevolen best practice is voor productiescenario's, valt dit buiten het bereik van deze zelfstudie. Zie de documentatie voor aanmelding bij Docker voor meer informatie.Meld u aan bij de Azure Container Registry. Mogelijk moet u Azure CLI installeren om de
az
opdracht te kunnen gebruiken. Met deze opdracht wordt u gevraagd om uw gebruikersnaam en wachtwoord in het containerregister in Toegangssleutels voor instellingen>.az acr login -n <Azure Container Registry name>
Tip
Als u op enig moment in deze zelfstudie wordt afgemeld, herhaalt u de aanmeldingsstappen van Docker en Azure Container Registry om door te gaan.
Docker-installatiekopieën bouwen
Gebruik het Dockerfile van de module om de Docker-moduleinstallatiekopieën te bouwen .
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Als u bijvoorbeeld de installatiekopieën voor het lokale register of een Azure Container Registry wilt maken, gebruikt u de volgende opdrachten:
# 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-installatiekopieën van pushmodule
Push de module-installatiekopieën naar het lokale register of een containerregister.
docker push <ImageName>
Voorbeeld:
# 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
De module implementeren op het IoT Edge-apparaat
Gebruik de opdracht Azure CLI-setmodules voor IoT Edge om de modules te implementeren in de Azure IoT Hub. Als u bijvoorbeeld de modules wilt implementeren die in het deployment.debug.template.json-bestand zijn gedefinieerd in IoT Hub my-iot-hub voor het IoT Edge-apparaat, gebruikt u de volgende opdracht:
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>"
Tip
U vindt uw gedeelde IoT Hub-toegangssleutel in Azure Portal in uw Gedeelde toegangsbeleid>voor IoT Hub-beveiligingsinstellingen >>voor iothubowner.
Fouten opsporen in uw module
Als u fouten in modules op een extern apparaat wilt opsporen, kunt u externe SSH-foutopsporing gebruiken in Visual Studio Code.
Als u externe foutopsporing voor Visual Studio Code wilt inschakelen, installeert u de extensie Remote Development. Zie Externe ontwikkeling van Visual Studio Code voor meer informatie over externe foutopsporing in Visual Studio Code.
Zie Externe ontwikkeling met behulp van SSH voor meer informatie over het gebruik van externe SSH-foutopsporing in Visual Studio Code
Selecteer in de weergave Foutopsporing in Visual Studio Code het configuratiebestand voor foutopsporing voor uw module. Standaard gebruiken de .debug Dockerfile, containerinstellingen createOptions
van de module en het launch.json
bestand localhost.
Selecteer Foutopsporing starten of F5 selecteren. Selecteer het proces waaraan u wilt koppelen. In de weergave Foutopsporing in Visual Studio Code ziet u variabelen in het linkerdeelvenster.
Fouten opsporen met behulp van Docker Remote SSH
De Docker- en Moby-engines ondersteunen SSH-verbindingen met containers, zodat u fouten kunt opsporen in Visual Studio Code die is verbonden met een extern apparaat. U moet aan de volgende vereisten voldoen voordat u deze functie kunt gebruiken.
Vereisten voor externe SSH-foutopsporing kunnen verschillen, afhankelijk van de taal die u gebruikt. In de volgende secties wordt de installatie voor .NET beschreven. Zie Remote Development met behulp van SSH voor een overzicht voor meer informatie over andere talen. Meer informatie over het configureren van externe foutopsporing vindt u in secties voor foutopsporing voor elke taal in de Documentatie van Visual Studio Code.
Docker SSH-tunneling configureren
Volg de stappen in Docker SSH-tunneling om SSH-tunneling op uw ontwikkelcomputer te configureren. Voor SSH-tunneling is verificatie van een openbaar/persoonlijk sleutelpaar en een Docker-context vereist waarmee het eindpunt van het externe apparaat wordt gedefinieerd.
Voor het maken van verbinding met Docker zijn bevoegdheden op hoofdniveau vereist. Volg de stappen in Docker beheren als een niet-hoofdgebruiker om verbinding met de Docker-daemon op het externe apparaat toe te staan. Wanneer u klaar bent met foutopsporing, kunt u de gebruiker verwijderen uit de Docker-groep.
Gebruik in Visual Studio Code het opdrachtpalet (Ctrl+Shift+P) om de Docker-context uit te geven: gebruik de opdracht om de Docker-context te activeren die verwijst naar de externe computer. Deze opdracht zorgt ervoor dat visual Studio Code en Docker CLI de context van de externe machine gebruiken.
Tip
Alle Docker-opdrachten gebruiken de huidige context. Vergeet niet om de context weer te wijzigen in de standaardinstelling wanneer u klaar bent met foutopsporing.
Als u wilt controleren of de externe Docker-context actief is, vermeldt u de actieve containers op het externe apparaat:
docker ps
In de uitvoer worden de containers weergegeven die op het externe apparaat worden uitgevoerd, vergelijkbaar:
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
Voeg in de map .vscode een nieuwe configuratie toe aan launch.json door het bestand te openen in Visual Studio Code. Selecteer Configuratie toevoegen en kies vervolgens de overeenkomende sjabloon voor externe koppeling voor uw module. De volgende configuratie is bijvoorbeeld voor .NET Core. Wijzig de waarde voor de parameter -H in PipeArgs in dns-naam of IP-adres van uw apparaat.
"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 },
Fouten in uw module op afstand opsporen
Selecteer in de weergave Foutopsporing in Visual Studio Code de foutopsporingsconfiguratie remote debug IoT Edge Module (.NET Core).
Selecteer Foutopsporing starten of F5 selecteren. Selecteer het proces waaraan u wilt koppelen.
In de weergave Foutopsporing van Visual Studio Code ziet u de variabelen in het linkerdeelvenster.
Stel in Visual Studio Code onderbrekingspunten in uw aangepaste module in.
Wanneer een onderbrekingspunt wordt bereikt, kunt u variabelen inspecteren, code doorlopen en fouten opsporen in uw module.
Notitie
In het voorgaande voorbeeld ziet u hoe u fouten in IoT Edge-modules op externe containers kunt opsporen. In het voorbeeld wordt een externe Docker-context toegevoegd en worden de Docker-bevoegdheden op het externe apparaat gewijzigd. Nadat u klaar bent met het opsporen van fouten in uw modules, stelt u de Docker-context in op de standaardinstelling en verwijdert u bevoegdheden uit uw gebruikersaccount.
Zie dit Blogbericht voor IoT Developer voor een voorbeeld met behulp van een Raspberry Pi-apparaat.
Volgende stappen
Nadat u uw module hebt gemaakt, leert u hoe u Azure IoT Edge-modules implementeert.
Als u modules voor uw IoT Edge-apparaten wilt ontwikkelen, moet u Azure IoT Hub SDK's begrijpen en gebruiken.