Dela via


Självstudie: Utveckla IoT Edge-moduler med Linux-containrar med hjälp av IoT Edge för Linux i Windows

Gäller för: Bockmarkering för IoT Edge 1.4 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.

  • Ladda ned .NET Core SDK.

  • 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.

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:

  1. 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.

  2. Extrahera docker.exe till en katalog i utvecklingsdatorn, C:\Docker\bintill exempel .

  3. Öppna Om systeminformation>för datorn>Avancerade systeminställningar.

  4. Välj Avancerade>miljövariabler. Under Användarvariabler väljer du Sökväg.

  5. Redigera sökvägsvariabeln och lägg till platsen docker.exeför .

  6. Öppna en upphöjd PowerShell-session.

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

  1. Ö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:

  1. 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 
    
  2. 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.

  1. 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.

  2. 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.

  3. På sidan Konfigurera det nya projektet anger du ett namn för projektet och anger platsen och väljer sedan Skapa.

  4. 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.

  5. I Modulnamn anger du modulnamnet.

  6. 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>.

  7. Välj Lägg till för att lägga till modulen i projektet.

    Skärmbild av val för att lägga till ett program och en modul i en Visual Studio-lösning.

    Kommentar

    Om du har ett befintligt IoT Edge-projekt kan du ändra lagringsplatsens URL genom att module.json öppna filen. Lagringsplatsens URL finns i repository 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 och edgeHub.
  • 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:

  1. Högerklicka på namnet på huvudprojektet i Solution Explorer och välj Ange IoT Edge-körningsversion.

    Skärmbild av val för att ange en IoT Edge-körningsversion.

  2. 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örningsmodulavbildningarna edgeAgent och edgeHub. 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",
       //...
    
  3. 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.

  1. Öppna distributionsmanifestfilen deployment.debug.template.json .

  2. Ändra körningsversionen för systemkörningsmodulavbildningarna edgeAgent och edgeHub. 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:

  1. Välj Verktyg Azure>IoT Edge-verktyg>IoT Edge-verktygsinställningar.

  2. 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.

    Skärmbild av inställningar för IoT Edge-verktyg

  3. 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:

  1. I Solution Explorer väljer du modulprojektmappen (till exempel myIotEdgeModule).

  2. Ange den anpassade modulen som startprojekt. Välj Project Set as StartUp Project (Projektuppsättning>som StartUp Project) på menyn.

  3. 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änder Dockerfile.(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.

  4. 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
    

    Skärmbild av PowerShell-kommandot för att skapa en SSH-nyckel.

  5. 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>
    
  1. 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.

  2. 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.

  3. 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 filen deployment.debug.template.json:

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. 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.

  5. Välj Visa>Cloud Explorer. Kontrollera att du är inloggad i Visual Studio 2019.

  6. I Cloud Explorer expanderar du din prenumeration och hittar sedan Azure IoT Hub och den Azure IoT Edge-enhet som du vill distribuera.

  7. 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 exempel deployment.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.

  1. Om du använder ett Azure-containerregister för att lagra modulavbildningen lägger du till deployment.debug.template.json dina autentiseringsuppgifter i edgeAgent 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"
              }
            }
          }
        },
    //...
    
  2. Ersätt egenskapsvärdet image med modulens avbildningsnamn som du skickade till registret. Om du till exempel push-överförde en bild taggad myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 för en anpassad modul IotEdgeModule1ersätter du värdet för bildegenskapen med taggvärdet.

  3. 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ör IotEdgeModule1 skulle till exempel image 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\"}]}}}"
    }
    
  4. 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-hubben my-iot-hub för IoT Edge-enheten my-deviceanvä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.

  5. 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

  1. Kör följande kommandon i en upphöjd PowerShell-session:

    1. 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>"
      
    2. Kontrollera att det $moduleId stämmer. Om variabeln är tom kontrollerar du att du använder rätt modulnamn.

    3. Starta SSH-tjänsten i Linux-containern:

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Ö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.

  2. När du har startat SSH-tjänsten väljer du Felsöka>Anslut till process, ställer in AnslutningstypSSH 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 steg
    Lösenfras Lösenfras som används för nyckeln som du skapade i ett tidigare steg
  3. 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.

  4. Ange en brytpunkt för att inspektera modulen:

    • Om du utvecklar i C# anger du en brytpunkt i PipeMessage() funktionen i ModuleBackgroundService.cs.
    • Om du använder C anger du en brytpunkt i InputQueue1Callback() funktionen i main.c.
  5. Utdata från SimulatedTemperatureSensor ska omdirigeras till input1 den anpassade Linux C#-modulen. Brytpunkten ska utlösas. Du kan titta på variabler i Visual Studio Locals-fönstret .

    Skärmbild av hur du felsöker en enskild modul.

  6. 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:

  1. Logga in på Azure-portalen och välj Resursgrupper.

  2. Välj namnet på resursgruppen som innehåller dina IoT Edge-testresurser.

  3. 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: