Självstudie: Utveckla IoT Edge-moduler med Linux-containrar med hjälp av IoT Edge för Linux i Windows
Gäller för: IoT Edge 1.4
Viktigt!
Azure IoT Edge 1.5 LTS och IoT Edge 1.4 stöds. IoT Edge 1.4 LTS når slutet av tjänsten den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.
Den här självstudien beskriver hur du utvecklar, felsöker och distribuerar din egen kod till en Azure IoT Edge-enhet med hjälp av IoT Edge för Linux i Windows och Visual Studio 2022. Du får lära dig det vanligaste utvecklarscenariot för IoT Edge-lösningar genom att distribuera en C#-modul till en Linux-enhet. Du distribuerar och felsöker en anpassad IoT Edge-modul som körs i en Linux-container i Windows. Även om du planerar att använda ett annat språk eller distribuera en Azure-tjänst är den här självstudien fortfarande användbar för att lära dig mer om utvecklingsverktygen och begreppen.
Den här självstudien innehåller steg för två IoT Edge-utvecklingsverktyg:
- Cli-kommandoradsgränssnittet för Azure IoT Edge Dev Tool (CLI), som är det bästa verktyget för utveckling
- Azure IoT Edge Tools-tillägget för Visual Studio, som är i underhållsläge
Använd väljaren i början av den här självstudien för att välja verktygsversionen.
I den här självstudien lär du dig att:
- Konfigurera utvecklingsdatorn.
- Använd IoT Edge-utvecklingsverktyg för att skapa ett nytt projekt.
- Skapa projektet som en container och lagra det i ett Azure-containerregister.
- Distribuera koden till en IoT Edge-enhet.
Förutsättningar
I den här självstudien förutsätts att du använder en dator som kör Windows som utvecklingsdator. På Windows-datorer kan du utveckla windows- eller Linux-moduler. Den här självstudien vägleder dig genom utvecklingen av Linux-containrar genom att använda IoT Edge för Linux i Windows för att skapa och distribuera modulerna.
Innan du börjar:
Installera IoT Edge för Linux i Windows.
Läs snabbstarten Distribuera din första IoT Edge-modul till en Windows-enhet.
Installera eller ändra Visual Studio 2022 på utvecklingsdatorn. Välj azure-utveckling och skrivbordsutveckling med C++-arbetsbelastningsalternativ.
När installationen av Visual Studio 2022 är klar laddar du ned och installerar Azure IoT Edge-verktyg från Visual Studio Marketplace.
Du kan använda Azure IoT Edge Tools-tillägget för att skapa och skapa din IoT Edge-lösning. Det föredragna utvecklingsverktyget är Azure IoT Edge Dev Tool CLI. Tillägget innehåller De Azure IoT Edge-projektmallar som du använder för att skapa Visual Studio-projektet. För närvarande måste du installera tillägget oavsett vilket utvecklingsverktyg du använder.
Dricks
Om du använder Visual Studio 2019 laddar du ned och installerar Azure IoT Edge Tools för Visual Studio 2019 från Visual Studio Marketplace.
- Installera Azure CLI.
- Skapa en kostnadsfri IoT-hubb eller en IoT-hubb på standardnivå i Azure som en molnresurs.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Nyckelbegrepp
Den här självstudien går igenom utvecklingen av en IoT Edge-modul. En IoT Edge-modul är en container som har körbar kod. Du kan distribuera en eller flera moduler till en IoT Edge-enhet. Moduler utför specifika uppgifter som att mata in data från sensorer, rensa och analysera data eller skicka meddelanden till en IoT-hubb. Mer information finns i Förstå Azure IoT Edge-moduler.
När du utvecklar IoT Edge-moduler är det viktigt att förstå skillnaden mellan utvecklingsdatorn och mål-IoT Edge-enheten där modulen så småningom distribueras. Containern som du skapar för att lagra modulkoden måste matcha operativsystemet (OS) för målenheten.
Det vanligaste scenariot är till exempel någon som utvecklar en modul på en Windows-dator som har för avsikt att rikta in sig på en Linux-enhet som kör IoT Edge. I så fall är containeroperativsystemet Linux.
När du går igenom den här självstudien bör du tänka på skillnaden mellan operativsystemet för utvecklingsdatorn och containeroperativsystemet. I den här självstudien använder du din Windows-värd för utveckling och IoT Edge för Linux på en virtuell Windows-dator (VM) för att skapa och distribuera modulerna.
Den här självstudien riktar sig till enheter som kör IoT Edge med Linux-containrar. Du kan använda önskat operativsystem så länge utvecklingsdatorn kör Linux-containrar. Vi rekommenderar att du använder Visual Studio för att utveckla med Linux-containrar, så det är vad den här självstudien använder. Du kan också använda Visual Studio Code, även om det finns skillnader i stöd mellan de två verktygen. Mer information finns i Utveckla Azure IoT Edge-moduler med Visual Studio Code.
Konfigurera Docker CLI- och Docker-motorn för fjärranslutning
IoT Edge-moduler paketeras som containrar, så du behöver en containermotor på utvecklingsdatorn för att skapa och hantera dem.
IoT Edge för Linux på en virtuell Windows-dator innehåller redan en instans av Docker-motorn. Den här självstudien visar hur du fjärransluter från Windows-utvecklardatorn till IoT Edge för Linux på Windows VM Docker-instansen. Genom att använda den här fjärranslutningen tar du bort beroendet av Docker Desktop för Windows.
Konfigurera Docker CLI
Det första steget är att konfigurera Docker CLI på Windows-utvecklingsdatorn så att den kan ansluta till den fjärranslutna Docker-motorn:
Ladda ned den förkompilerade
docker.exe
versionen av Docker CLI från Chocolatey. Du kan också ladda ned det officiella cli-projektet från GitHub och kompilera det genom att följa lagringsplatsens instruktioner.Extrahera
docker.exe
till en katalog i utvecklingsdatorn,C:\Docker\bin
till exempel .Öppna Om systeminformation>för datorn>Avancerade systeminställningar.
Välj Avancerade>miljövariabler. Under Användarvariabler väljer du Sökväg.
Redigera sökvägsvariabeln och lägg till platsen
docker.exe
för .Öppna en upphöjd PowerShell-session.
Kontrollera att Docker CLI är tillgängligt med hjälp av det här kommandot:
docker --version
Om du har konfigurerat allt bör utdata från kommandot visa Docker-versionen. Den bör se ut ungefär såhär
Docker version 20.10.12, build e91ed57
.
Konfigurera Docker-motorn
Det andra steget är att konfigurera IoT Edge för Linux på Windows VM Docker-motorn för att acceptera externa anslutningar och lägga till lämpliga brandväggsregler.
Varning
Att exponera Docker-motorn för externa anslutningar kan öka säkerhetsriskerna. Du bör endast använda den här konfigurationen i utvecklingssyfte. Se till att återställa konfigurationen till standardinställningarna när utvecklingen är klar.
Öppna en upphöjd PowerShell-session och kör följande kommandon:
# 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"
Här är exempel på utdata:
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
Testa anslutningen
Det sista installationssteget är att testa Docker-anslutningen till IoT Edge för Linux på Windows VM Docker-motorn:
Hämta IP-adressen för IoT Edge för Linux på en virtuell Windows-dator:
Get-EflowVmAddr
Dricks
Om IoT Edge för Linux på en virtuell Windows-dator distribuerades utan en statisk IP-adress kan IP-adressen ändras mellan omstarter av Windows-värdoperativsystemet eller nätverksändringar. Kontrollera att du använder rätt IP-adress för IoT Edge för Linux på en virtuell Windows-dator varje gång du vill upprätta en fjärranslutning till Docker-motorn.
Här är exempel på utdata:
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.105
Anslut till IoT Edge för Linux på Windows VM Docker-motorn och kör
hello-world
exempelcontainern. Ersätt<EFLOW-VM-IP>
med IP-adressen för IoT Edge för Linux på den virtuella Windows-datorn som du fick i föregående steg.docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
När nedladdningen av containern är klar körs containern och genererar följande utdata:
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/
Skapa ett Azure IoT Edge-projekt
IoT Edge-projektmallen i Visual Studio skapar en lösning som du kan distribuera till IoT Edge-enheter. Använd följande steg för att skapa en Azure IoT Edge-lösning och generera sedan den första modulen i den lösningen. Varje IoT Edge-lösning kan innehålla mer än en modul.
Viktigt!
IoT Edge-projektstrukturen som Visual Studio skapar är inte samma som den i Visual Studio Code.
För närvarande stöder Inte Azure IoT Edge Dev Tool CLI att skapa Visual Studio-projekttypen. Du måste använda Azure IoT Edge Tools-tillägget för att skapa Visual Studio-projektet.
Skapa ett nytt projekt i Visual Studio genom att välja Skapa ett nytt projekt på startsidan eller genom att välja knappen Nytt projekt i verktygsfältet.
På sidan Skapa ett nytt projekt söker du efter Azure IoT Edge. Välj det projekt som matchar plattformen (Linux IoT Edge-modulen) och arkitekturen för din IoT Edge-enhet och välj sedan Nästa.
På sidan Konfigurera det nya projektet anger du ett namn för projektet och anger platsen och väljer sedan Skapa.
I dialogrutan Lägg till modul väljer du den typ av modul som du vill utveckla. Du kan också välja Befintlig modul för att lägga till en befintlig IoT Edge-modul i distributionen.
I Modulnamn anger du modulnamnet.
I Url för lagringsplats anger du namnet på modulens avbildningslagringsplats. Visual Studio fyller automatiskt i modulnamnet med localhost:5000/<ditt modulnamn>. Ersätt den med din egen registerinformation.
Använd localhost om du använder ett lokalt Docker-register för testning. Om du använder Azure Container Registry använder du inloggningsservern från registrets inställningar. Inloggningsservern ser ut som registernamn.azurecr.io>.< Ersätt endast localhost:5000-delen av strängen så att slutresultatet ser ut som< registernamn.azurecr.io/>< därt modulnamn>.
Välj Lägg till för att lägga till modulen i projektet.
Kommentar
Om du har ett befintligt IoT Edge-projekt kan du ändra lagringsplatsens URL genom att
module.json
öppna filen. Lagringsplatsens URL finns irepository
egenskapen för JSON-filen.
Nu har du ett IoT Edge-projekt och en IoT Edge-modul i din Visual Studio-lösning.
Projektstruktur
Lösningen har två mappar på projektnivå: en huvudprojektmapp och en modulmapp. Du kan till exempel ha en huvudprojektmapp med namnet AzureIotEdgeApp1
och en modulmapp med namnet IotEdgeModule1
.
Huvudprojektmappen innehåller distributionsmanifestet. Distributionsmanifestet är ett JSON-dokument som beskriver de moduler som ska konfigureras på den riktade IoT Edge-enheten.
Modulmappen innehåller en fil för modulkoden. Den heter antingen Program.cs
eller main.c
, beroende på vilket språk du har valt. Den här mappen innehåller också en fil med namnet module.json
som beskriver metadata för din modul. Olika Docker-filer tillhandahåller nödvändig information för att skapa din modul som en Windows- eller Linux-container.
Distributionsmanifest för projektet
Distributionsmanifestet som du redigerar heter deployment.debug.template.json
. Den här filen är en mall för ett IoT Edge-distributionsmanifest som definierar alla moduler som körs på en enhet. Filen definierar också hur modulerna kommunicerar med varandra. Mer information om distributionsmanifest finns i Lär dig hur du distribuerar moduler och upprättar vägar.
Distributionsmallen innehåller:
- De två runtime-modulerna
edgeAgent
ochedgeHub
. - Den anpassade modul som du skapade i det här Visual Studio-projektet.
- En modul med namnet
SimulatedTemperatureSensor
. Den här standardmodulen genererar simulerade data som du kan använda för att testa dina moduler (eller ta bort om det inte behövs). Om du vill se hur den simulerade temperatursensorn fungerar kan du visa källkoden SimulatedTemperatureSensor.csproj.
Ange IoT Edge-körningsversionen
För närvarande är den senaste stabila körningsversionen 1.4. Uppdatera IoT Edge-körningsversionen till den senaste stabila versionen eller den version som du vill rikta in dig på för dina enheter:
Högerklicka på namnet på huvudprojektet i Solution Explorer och välj Ange IoT Edge-körningsversion.
Använd den nedrullningsbara menyn för att välja den körningsversion som IoT Edge-enheterna kör. Välj sedan OK för att spara ändringarna. Om du inte gjorde några ändringar väljer du Avbryt.
Tillägget innehåller för närvarande inte något val för de senaste körningsversionerna. Om du vill ange körningsversionen högre än 1.2 öppnar du distributionsmanifestfilen
deployment.debug.template.json
. Ändra körningsversionen för systemkörningsmodulavbildningarnaedgeAgent
ochedgeHub
. Om du till exempel vill använda IoT Edge-körningsversionen 1.4 ändrar du följande rader i distributionsmanifestfilen:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.4" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.4", //...
Om du har ändrat versionen återskapar du distributionsmanifestet genom att högerklicka på namnet på projektet och välja Generera distribution för IoT Edge. Det här steget genererar ett distributionsmanifest baserat på distributionsmallen. Manifestet visas i mappen för
config
ditt Visual Studio-projekt.
Öppna distributionsmanifestfilen
deployment.debug.template.json
.Ändra körningsversionen för systemkörningsmodulavbildningarna
edgeAgent
ochedgeHub
. Om du till exempel vill använda IoT Edge-körningsversion 1.4 ändrar du följande rader i distributionsmanifestfilen:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.4", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.4", //...
Konfigurera Visual Studio 2022 remote Docker-motorinstansen
Konfigurera Azure IoT Edge Tools-tillägget så att det använder den fjärranslutna Docker-motorn som körs i IoT Edge för Linux på en virtuell Windows-dator:
Välj Verktyg Azure>IoT Edge-verktyg>IoT Edge-verktygsinställningar.
Ersätt värdet DOCKER_HOST localhost med IP-adressen för IoT Edge för Linux på en virtuell Windows-dator. Om du inte kommer ihåg IP-adressen använder du cmdleten
Get-EflowVmAddr
IoT Edge för Linux i Windows PowerShell för att hämta den. Om IP-adressen för IoT Edge för Linux på en virtuell Windows-dator till exempel är 172.20.1.100 ska det nya värdet vara tcp://172.20.1.100:2375.Välj OK.
Utveckla din modul
När du lägger till en ny modul levereras den med standardkod som är redo att skapas och distribueras till en enhet så att du kan börja testa utan att röra någon kod. Modulkoden finns i modulmappen i en fil med namnet Program.cs
(för C#) eller main.c
(för C).
I standardlösningen dirigeras simulerade data från modulen SimulatedTemperatureSensor
till din modul. Modulen tar indata och skickar den sedan till Azure IoT Hub.
När du är redo att anpassa modulmallen med din egen kod använder du SDK:erna för Azure IoT Hub för att skapa andra moduler som uppfyller nyckelbehoven för IoT-lösningar. Dessa behov kan omfatta säkerhet, enhetshantering och tillförlitlighet.
Skapa och push-överföra en enskild modul
Normalt vill du testa och felsöka varje modul innan du kör den i en hel lösning med flera moduler. Eftersom lösningen skapar eller felsöker med hjälp av Docker-motorn som körs i IoT Edge för Linux på en virtuell Windows-dator, är det första steget att skapa och publicera modulen för att aktivera fjärrfelsökning:
I Solution Explorer väljer du modulprojektmappen (till exempel
myIotEdgeModule
).Ange den anpassade modulen som startprojekt. Välj Project Set as StartUp Project (Projektuppsättning>som StartUp Project) på menyn.
Om du vill felsöka C#Linux-modulen måste du uppdatera
Dockerfile.amd64.debug
filen för att aktivera SSH-tjänsten.Dockerfile.amd64.debug
Uppdatera filen så att den använder följande mall: Dockerfile för Azure IoT Edge AMD64 C#-modul med stöd för fjärrfelsökning.Kommentar
När du väljer Felsök använder
Dockerfile.(amd64|windows-amd64).debug
Visual Studio för att skapa Docker-avbildningar. Den här filen innehåller .NET Core-kommandoradsfelsökaren VSDBG i containeravbildningen när du skapar den. För produktionsklara IoT Edge-moduler rekommenderar vi att du använder versionskonfigurationen, som använderDockerfile.(amd64|windows-amd64)
utan VSDBG.Kontrollera att namnet på DLL:en på den sista raden i mallen
ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]
matchar namnet på ditt IoT Edge-modulprojekt.För att upprätta en SSH-anslutning med Linux-modulen måste du skapa en RSA-nyckel. Öppna en upphöjd PowerShell-session och kör följande kommandon för att skapa en ny RSA-nyckel. Spara RSA-nyckeln under samma IoT Edge-modulmapp och kontrollera att namnet på nyckeln är
id_rsa
.ssh-keygen -t RSA -b 4096 -m PEM
Om du använder ett privat register som Azure Container Registry använder du följande Docker-kommando för att logga in på det. Du kan hämta användarnamnet och lösenordet från sidan Åtkomstnycklar i registret i Azure Portal. Om du använder ett lokalt register kan du köra ett lokalt register.
docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
Högerklicka på projektmappen i Solution Explorer och välj Skapa och skicka IoT Edge-moduler. Det här kommandot skapar och push-överför Docker-avbildningen för varje modul.
Om du använder ett privat register som Azure Container Registry måste du lägga till inloggningsinformation för registret i körningsinställningarna som finns i filen
deployment.template.json
. Ersätt platshållarna med ditt faktiska användarnamn, lösenord och registernamn för Container Registry-administratören."settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }
Kommentar
Den här artikeln använder autentiseringsuppgifter för administratörsinloggning för Azure Container Registry, vilket är praktiskt för utvecklings- och testscenarier. När du är redo för produktionsscenarier rekommenderar vi ett alternativ för autentisering med minst privilegier som tjänstens huvudnamn. Mer information finns i Hantera åtkomst till containerregistret.
Det är nödvändigt att exponera port 22 för att få åtkomst till modulens SSH-tjänst. I den här självstudien används 10022 som värdport, men du kan ange en annan port. Porten som du anger används som en SSH-port för att ansluta till Linux C#-modulen. Du måste lägga till SSH-portinformationen
createOptions
för den här Linux-modulinställningen i filendeployment.debug.template.json
:"createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }
Högerklicka på projektmappen i Solution Explorer och välj Generera distribution för IoT Edge för att skapa den nya JSON-distributionen för IoT Edge.
Välj Visa>Cloud Explorer. Kontrollera att du är inloggad i Visual Studio 2019.
I Cloud Explorer expanderar du din prenumeration och hittar sedan Azure IoT Hub och den Azure IoT Edge-enhet som du vill distribuera.
Högerklicka på IoT Edge-enheten och välj Skapa distribution. Gå till manifestet för felsökningsdistribution som har konfigurerats för din plattform. Den finns i
config
mappen i Din Visual Studio-lösning, till exempeldeployment.amd64.json
.
Skapa modulens Docker-avbildning
När du har utvecklat modulen kan du skapa modulavbildningen som ska lagras i ett containerregister för distribution till din IoT Edge-enhet.
Använd modulens Dockerfile för att skapa modulens Docker-avbildning:
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Anta till exempel att kommandogränssnittet finns i projektkatalogen och att modulnamnet är IotEdgeModule1
. Om du vill skapa avbildningen för det lokala registret eller ett Azure-containerregister använder du följande kommandon:
# 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"
Push-överför modulens Docker-avbildning
Skicka modulavbildningen till det lokala registret eller ett containerregister:
docker push <ImageName>
Till exempel:
# 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
Distribuera modulen till IoT Edge-enheten
Öppna distributionsmanifestfilen deployment.debug.template.json
i huvudprojektet i Visual Studio.
Innan distributionen måste du uppdatera dina autentiseringsuppgifter för Azure Container Registry, dina modulavbildningar och rätt createOptions
värden. Mer information om createOption
värden finns i Så här konfigurerar du alternativ för att skapa containrar för IoT Edge-moduler.
Om du använder ett Azure-containerregister för att lagra modulavbildningen lägger du till
deployment.debug.template.json
dina autentiseringsuppgifter iedgeAgent
inställningarna. Till exempel:"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" } } } }, //...
Ersätt egenskapsvärdet
image
med modulens avbildningsnamn som du skickade till registret. Om du till exempel push-överförde en bild taggadmyacr.azurecr.io/iotedgemodule1:0.0.1-amd64
för en anpassad modulIotEdgeModule1
ersätter du värdet för bildegenskapen med taggvärdet.Lägg till eller ersätt
createOptions
värdet med strängifierat innehåll för varje system och anpassad modul i distributionsmallen.Inställningarna och
createOptions
förIotEdgeModule1
skulle till exempelimage
likna följande exempel:"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\"}]}}}" }
Använd kommandot IoT Edge Azure CLI set-modules för att distribuera modulerna till Azure IoT Hub. Om du till exempel vill distribuera modulerna som definierats i
deployment.debug.amd64.json
filen till IoT-hubbenmy-iot-hub
för IoT Edge-enhetenmy-device
använder du följande kommando: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>"
Dricks
Du hittar din IoT Hub-anslutningssträng i Azure Portal under Azure IoT Hub>Security-inställningar>Principer för delad åtkomst.
I Cloud Explorer högerklickar du på gränsenheten och uppdaterar för att bekräfta att den nya modulen körs, tillsammans med modulerna
$edgeAgent
och$edgeHub
.
Felsöka lösningen
Kör följande kommandon i en upphöjd PowerShell-session:
moduleId
Hämta värdet baserat på namnet på Linux C#-modulen.<iot-edge-module-name>
Ersätt platshållaren med modulens namn.$moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
Kontrollera att det
$moduleId
stämmer. Om variabeln är tom kontrollerar du att du använder rätt modulnamn.Starta SSH-tjänsten i Linux-containern:
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
Öppna modulens SSH-port på IoT Edge för Linux på en virtuell Windows-dator. (I den här självstudien används port 10022.)
Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
Varning
Av säkerhetsskäl tas IP-tabellregeln bort varje gång IoT Edge för Linux på en virtuell Windows-dator startas om och återgår till de ursprungliga inställningarna. Du måste också starta modulens SSH-tjänst igen manuellt.
När du har startat SSH-tjänsten väljer du Felsöka>Anslut till process, ställer in Anslutningstyp på SSH och anger Anslutningsmål till IP-adressen för din IoT Edge för Linux på en virtuell Windows-dator. Om du inte känner till IP-adressen för din IoT Edge för Linux på en virtuell Windows-dator kan du använda PowerShell-cmdleten
Get-EflowVmAddr
.Skriv IP-adressen och välj sedan returnyckeln. I popup-fönstret anger du följande konfigurationer:
Fält Värde Värdnamn IP-adress för IoT Edge för Linux på en virtuell Windows-dator Port 10022 (eller den som du använde i distributionskonfigurationen) Användarnamn rot Autentiseringstyp Privat nyckel Privat nyckelfil Fullständig sökväg till det id_rsa
värde som du skapade i ett tidigare stegLösenfras Lösenfras som används för nyckeln som du skapade i ett tidigare steg När du har anslutit till modulen med hjälp av SSH kan du välja processen och välja Bifoga. För C#-modulen måste du välja process dotnet och Attach to Managed (CoreCLR). Det kan ta 10 till 20 sekunder första gången.
Ange en brytpunkt för att inspektera modulen:
- Om du utvecklar i C# anger du en brytpunkt i
PipeMessage()
funktionen iModuleBackgroundService.cs
. - Om du använder C anger du en brytpunkt i
InputQueue1Callback()
funktionen imain.c
.
- Om du utvecklar i C# anger du en brytpunkt i
Utdata från
SimulatedTemperatureSensor
ska omdirigeras tillinput1
den anpassade Linux C#-modulen. Brytpunkten ska utlösas. Du kan titta på variabler i Visual Studio Locals-fönstret .Om du vill sluta felsöka väljer du Ctrl+F5 eller väljer knappen Stoppa .
Rensa resurser
Om du tänker fortsätta till nästa rekommenderade artikel kan du behålla de resurser och konfigurationer du har skapat och använda dem igen. Du kan även fortsätta att använda samma IoT Edge-enhet som en testenhet.
Annars tar du bort de lokala konfigurationerna och De Azure-resurser som du använde i den här artikeln för att undvika avgifter.
Ta bort Azure-resurser
Det går inte att ångra borttagningen av Azure-resurser och resursgrupper. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat IoT-hubben i en befintlig resursgrupp som har resurser som du vill behålla tar du bara bort själva IoT Hub-resursen, inte resursgruppen.
Ta bort resurser:
Logga in på Azure-portalen och välj Resursgrupper.
Välj namnet på resursgruppen som innehåller dina IoT Edge-testresurser.
Granska listan över resurser som resursgruppen innehåller. Om du vill ta bort alla kan du välja Ta bort resursgrupp. Om du bara vill ta bort några av dem kan du välja varje resurs för att ta bort dem individuellt.
Gå vidare
I den här självstudien konfigurerar du Visual Studio på utvecklingsdatorn och distribuerade och debuggade din första IoT Edge-modul från den. Nu när du känner till de grundläggande begreppen kan du prova att lägga till funktioner i en modul så att den kan analysera data som passerar genom den: