Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
IoT Edge 1.5
Belangrijk
IoT Edge 1.5 LTS is de ondersteunde release. IoT Edge 1.4 LTS bereikt het einde van de levensduur op 12 november 2024. Als u een eerdere versie gebruikt, raadpleegt u Update IoT Edge.
Deze zelfstudie begeleidt u bij het ontwikkelen, opsporen van fouten en het implementeren van uw eigen code op een Azure IoT Edge apparaat met behulp van IoT Edge voor Linux op Windows en Visual Studio 2022. U leert het meest voorkomende scenario voor ontwikkelaars voor IoT Edge oplossingen door een C#-module te implementeren op een Linux-apparaat. U implementeert en spoort fouten op in een aangepaste IoT Edge-module die wordt uitgevoerd in een Linux-container op Windows. Zelfs als u van plan bent een andere taal te gebruiken of een Azure-service te implementeren, is deze zelfstudie nog steeds handig voor meer informatie over de ontwikkelhulpprogramma's en concepten.
Deze zelfstudie bevat stappen voor twee IoT Edge ontwikkelhulpprogramma's:
- De Azure IoT Edge Dev Tool CLI-opdrachtregelinterface (CLI), het favoriete hulpprogramma voor ontwikkeling
- De extensie Azure IoT Edge Tools voor Visual Studio, die zich in de modus maintenance bevindt
Gebruik de knop Selector aan het begin van deze zelfstudie om de versie van het hulpprogramma te selecteren.
In deze zelfstudie leert u het volgende:
- Uw ontwikkelcomputer instellen.
- Gebruik IoT Edge ontwikkelhulpprogramma's om een nieuw project te maken.
- Bouw uw project als een container en sla het op in een Azure Container Registry.
- Implementeer uw code op een IoT Edge apparaat.
Vereisten
In deze zelfstudie wordt ervan uitgegaan dat u een machine gebruikt waarop Windows wordt uitgevoerd als uw ontwikkelcomputer. Op Windows computers kunt u Windows- of Linux-modules ontwikkelen. In deze zelfstudie wordt u begeleid bij de ontwikkeling van Linux-containers met behulp van IoT Edge voor Linux op Windows voor het bouwen en implementeren van de modules.
Voordat u begint:
Installeer IoT Edge voor Linux op Windows.
Lees de snelstartgids Implementeer uw eerste IoT Edge-module op een Windows-apparaat.
Download de .NET Core SDK.
Installeer of wijzig Visual Studio 2022 op uw ontwikkelcomputer. Kies de Azure-ontwikkeling en Desktopontwikkeling met C++ werklastopties.
Nadat de installatie van Visual Studio 2022 gereed is, downloadt en installeert u Azure IoT Edge Tools vanuit Visual Studio Marketplace.
U kunt de extensie Azure IoT Edge Tools gebruiken om uw IoT Edge-oplossing te maken en te bouwen. Het favoriete ontwikkelprogramma is de Azure IoT Edge Dev Tool CLI. De extensie bevat de Azure IoT Edge projectsjablonen die u gebruikt om het Visual Studio project te maken. Op dit moment moet u de extensie installeren, ongeacht het ontwikkelprogramma dat u gebruikt.
Aanbeveling
Als u Visual Studio 2019 gebruikt, downloadt en installeert u Azure IoT Edge Tools for Visual Studio 2019 vanuit Visual Studio Marketplace.
- Installeer de Azure CLI.
- Maak een gratis of standaardniveau IoT-hub in Azure aan als cloudresource.
Als u geen Azure account hebt, maakt u een free-account voordat u begint.
Belangrijke concepten
In deze zelfstudie wordt de ontwikkeling van een IoT Edge-module beschreven. Een IoT Edge-module is een container met uitvoerbare code. U kunt een of meer modules implementeren op een IoT Edge apparaat. Modules voeren specifieke taken uit, zoals het opnemen van gegevens van sensoren, het opschonen en analyseren van gegevens of het verzenden van berichten naar een IoT-hub. Zie Onderstand Azure IoT Edge modules voor meer informatie.
Wanneer u IoT Edge modules ontwikkelt, is het belangrijk om inzicht te krijgen in het verschil tussen de ontwikkelcomputer en het doelapparaat IoT Edge apparaat waar de module uiteindelijk wordt geïmplementeerd. De container die u bouwt om uw modulecode op te slaan, moet overeenkomen met het besturingssysteem van het doelapparaat.
Een veelvoorkomend scenario is bijvoorbeeld dat iemand een module ontwikkelt op een Windows-computer, met de bedoeling om deze target te maken voor een Linux-apparaat dat IoT Edge draait. In dat geval is het container-besturingssysteem Linux.
Als u deze zelfstudie doorloopt, moet u rekening houden met het verschil tussen het besturingssysteem van de ontwikkelcomputer en het besturingssysteem van de container. Voor deze zelfstudie gebruikt u uw Windows host voor ontwikkeling en de IoT Edge voor Linux op Windows virtuele machine (VM) voor het bouwen en implementeren van de modules.
Deze zelfstudie is gericht op apparaten waarop IoT Edge met Linux-containers wordt uitgevoerd. Als de ontwikkelcomputer Linux-containers uitvoert, kunt u uw favoriete besturingssysteem gebruiken. We raden u aan Visual Studio te gebruiken om te ontwikkelen met Linux-containers, dus dat is wat in deze zelfstudie wordt gebruikt. U kunt ook Visual Studio Code gebruiken, hoewel er verschillen zijn in ondersteuning tussen de twee hulpprogramma's. Zie Ontwikkeling Azure IoT Edge modules met Visual Studio Code voor meer informatie.
De Docker CLI en Docker-engine instellen voor externe verbinding
IoT Edge modules zijn verpakt als containers, dus u hebt een containerengine op uw ontwikkelcomputer nodig om ze te bouwen en te beheren.
De IoT Edge voor Linux op Windows VM bevat al een exemplaar van de Docker-engine. In deze zelfstudie leert u hoe u op afstand verbinding kunt maken vanaf de Windows-ontwikkelcomputer met de IoT Edge voor Linux op Windows VM Docker-exemplaar. Door deze externe verbinding te gebruiken, verwijdert u de afhankelijkheid van Docker Desktop voor Windows.
Docker CLI configureren
De eerste stap is het configureren van de Docker CLI op de Windows ontwikkelcomputer om verbinding te kunnen maken met de externe Docker-engine:
Download de vooraf gecompileerde
docker.exeversie van de Docker CLI van Chocolatey. U kunt ook het officiële project cli downloaden van GitHub en compileren door de instructies voor de opslagplaats te volgen.Pak
docker.exeuit naar een map op uw ontwikkelcomputer, bijvoorbeeldC:\Docker\bin.Open Over uw pc>Systeeminfo>Geavanceerde systeeminstellingen.
Selecteer Geavanceerde>omgevingsvariabelen. Onder Gebruikersvariabelen, selecteer Pad.
Bewerk de padvariabele en voeg de locatie van
docker.exe.Open een PowerShell-sessie met verhoogde bevoegdheid.
Controleer of de Docker CLI toegankelijk is met behulp van deze opdracht:
docker --versionAls u alles hebt geconfigureerd, moet in de uitvoer van de opdracht de Docker-versie worden weergegeven. Het zou er ongeveer zo uit moeten
Docker version 20.10.12, build e91ed57zien.
De Docker-engine configureren
De tweede stap is het configureren van de IoT Edge voor Linux op Windows VM Docker-engine voor het accepteren van externe verbindingen en het toevoegen van de juiste firewallregels.
Waarschuwing
Het blootstellen van de Docker-engine aan externe verbindingen kan de beveiligingsrisico's verhogen. U moet deze configuratie alleen gebruiken voor ontwikkelingsdoeleinden. Zorg ervoor dat u de configuratie teruggezet naar de standaardinstellingen nadat de ontwikkeling is voltooid.
Open een PowerShell-sessie met verhoogde bevoegdheid en voer de volgende opdrachten uit:
# Configure the IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules. Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder. Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" # Replace the service execution line to listen for external connections. Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" # Reload the IoT Edge for Linux on Windows VM services configurations. Invoke-EflowVmCommand "sudo systemctl daemon-reload" # Reload the Docker engine service. Invoke-EflowVmCommand "sudo systemctl restart docker.service" # Check that the Docker engine is listening to external connections. Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"Hier volgt een voorbeeld van uitvoer:
PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules. PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" PS C:\> PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder. PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" PS C:\> PS C:\> # Replace the service execution line to listen for external connections. PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" PS C:\> PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations. PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload" PS C:\> PS C:\> # Reload the Docker engine service. PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service" PS C:\> PS C:\> # Check that the Docker engine is listening to external connections. PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd" tcp6 0 0 :::2375 :::* LISTEN 2790/dockerd
Test de verbinding
De laatste installatiestap is het testen van de Docker-verbinding met de IoT Edge voor Linux op Windows VM Docker-engine:
Haal het IP-adres van de IoT Edge voor Linux op Windows VM op:
Get-EflowVmAddrAanbeveling
Als de IoT Edge voor Linux op Windows VM is geïmplementeerd zonder een statisch IP-adres, kan het IP-adres veranderen tussen Windows opnieuw opstarten van het hostbesturingssystem of netwerkwijzigingen. Zorg ervoor dat u het juiste IP-adres gebruikt voor de IoT Edge voor Linux op Windows VM telkens wanneer u een externe verbinding met de Docker-engine tot stand wilt brengen.
Hier volgt een voorbeeld van uitvoer:
PS C:\> Get-EflowVmAddr [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW) - Virtual machine MAC: 00:15:5d:6f:da:78 - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine 00:15:5d:6f:da:78 172.31.24.105Maak verbinding met de IoT Edge voor Linux op Windows VM Docker-engine en voer de
hello-world-voorbeeldcontainer uit. Vervang<EFLOW-VM-IP>door de IoT Edge voor Linux op Windows VM-IP-adres dat u in de vorige stap hebt verkregen.docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-worldWanneer het downloaden van de container is voltooid, wordt de container uitgevoerd en wordt deze uitvoer geproduceerd:
PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you're currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Een Azure IoT Edge-project maken
Met de IoT Edge projectsjabloon in Visual Studio maakt u een oplossing die u op IoT Edge apparaten kunt implementeren. Gebruik de volgende stappen om een Azure IoT Edge oplossing te maken en vervolgens de eerste module in die oplossing te genereren. Elke IoT Edge oplossing kan meer dan één module bevatten.
Belangrijk
De IoT Edge projectstructuur die Visual Studio maakt, is niet hetzelfde als de structuur in Visual Studio Code.
Op dit moment biedt de Azure IoT Edge Dev Tool CLI geen ondersteuning voor het maken van het Visual Studio projecttype. U moet de extensie Azure IoT Edge Tools gebruiken om het Visual Studio-project te maken.
Maak in Visual Studio een nieuw project door Maak een nieuw project op de startpagina of door de knop Nieuw project op de werkbalk te selecteren.
Zoek op de pagina Maak een nieuw project naar Azure IoT Edge. Selecteer het project dat overeenkomt met het platform (Linux IoT Edge module) en architectuur voor uw IoT Edge apparaat en selecteer vervolgens Next.
Ga naar de pagina Uw nieuwe project configureren, voer een naam in voor uw project, geef de locatie op en selecteer Maken.
Selecteer in het dialoogvenster Module toevoegen het type module dat u wilt ontwikkelen. U kunt ook Existing-module selecteren om een bestaande IoT Edge-module toe te voegen aan uw implementatie.
Geef in Modulenaam de naam van de module op.
Geef in opslagplaats-URL de naam op van de opslagplaats voor de installatiekopieën van de module. Visual Studio vult automatisch de modulenaam in met localhost:5000/<uw modulenaam>. Vervang deze door uw eigen registergegevens.
Gebruik localhost als u een lokaal Docker-register gebruikt om te testen. Als u Azure Container Registry gebruikt, gebruikt u de aanmeldingsserver vanuit de instellingen van het register. De aanmeldingsserver ziet eruit als <registernaam.azurecr.io>. Vervang alleen het gedeelte localhost:5000 van de tekenreeks, zodat het uiteindelijke resultaat eruitziet als <registernaam.azurecr.io/>< naam van de module>.
Selecteer Toevoegen om uw module toe te voegen aan het project.
Notitie
Als u een bestaand IoT Edge project hebt, kunt u de URL van de opslagplaats wijzigen door het bestand
module.jsonte openen. De URL van de opslagplaats bevindt zich in derepositoryeigenschap van het JSON-bestand.
U hebt nu een IoT Edge project en een IoT Edge-module in uw Visual Studio oplossing.
Projectstructuur
Uw oplossing heeft twee mappen op projectniveau: een hoofdprojectmap en een modulemap. U hebt bijvoorbeeld een hoofdprojectmap met de naam AzureIotEdgeApp1 en een modulemap met de naam IotEdgeModule1.
De hoofdprojectmap bevat uw implementatiemanifest. Het implementatiemanifest is een JSON-document waarin de modules worden beschreven die moeten worden geconfigureerd op het doelapparaat IoT Edge.
De modulemap bevat een bestand voor uw modulecode. Deze wordt genoemd Program.cs of main.c, afhankelijk van de taal die u hebt gekozen. Deze map bevat ook een bestand met de naam module.json waarmee de metagegevens van uw module worden beschreven. Verschillende Docker-bestanden bieden de benodigde informatie voor het bouwen van uw module als een Windows- of Linux-container.
Implementatiemanifest van uw project
Het implementatiemanifest dat u bewerkt, heeft de naam deployment.debug.template.json. Dit bestand is een sjabloon van een IoT Edge implementatiemanifest dat alle modules definieert die op een apparaat worden uitgevoerd. Het bestand definieert ook hoe de modules met elkaar communiceren. Voor meer informatie over implementatiemanifesten, zie Leer hoe u modules implementeert en routes tot stand brengt.
De implementatiesjabloon bevat:
- De twee runtimemodules,
edgeAgentenedgeHub. - De aangepaste module die u in dit Visual Studio project hebt gemaakt.
- Een module met de naam
SimulatedTemperatureSensor. Met deze standaardmodule worden gesimuleerde gegevens gegenereerd die u kunt gebruiken om uw modules te testen (of te verwijderen als dit niet nodig is). Als u wilt zien hoe de gesimuleerde temperatuursensor werkt, bekijkt u de broncode SimulatedTemperatureSensor.csproj.
De runtimeversie van IoT Edge instellen
Momenteel is de nieuwste stabiele runtimeversie 1.5. Werk de IoT Edge runtime-versie bij naar de meest recente stabiele release of de versie waarop u zich wilt richten voor uw apparaten:
Klik in Solution Explorer met de rechtermuisknop op de naam van uw hoofdproject en selecteer Set IoT Edge runtime-versie.
Gebruik de vervolgkeuzelijst om de runtime-versie te kiezen waarop uw IoT Edge-apparaten draaien. Selecteer vervolgens OK om uw wijzigingen op te slaan. Als u geen wijzigingen hebt aangebracht, selecteert u Annuleren.
Momenteel bevat de extensie geen selectie voor de nieuwste runtimeversies. Als u de runtimeversie hoger dan 1.2 wilt instellen, opent u het manifestbestand voor de
deployment.debug.template.jsonimplementatie. Wijzig de runtimeversie voor de systeemruntimemodule-afbeeldingenedgeAgentenedgeHub. Als u bijvoorbeeld de IoT Edge runtimeversie 1.5 wilt gebruiken, wijzigt u de volgende regels in het manifestbestand voor de implementatie:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...Als u de versie hebt gewijzigd, genereert u het implementatiemanifest opnieuw door met de rechtermuisknop op de naam van uw project te klikken en Implementatie voor IoT Edge te selecteren. Met deze stap wordt een implementatiemanifest gegenereerd op basis van uw implementatiesjabloon. Het manifest wordt weergegeven in de map
configvan uw Visual Studio project.
Open het manifestbestand voor de
deployment.debug.template.jsonimplementatie.Wijzig de runtimeversie voor de systeemruntimemodule-afbeeldingen
edgeAgentenedgeHub. Als u bijvoorbeeld IoT Edge runtimeversie 1.5 wilt gebruiken, wijzigt u de volgende regels in het distributiemanifestbestand:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...
Het externe Docker-engine-exemplaar van Visual Studio 2022 instellen
Configureer de extensie Azure IoT Edge Tools voor het gebruik van de externe Docker-engine die wordt uitgevoerd in de IoT Edge voor Linux op Windows VM:
Selecteer Tools>Azure IoT Edge tools>IoT Edge-tool instellingen.
Vervang de waarde DOCKER_HOST localhost door het IP-adres voor de IoT Edge voor Linux op Windows VM. Als u het IP-adres niet meer weet, gebruikt u de IoT Edge voor Linux in Windows PowerShell-cmdlet
Get-EflowVmAddrom het te verkrijgen. Als de IoT Edge voor Linux op het IP-adres van Windows VM bijvoorbeeld 172.20.1.100 is, moet de nieuwe waarde tcp://172.20.1.100:2375 zijn.
Kies OK.
Uw module ontwikkelen
Wanneer u een nieuwe module toevoegt, wordt deze geleverd met standaardcode die klaar is om te worden gebouwd en geïmplementeerd op een apparaat, zodat u kunt beginnen met testen zonder code aan te raken. De modulecode bevindt zich in de modulemap in een bestand met de naam Program.cs (voor C#) of main.c (voor C).
In de standaardoplossing worden de gesimuleerde gegevens uit de SimulatedTemperatureSensor module doorgestuurd naar uw module. De module neemt de invoer en verzendt deze vervolgens naar Azure IoT Hub.
Wanneer u klaar bent om de modulesjabloon aan te passen met uw eigen code, gebruikt u de Azure IoT Hub SDK's om andere modules te bouwen die voldoen aan de belangrijkste behoeften voor IoT-oplossingen. Deze behoeften kunnen beveiliging, apparaatbeheer en betrouwbaarheid omvatten.
Eén module bouwen en pushen
Normaal gesproken wilt u elke module testen en fouten opsporen voordat u deze uitvoert in een volledige oplossing met meerdere modules. Omdat de oplossing bouwt of fouten opspoort met behulp van de Docker-engine die wordt uitgevoerd in de IoT Edge voor Linux op Windows VM, is de eerste stap het bouwen en publiceren van de module om externe foutopsporing in te schakelen:
Selecteer in Solution Explorer de projectmap van de module (bijvoorbeeld
myIotEdgeModule).Stel de aangepaste module in als het opstartproject. Op het menu, selecteer Project>Als Opstartproject Instellen.
Als u fouten wilt opsporen in de C#Linux-module, moet u het
Dockerfile.amd64.debugbestand bijwerken om de SSH-service in te schakelen. Werk het bestandDockerfile.amd64.debugbij om de volgende sjabloon te gebruiken: Dockerfile voor Azure IoT Edge AMD64 C#-module met ondersteuning voor externe foutopsporing.Notitie
Wanneer u Debug selecteert, gebruikt Visual Studio
Dockerfile.(amd64|windows-amd64).debugom Docker-installatiekopieën te bouwen. Dit bestand bevat het .NET Core-opdrachtregeldebugger VSDBG in uw containerinstallatiekopie tijdens het bouwen. Voor IoT Edge modules die gereed zijn voor productie, raden we u aan de configuratie Release te gebruiken, die gebruikmaakt vanDockerfile.(amd64|windows-amd64)zonder VSDBG.Zorg ervoor dat in de laatste regel van de sjabloon,
ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"], de naam van het DLL-bestand overeenkomt met de naam van uw IoT Edge moduleproject.Als u een SSH-verbinding met de Linux-module tot stand wilt brengen, moet u een RSA-sleutel maken. Open een PowerShell-sessie met verhoogde bevoegdheid en voer de volgende opdrachten uit om een nieuwe RSA-sleutel te maken. Sla de RSA-sleutel op onder dezelfde IoT Edge modulemap en zorg ervoor dat de naam van de sleutel is
id_rsa.ssh-keygen -t RSA -b 4096 -m PEM
Als u een privéregister zoals Azure Container Registry gebruikt, gebruikt u de volgende Docker-opdracht om u aan te melden. U kunt de gebruikersnaam en het wachtwoord ophalen op de pagina Access-sleutels van het register in de Azure-portal. Als u een lokaal register gebruikt, kunt u een lokaal register uitvoeren.
docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
Klik in Solution Explorer met de rechtermuisknop op de projectmap en selecteer Build and Push IoT Edge Modules. Met dit commando worden de Docker-afbeeldingen voor elke module gebouwd en gepusht.
Als u een privéregister zoals Azure Container Registry gebruikt, moet u uw aanmeldingsgegevens voor het register toevoegen aan de runtime-instellingen in het bestand
deployment.template.json. Vervang de tijdelijke aanduidingen door de werkelijke gebruikersnaam, het wachtwoord en de registernaam van de containerregisterbeheerder."settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }Notitie
In dit artikel worden aanmeldingsreferenties voor beheerders gebruikt voor Azure Container Registry, wat handig is voor ontwikkelings- en testscenario's. Wanneer u klaar bent voor productiescenario's, raden we een authenticatie-optie met minimale bevoegdheden aan, zoals service-principals. Zie Toegang tot uw containerregister beheren voor meer informatie.
U moet poort 22 beschikbaar maken voor toegang tot de SSH-service van de module. In deze zelfstudie wordt 10022 gebruikt als hostpoort, maar u kunt een andere poort opgeven. De poort die u opgeeft, wordt gebruikt als een SSH-poort om verbinding te maken met de Linux C#-module. U moet de SSH-poortgegevens toevoegen aan
createOptionsvoor deze Linux-module-instelling in het bestanddeployment.debug.template.json."createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }Klik in Solution Explorer met de rechtermuisknop op de projectmap en selecteer Implementatie voor IoT Edge om de nieuwe IoT Edge-implementatie-JSON te bouwen.
SelecteerCloud Explorer weergeven>. Zorg ervoor dat u bent aangemeld bij Visual Studio 2019.
Vouw in Cloud Explorer uw abonnement uit en zoek vervolgens Azure IoT Hub en het Azure IoT Edge apparaat dat u wilt implementeren.
Klik met de rechtermuisknop op het IoT Edge apparaat en selecteer Implementatie maken. Ga naar het distributiemanifest voor foutopsporing dat is geconfigureerd voor uw platform. Deze bevindt zich in de map
configin uw Visual Studio-oplossing, zoalsdeployment.amd64.json.
Bouw de Docker-image van de module
Nadat u de module hebt ontwikkeld, kunt u de moduleinstallatiekopieën bouwen om op te slaan in een containerregister voor implementatie op uw IoT Edge apparaat.
Gebruik het Dockerfile van de module om de Docker-installatiekopieën van de module te bouwen:
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Stel dat uw opdrachtshell zich in uw projectmap bevindt en uw modulenaam IotEdgeModule1 is. Gebruik de volgende opdrachten om de afbeeldingen te maken voor het lokale register of een Azure Container Registry:
# Build the image for the local registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
# Or build the image for an Azure Container Registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
De Docker-image van de module uploaden
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/iotedgemodule1:0.0.1-amd64
# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64
De module implementeren op het IoT Edge-apparaat
Open in Visual Studio het manifestbestand deployment.debug.template.json-implementatie in het hoofdproject.
Voordat u gaat implementeren, moet u uw Azure Container Registry-referenties, uw module-installatiekopieën en de juiste createOptions waarden bijwerken. Zie createOption voor meer informatie over -waarden.
Als u een Azure Container Registry gebruikt om de installatiekopieën van de module op te slaan, voegt u uw referenties toe aan
deployment.debug.template.jsonin deedgeAgent-instellingen. Voorbeeld:"modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "myacr": { "username": "myacr", "password": "<your_acr_password>", "address": "myacr.azurecr.io" } } } }, //...Vervang de
imageeigenschapswaarde door de naam van de modulaire afbeelding die u naar het register hebt verzonden. Als u bijvoorbeeld een afbeelding hebt gepusht die is getagdmyacr.azurecr.io/iotedgemodule1:0.0.1-amd64voor een aangepaste moduleIotEdgeModule1, vervangt u de waarde van de afbeeldingseigenschap door de tagwaarde.Voeg de waarde toe of vervang deze
createOptionsdoor tekenreeksinhoud voor elk systeem en elke aangepaste module in de implementatiesjabloon.De
image- encreateOptions-instellingen voorIotEdgeModule1zouden vergelijkbaar zijn met het volgende voorbeeld:"IotEdgeModule1": { "version": "1.0.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }Gebruik de opdracht IoT Edge Azure CLI set-modules om de modules te implementeren in de Azure IoT hub. Als u bijvoorbeeld de modules wilt implementeren die zijn gedefinieerd in het bestand
deployment.debug.amd64.jsonin de IoT-hubmy-iot-hubvoor het IoT Edge apparaatmy-device, 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>"Aanbeveling
U vindt uw IoT Hub connection string in de Azure-portal onder Azure IoT Hub>Beveiligingsinstellingen>Shared-toegangsbeleid.
Klik in Cloud Explorer met de rechtermuisknop op uw edge-apparaat en ververs om te bevestigen dat de nieuwe module actief is, samen met de
$edgeAgenten$edgeHubmodules.
Fouten opsporen in de oplossing
Voer in een PowerShell-sessie met verhoogde bevoegdheid de volgende opdrachten uit:
Haal de
moduleIdwaarde op op basis van de naam voor de Linux C#-module. Vervang de tijdelijke aanduiding door de<iot-edge-module-name>naam van uw module.$moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"Controleer of dat
$moduleIdjuist is. Als de variabele leeg is, controleert u of u de juiste modulenaam gebruikt.Start de SSH-service in de Linux-container:
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"Open de SSH-poort van de module op de IoT Edge voor Linux op Windows VM. (In deze zelfstudie wordt poort 10022 gebruikt.)
Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
Waarschuwing
Om veiligheidsredenen wordt de IP-tabelregel verwijderd wanneer de IoT Edge voor Linux op Windows VM opnieuw wordt opgestart en gaat terug naar de oorspronkelijke instellingen. U moet ook de SSH-service van de module handmatig opnieuw starten.
Nadat u de SSH-service hebt gestart, selecteert u Debug>Bijvoegen aan proces, stel Verbindingstype in op SSH en stel Connection-doel in op het IP-adres van uw IoT Edge voor Linux op Windows VM. Als u het IP-adres van uw IoT Edge voor Linux niet weet op Windows VM, kunt u de cmdlet
Get-EflowVmAddrPowerShell gebruiken.Typ het IP-adres en selecteer vervolgens de Enter-sleutel. Voer in het pop-upvenster de volgende configuraties in:
Veld Waarde Hostnaam IP-adres voor de IoT Edge voor Linux op Windows VM port 10022 (of degene die u hebt gebruikt in uw implementatieconfiguratie) Gebruikersnaam wortel Authenticatietype Persoonlijke sleutel Bestand met persoonlijke sleutel Volledig pad naar de id_rsawaarde die u in een vorige stap hebt gemaaktWachtwoordzin Wachtwoordzin die wordt gebruikt voor de sleutel die u in een vorige stap hebt gemaakt Nadat u verbinding hebt gemaakt met de module met behulp van SSH, kunt u het proces kiezen en Koppelen selecteren. Voor de C#-module moet u het proces dotnet kiezen en verbinden metBeheerd (CoreCLR). Het kan de eerste keer 10 tot 20 seconden duren.
Stel een onderbrekingspunt in om de module te controleren:
- Als u in C# ontwikkelt, stelt u een onderbrekingspunt in de
PipeMessage()functie inModuleBackgroundService.cs. - Als u C gebruikt, stelt u een onderbrekingspunt in de
InputQueue1Callback()functie inmain.c.
- Als u in C# ontwikkelt, stelt u een onderbrekingspunt in de
De uitvoer van
SimulatedTemperatureSensormoet worden omgeleid naarinput1de aangepaste Linux C#-module. Het onderbrekingspunt moet worden geactiveerd. U kunt variabelen bekijken in het venster Visual Studio Locals.
Als u de foutopsporing wilt stoppen, selecteert u Ctrl+F5 of selecteert u de knop Stoppen .
Resources opschonen
Als u van plan bent door te gaan met het volgende aanbevolen artikel, kunt u de resources en configuraties die u hebt gemaakt behouden en opnieuw gebruiken. U kunt ook hetzelfde IoT Edge apparaat blijven gebruiken als een testapparaat.
Verwijder anders de lokale configuraties en de Azure resources die u in dit artikel hebt gebruikt om kosten te voorkomen.
Azure resources verwijderen
U kunt het verwijderen van Azure resources en resourcegroepen niet ongedaan maken. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of bronnen verwijdert. Als u de IoT Hub hebt gemaakt in een bestaande resourcegroep met resources die u wilt behouden, verwijdert u alleen de IoT Hub resource zelf, niet de resourcegroep.
Om de resources te verwijderen:
- Meld u aan bij de Azure-portal en selecteer vervolgens Resource-groepen.
- Selecteer de naam van de resourcegroep die uw IoT Edge testresources bevat.
- Bekijk de lijst met resources die uw resourcegroep bevat. Als u alle mappen wilt verwijderen, kunt u Resourcegroep verwijderen selecteren. Als u slechts enkele resources wilt verwijderen, selecteert u elke resource om ze afzonderlijk te verwijderen.
Volgende stap
In deze zelfstudie hebt u Visual Studio ingesteld op uw ontwikkelcomputer en u hebt uw eerste IoT Edge module geïmplementeerd en er fouten in opgespoord. Nu u de basisconcepten kent, kunt u proberen functionaliteit toe te voegen aan een module, zodat deze de gegevens kan analyseren die door deze worden doorgegeven: