Share via


Zelfstudie: IoT Edge-modules ontwikkelen met Linux-containers met behulp van IoT Edge voor Linux in Windows

Van toepassing op: Vinkje voor IoT Edge 1.4 IoT Edge 1.4

Belangrijk

Azure IoT Edge 1.5 LTS en IoT Edge 1.4 worden ondersteund. IoT Edge 1.4 LTS bereikt het einde van de service op 12 november 2024. Raadpleeg IoT Edge bijwerkenals u een eerdere release gebruikt.

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 in Windows en Visual Studio 2022. U leert het meest voorkomende ontwikkelaarsscenario voor IoT Edge-oplossingen door een C#-module te implementeren op een Linux-apparaat. U implementeert en debugt een aangepaste IoT Edge-module die wordt uitgevoerd in een Linux-container in 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 CLI-opdrachtregelinterface (CLI) van azure IoT Edge Dev Tool, het hulpprogramma voor ontwikkeling
  • De Azure IoT Edge Tools-extensie voor Visual Studio, die zich in de onderhoudsmodus 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.
  • Uw project bouwen als een container en het opslaan in een Azure-containerregister.
  • Uw code implementeren op een IoT Edge-apparaat.

Vereisten

In deze zelfstudie wordt ervan uitgegaan dat u een computer met Windows gebruikt 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 in Windows voor het bouwen en implementeren van de modules.

Voordat u begint:

  • Installeer IoT Edge voor Linux in Windows.

  • Lees de quickstart Uw eerste IoT Edge-module implementeren 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++ -workloadopties.

  • Nadat de installatie van Visual Studio 2022 gereed is, downloadt en installeert u Azure IoT Edge Tools vanuit Visual Studio Marketplace.

    U kunt de Azure IoT Edge Tools-extensie gebruiken om uw IoT Edge-oplossing te maken en te bouwen. Het favoriete ontwikkelhulpprogramma 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.

    Tip

    Als u Visual Studio 2019 gebruikt, downloadt en installeert u Azure IoT Edge Tools voor Visual Studio 2019 vanuit Visual Studio Marketplace.

  • Maak een gratis Of Standard-laag IoT-hub in Azure als een cloudresource.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken 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 Informatie over 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 ioT Edge-doelapparaat waar de module uiteindelijk wordt geïmplementeerd. De container die u voor de modulecode bouwt, moet overeenkomen met het besturingssysteem van het doelapparaat.

Het meest voorkomende scenario is bijvoorbeeld iemand die een module ontwikkelt op een Windows-computer die zich richt op een Linux-apparaat waarop IoT Edge wordt uitgevoerd. 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 ioT Edge voor Linux op virtuele Windows-machines (VM) voor het bouwen en implementeren van de modules.

Deze zelfstudie is gericht op apparaten waarop IoT Edge wordt uitgevoerd met Linux-containers. 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 Azure IoT Edge-modules ontwikkelen met Visual Studio Code voor meer informatie.

De Docker CLI en Docker-engine instellen voor externe verbinding

IoT Edge-modules worden verpakt als container. U hebt dus een container-engine op uw ontwikkelcomputer nodig om modules 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 extern verbinding kunt maken vanaf de Windows-ontwikkelaarscomputer met ioT Edge voor Linux op een Docker-exemplaar van Windows-VM. 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:

  1. Download de vooraf gecompileerde docker.exe versie van de Docker CLI van Chocolatey. U kunt ook het officiële CLI-project downloaden van GitHub en het compileren door de instructies voor de opslagplaats te volgen.

  2. Pak docker.exe uit naar een map op uw ontwikkelcomputer, bijvoorbeeld C:\Docker\bin.

  3. Open About your PC>System Info>Advanced system settings.

  4. Selecteer Geavanceerde>omgevingsvariabelen. Selecteer Pad onder Gebruikersvariabelen.

  5. Bewerk de padvariabele en voeg de locatie van docker.exe.

  6. Open een PowerShell-sessie met verhoogde bevoegdheid.

  7. Controleer of de Docker CLI toegankelijk is met behulp van deze opdracht:

    docker --version
    

    Als 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 bestaat uit 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.

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

  1. Haal het IP-adres van ioT Edge voor Linux op windows-VM op:

    Get-EflowVmAddr
    

    Tip

    Als de IoT Edge voor Linux op Windows-VM is geïmplementeerd zonder een statisch IP-adres, kan het IP-adres veranderen tussen het opnieuw opstarten van het Windows-hostbesturingssystem of netwerkwijzigingen. Zorg ervoor dat u het juiste IP-adres voor de IoT Edge voor Linux op Windows-VM gebruikt 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.105 
    
  2. Maak verbinding met de IoT Edge voor Linux op de Docker-engine voor Windows-VM's en voer de hello-world voorbeeldcontainer uit. Vervang <EFLOW-VM-IP> door het IP-adres van IoT Edge voor Linux op windows-VM's dat u in de vorige stap hebt verkregen.

    docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
    

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

Momenteel biedt de Azure IoT Edge Dev Tool CLI geen ondersteuning voor het maken van het Visual Studio-projecttype. U moet de Azure IoT Edge Tools-extensie gebruiken om het Visual Studio-project te maken.

  1. Maak in Visual Studio een nieuw project door een nieuw project te selecteren op de startpagina of door de knop Nieuw project op de werkbalk te selecteren.

  2. Zoek op de pagina Een nieuw project maken 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 Volgende.

  3. Voer op de pagina Uw nieuwe project configureren een naam in voor uw project en geef de locatie op en selecteer Vervolgens Maken.

  4. Selecteer in het dialoogvenster Module toevoegen het type module dat u wilt ontwikkelen. U kunt ook bestaande module selecteren om een bestaande IoT Edge-module toe te voegen aan uw implementatie.

  5. Geef in Modulenaam de naam van de module op.

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

  7. Selecteer Toevoegen om uw module toe te voegen aan het project.

    Schermopname van selecties voor het toevoegen van een toepassing en module aan een Visual Studio-oplossing.

    Notitie

    Als u een bestaand IoT Edge-project hebt, kunt u de URL van de opslagplaats wijzigen door het module.json bestand te openen. De URL van de opslagplaats bevindt zich in de repository eigenschap 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 beoogde IoT Edge-apparaat.

De modulemap bevat een bestand voor uw modulecode. Deze heeft de naam of Program.cs 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. Zie Meer informatie over het implementeren van modules en het tot stand brengen van routes voor meer informatie over implementatiemanifesten.

De implementatiesjabloon bevat:

  • De twee runtimemodules en edgeAgent edgeHub.
  • 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). Bekijk de broncode SimulatedTemperatureSensor.csproj om te zien hoe de gesimuleerde temperatuursensor werkt.

De Runtime-versie van IoT Edge instellen

Momenteel is de nieuwste stabiele runtimeversie 1.4. Werk de Runtime-versie van IoT Edge bij naar de meest recente stabiele release of de versie waarop u zich wilt richten voor uw apparaten:

  1. Klik in Solution Explorer met de rechtermuisknop op de naam van uw hoofdproject en selecteer IoT Edge-runtimeversie instellen.

    Schermopname van selecties voor het instellen van een IoT Edge-runtimeversie.

  2. Gebruik de vervolgkeuzelijst om de runtimeversie te kiezen waarop uw IoT Edge-apparaten worden uitgevoerd. 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.json implementatie. Wijzig de runtimeversie voor de installatiekopieën edgeAgent van de systeemruntimemodule en edgeHub. Als u bijvoorbeeld de IoT Edge-runtimeversie 1.4 wilt gebruiken, wijzigt u de volgende regels in het distributiemanifestbestand:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. 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 genereren voor IoT Edge te selecteren. Met deze stap wordt een implementatiemanifest gegenereerd op basis van uw implementatiesjabloon. Het manifest wordt weergegeven in de config map van uw Visual Studio-project.

  1. Open het manifestbestand voor de deployment.debug.template.json implementatie.

  2. Wijzig de runtimeversie voor de installatiekopieën edgeAgent van de systeemruntimemodule en edgeHub. Als u bijvoorbeeld IoT Edge-runtimeversie 1.4 wilt gebruiken, wijzigt u de volgende regels in het distributiemanifestbestand:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

Het externe Docker-engineexemplaren van Visual Studio 2022 instellen

Configureer de Azure IoT Edge Tools-extensie voor het gebruik van de externe Docker-engine die wordt uitgevoerd in IoT Edge voor Linux op windows-VM:

  1. Selecteer Hulpprogramma's voor>Azure IoT Edge-hulpprogramma's voor IoT Edge-hulpprogramma's.>

  2. Vervang de DOCKER_HOST localhost-waarde door het IP-adres voor de IoT Edge voor Linux op windows-VM. Als u het IP-adres niet meer weet, gebruikt u de Cmdlet IoT Edge voor Linux in Windows PowerShell Get-EflowVmAddr om het te verkrijgen. Als het IP-adres voor IoT Edge voor Linux op windows-VM bijvoorbeeld 172.20.1.100 is, moet de nieuwe waarde tcp://172.20.1.100:2375 zijn.

    Schermopname van ioT Edge Tools-instellingen

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

  1. Selecteer in Solution Explorer de projectmap van de module (bijvoorbeeld myIotEdgeModule).

  2. Stel de aangepaste module in als het opstartproject. Selecteer projectset>als opstartproject in het menu.

  3. Als u fouten wilt opsporen in de C#Linux-module, moet u het Dockerfile.amd64.debug bestand bijwerken om de SSH-service in te schakelen. Werk het Dockerfile.amd64.debug bestand bij om de volgende sjabloon te gebruiken: Dockerfile voor Azure IoT Edge AMD64 C#-module met ondersteuning voor externe foutopsporing.

    Notitie

    Wanneer u Fouten opsporen selecteert, gebruikt Dockerfile.(amd64|windows-amd64).debug Visual Studio om Docker-installatiekopieën te bouwen. Dit bestand bevat het .NET Core-opdrachtregeldebugger VSDBG in uw containerinstallatiekopie tijdens het bouwen ervan. Voor IoT Edge-modules die gereed zijn voor productie, raden we u aan de releaseconfiguratie te gebruiken, die zonder VSDBG wordt gebruikt Dockerfile.(amd64|windows-amd64) .

    Zorg ervoor dat de naam van het DLL-bestand in de laatste regel van de sjabloon ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]overeenkomt met de naam van uw IoT Edge-moduleproject.

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

    Schermopname van de PowerShell-opdracht om een SSH-sleutel te maken.

  5. 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 Toegangssleutels van uw register in 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>
    
  1. Klik in Solution Explorer met de rechtermuisknop op de projectmap en selecteer Build and Push IoT Edge Modules. Met deze opdracht wordt de Docker-installatiekopieën voor elke module gebouwd en gepusht.

  2. 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, wordt u aangeraden een optie voor verificatie met minimale bevoegdheden, zoals service-principals. Zie Toegang tot uw containerregister beheren voor meer informatie.

  3. 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 createOptions deze Linux-module-instelling in het bestand deployment.debug.template.json:

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. Klik in Solution Explorer met de rechtermuisknop op de projectmap en selecteer Implementatie genereren voor IoT Edge om de nieuwe JSON voor IoT Edge-implementatie te bouwen.

  5. Selecteer View>Cloud Explorer. Zorg ervoor dat u bent aangemeld bij Visual Studio 2019.

  6. Vouw in Cloud Explorer uw abonnement uit en zoek vervolgens Azure IoT Hub en het Azure IoT Edge-apparaat dat u wilt implementeren.

  7. 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 config map in uw Visual Studio-oplossing, zoals deployment.amd64.json.

Docker-installatiekopieën van de module bouwen

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 de opdrachtshell zich in de projectmap bevindt en dat de modulenaam .IotEdgeModule1 Gebruik de volgende opdrachten om de installatiekopieën voor het lokale register of een Azure-containerregister te maken:

# 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"

Docker-installatiekopieën van de module pushen

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 deployment.debug.template.json distributiemanifestbestand in het hoofdproject.

Voordat u gaat implementeren, moet u uw Azure Container Registry-referenties, uw moduleinstallatiekopieën en de juiste createOptions waarden bijwerken. Zie Opties voor het maken van containers configureren voor IoT Edge-modules voor meer informatie over createOption waarden.

  1. Als u een Azure-containerregister gebruikt om uw moduleinstallatiekopieën op te slaan, voegt u uw referenties toe aan deployment.debug.template.json de edgeAgent 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"
              }
            }
          }
        },
    //...
    
  2. Vervang de image eigenschapswaarde door de naam van de module-installatiekopieën die u naar het register hebt gepusht. Als u bijvoorbeeld een afbeelding hebt gepusht die is getagd myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 voor een aangepaste module IotEdgeModule1, vervangt u de waarde van de afbeeldingseigenschap door de tagwaarde.

  3. Voeg de waarde toe of vervang deze createOptions door tekenreeksinhoud voor elk systeem en elke aangepaste module in de implementatiesjabloon.

    De instellingen voor en createOptions instellingen zijn IotEdgeModule1 bijvoorbeeld image vergelijkbaar 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\"}]}}}"
    }
    
  4. Gebruik de opdracht Azure CLI-setmodules voor IoT Edge om de modules te implementeren in de Azure IoT-hub. Als u bijvoorbeeld de modules wilt implementeren die in het deployment.debug.amd64.json bestand zijn gedefinieerd in de IoT Hub my-iot-hub voor het IoT Edge-apparaat my-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>"
    

    Tip

    U vindt uw IoT Hub-verbindingsreeks in Azure Portal onder Gedeeld toegangsbeleid voor Gedeelde toegangsinstellingen> van Azure IoT Hub.>

  5. Klik in Cloud Explorer met de rechtermuisknop op uw edge-apparaat en vernieuw deze om te bevestigen dat de nieuwe module wordt uitgevoerd, samen met de $edgeAgent modules.$edgeHub

Fouten opsporen in de oplossing

  1. Voer in een PowerShell-sessie met verhoogde bevoegdheid de volgende opdrachten uit:

    1. Haal de moduleId waarde 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>"
      
    2. Controleer of dat $moduleId juist is. Als de variabele leeg is, controleert u of u de juiste modulenaam gebruikt.

    3. Start de SSH-service in de Linux-container:

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Open de SSH-poort van de module in 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 telkens wanneer de IoT Edge voor Linux op windows-VM opnieuw wordt opgestart en teruggaat naar de oorspronkelijke instellingen. U moet ook de SSH-service van de module handmatig opnieuw starten.

  2. Nadat u de SSH-service hebt gestart, selecteert u Foutopsporing>koppelen aan proces, stelt u het verbindingstype in op SSH en stelt u het verbindingsdoel 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 op Windows-VM niet weet, kunt u de Get-EflowVmAddr PowerShell-cmdlet 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 IoT Edge voor Linux op Windows-VM
    Poort 10022 (of degene die u hebt gebruikt in uw implementatieconfiguratie)
    Gebruikersnaam wortel
    Verificatietype Persoonlijke sleutel
    Bestand met persoonlijke sleutel Volledig pad naar de id_rsa waarde die u in een vorige stap hebt gemaakt
    Wachtwoordzin Wachtwoordzin die wordt gebruikt voor de sleutel die u in een vorige stap hebt gemaakt
  3. 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 proces dotnet kiezen en koppelen aan Beheerd (CoreCLR). Het kan de eerste keer 10 tot 20 seconden duren.

  4. Stel een onderbrekingspunt in om de module te controleren:

    • Als u in C# ontwikkelt, stelt u een onderbrekingspunt in de PipeMessage() functie in ModuleBackgroundService.cs.
    • Als u C gebruikt, stelt u een onderbrekingspunt in de InputQueue1Callback() functie in main.c.
  5. De uitvoer van SimulatedTemperatureSensor moet worden omgeleid naar input1 de aangepaste Linux C#-module. Het onderbrekingspunt moet worden geactiveerd. U kunt variabelen bekijken in het visual Studio Locals-venster .

    Schermopname van het opsporen van fouten in één module.

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

Het verwijderen van de Azure-resources en resourcegroepen kan niet ongedaan worden gemaakt. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de IoT-hub in een bestaande resourcegroep hebt gemaakt met de resources die u wilt behouden, moet u alleen de IoT-hub zelf verwijderen en niet de resourcegroep.

Om de resources te verwijderen:

  1. Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.

  2. Selecteer de naam van de resourcegroep die uw IoT Edge-testresources bevat.

  3. 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, kunt u elke resource selecteren om ze afzonderlijk te verwijderen.

Volgende stap

In deze zelfstudie stelt u Visual Studio in op uw ontwikkelcomputer en hebt u 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: