Megosztás a következőn keresztül:


Oktatóanyag: IoT Edge-modulok fejlesztése Linux-tárolókkal a Linuxhoz készült IoT Edge használatával Windows rendszeren

A következőre vonatkozik:IoT Edge 1.5 IoT Edge 1.5

Fontos

Az IoT Edge 1.5 LTS a támogatott kiadás. Az IoT Edge 1.4 LTS 2024. november 12-én megszűnik. Ha egy korábbi kiadásban dolgozik, tekintse meg az IoT Edge frissítését.

Ez az oktatóanyag végigvezeti a saját kód fejlesztésén, hibakeresésén és üzembe helyezésén egy Azure IoT Edge-eszközön a Windowson és a Visual Studio 2022-n futó Linux IoT Edge használatával. Megismerheti az IoT Edge-megoldások leggyakoribb fejlesztői forgatókönyvét egy C#-modul Linux-eszközön való üzembe helyezésével. Egy Windowson futó Linux-tárolóban futó egyéni IoT Edge-modult fog üzembe helyezni és hibakeresésre használni. Ez az oktatóanyag akkor is hasznos, ha egy másik nyelvet szeretne használni, vagy üzembe helyez egy Azure-szolgáltatást, ez az oktatóanyag továbbra is hasznos a fejlesztési eszközök és fogalmak megismeréséhez.

Ez az oktatóanyag két IoT Edge-fejlesztési eszköz lépéseit tartalmazza:

  • Az Azure IoT Edge fejlesztői eszköz parancssori felülete (CLI), amely a fejlesztés előnyben részesített eszköze
  • A Visual Studio Azure IoT Edge Tools bővítménye, amely karbantartási módban van

Az oktatóanyag elején található választógombbal válassza ki az eszköz verzióját.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Állítsa be a fejlesztőgépet.
  • Új projekt létrehozásához használja az IoT Edge fejlesztői eszközeit.
  • Hozza létre a projektet tárolóként, és tárolja egy Azure Container Registryben.
  • Telepítse a kódot egy IoT Edge-eszközön.

Előfeltételek

Ez az oktatóanyag feltételezi, hogy egy Windows rendszert futtató gépet használ fejlesztési gépként. Windows rendszerű számítógépeken Windows- vagy Linux-modulokat is fejleszthet. Ez az oktatóanyag végigvezeti önt a Linux-tárolók fejlesztésén, az IoT Edge Linuxhoz Windows rendszeren használatával a modulok elkészítéséhez és telepítéséhez.

Előkészületek:

  • Hozzon létre egy ingyenes vagy standard szintű IoT Hubot az Azure-ban felhőerőforrásként.

Ha még nem rendelkezik Azure-fiókkal, első lépésként hozzon létre egy ingyenes fiókot.

Fő fogalmak

Ez az oktatóanyag egy IoT Edge-modul fejlesztését mutatja be. Az IoT Edge-modul végrehajtható kóddal rendelkező tároló. Egy vagy több modult üzembe helyezhet egy IoT Edge-eszközön. A modulok olyan konkrét feladatokat végeznek, mint például az adatok betöltése érzékelőkből, adatok tisztítása és elemzése, vagy üzenetek küldése egy IoT Hubba. További információ: Az Azure IoT Edge-modulok ismertetése.

Az IoT Edge-modulok fejlesztésekor fontos megérteni a fejlesztőgép és a cél IoT Edge-eszköz közötti különbséget, amelyben a modul végül üzembe lesz helyezve. A modulkód tárolására készített tárolónak meg kell egyeznie a céleszköz operációs rendszerével (OS).

A leggyakoribb forgatókönyv például az, hogy valaki egy modult fejleszt egy Windows-számítógépen, aki egy IoT Edge-et futtató Linux-eszközt kíván megcélozza. Ebben az esetben a tároló operációs rendszere Linux.

Az oktatóanyag során vegye figyelembe a fejlesztőgép operációs rendszere és a tároló operációs rendszere közötti különbséget. Ebben az oktatóanyagban a Windows-gazdagépet fogja használni a fejlesztéshez, a Linuxhoz készült IoT Edge-et pedig Windows rendszerű virtuális gépen (VM) a modulok létrehozásához és üzembe helyezéséhez.

Ez az oktatóanyag az IoT Edge-et Linux-tárolókkal futtató eszközöket célozza meg. Az előnyben részesített operációs rendszert mindaddig használhatja, amíg a fejlesztőgép Linux-tárolókat futtat. Azt javasoljuk, hogy a Visual Studio használatával dolgozzon Linux-tárolókkal, ezért ezt használja ez az oktatóanyag. Használhatja a Visual Studio Code-ot is, bár a két eszköz között különbségek vannak a támogatásban. További információ: Azure IoT Edge-modulok fejlesztése a Visual Studio Code használatával.

A Docker CLI és a Docker motor beállítása távoli kapcsolathoz

Az IoT Edge-modulok tárolókként vannak csomagolva, ezért a fejlesztési gépen tárolómotorra van szükség az összeállításukhoz és kezeléséhez.

A Windows rendszerű virtuális gépen futó Linux IoT Edge már tartalmazza a Docker-motor egy példányát. Ez az oktatóanyag bemutatja, hogyan csatlakozhat távolról a Windows fejlesztői gépről a Linux IoT Edge-hez Windows VM Docker-példányon. Ezzel a távoli kapcsolattal eltávolíthatja a WindowsHoz készült Docker Desktop függőségét.

A Docker parancssori felületének konfigurálása

Első lépésként konfigurálja a Docker parancssori felületét a Windows fejlesztői gépen, hogy csatlakozni tudjon a távoli Docker-motorhoz:

  1. Töltse le a Docker CLI előre összeállított docker.exe verzióját a Chocolateyból. A gitHubról is letöltheti a hivatalos cli-projektet, és lefordíthatja az adattár utasításait követve.

  2. Bontsa ki docker.exe a fejlesztői gép egyik könyvtárába, C:\Docker\binpéldául.

  3. Nyissa meg A számítógépéről>Rendszerinformációt>Speciális rendszerbeállításokat.

  4. Válassza a Speciális>környezeti változók lehetőséget. A Felhasználói változók csoportban válassza az Elérési út lehetőséget.

  5. Módosítsa az Elérési út változót, és adja hozzá a docker.exe helyét.

  6. Nyisson meg egy emelt szintű PowerShell-munkamenetet.

  7. Ellenőrizze, hogy a Docker parancssori felülete elérhető-e a következő paranccsal:

    docker --version
    

    Ha mindent sikeresen konfigurált, a parancs kimenetének meg kell jelennie a Docker-verziónak. Úgy kell kinéznie, mint Docker version 20.10.12, build e91ed57.

A Docker-motor konfigurálása

A második lépés a Linuxhoz készült IoT Edge konfigurálása Windows VM Docker-motoron a külső kapcsolatok elfogadásához és a megfelelő tűzfalszabályok hozzáadásához.

Figyelmeztetés

Ha a Docker-motort külső kapcsolatoknak teszi ki, az növelheti a biztonsági kockázatokat. Ezt a konfigurációt csak fejlesztési célokra érdemes használni. A fejlesztés befejezése után mindenképpen állítsa vissza a konfigurációt az alapértelmezett beállításokra.

  1. Nyisson meg egy emelt szintű PowerShell-munkamenetet, és futtassa a következő parancsokat:

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

    Íme egy példakimenet:

    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
    

A kapcsolat tesztelése

Az utolsó beállítási lépés a Docker-kapcsolat tesztelése a Linuxhoz készült IoT Edge-hez Windows VM Docker-motoron:

  1. Szerezze be a Linuxhoz készült IoT Edge IP-címét Windows rendszerű virtuális gépen:

    Get-EflowVmAddr
    

    Tipp.

    Ha a Windows rendszerű virtuális gépen futó Linux IoT Edge statikus IP-cím nélkül lett üzembe helyezve, az IP-cím megváltozhat a Windows gazdagép operációs rendszerének újraindítása vagy hálózati változásai között. Minden alkalommal, amikor távoli kapcsolatot szeretne létesíteni a Docker-motorral, győződjön meg arról, hogy a Megfelelő IP-címet használja a Linuxhoz készült IoT Edge-hez Windows rendszerű virtuális gépen.

    Íme egy példakimenet:

    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. Csatlakozzon a Linuxhoz készült IoT Edge-hez Windows VM Docker-motoron, és futtassa a mintatárolót hello-world . Cserélje le <EFLOW-VM-IP> a Linuxhoz készült IoT Edge-et az előző lépésben beszerzett Windows rendszerű virtuális gépek IP-címére.

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

    Amikor a tároló letöltése befejeződött, a tároló a következő kimenetet állítja elő:

    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/
    

Azure IoT Edge-projekt létrehozása

A Visual Studio IoT Edge-projektsablonja létrehoz egy megoldást, amelyet üzembe helyezhet az IoT Edge-eszközökön. Az alábbi lépésekkel hozzon létre egy Azure IoT Edge-megoldást, majd hozza létre az első modult a megoldásban. Minden IoT Edge-megoldás több modult is tartalmazhat.

Fontos

A Visual Studio által létrehozott IoT Edge-projektstruktúra nem ugyanaz, mint a Visual Studio Code-ban.

Az Azure IoT Edge fejlesztői eszköz parancssori felülete jelenleg nem támogatja a Visual Studio-projekttípus létrehozását. A Visual Studio-projekt létrehozásához az Azure IoT Edge Tools bővítményt kell használnia.

  1. A Visual Studióban hozzon létre egy új projektet úgy, hogy a kezdőlapon az Új projekt létrehozása lehetőséget választja, vagy az eszköztár Új projekt gombját választja.

  2. Az Új projekt létrehozása lapon keresse meg az Azure IoT Edge-et. Válassza ki az IoT Edge-eszköz platformjának (Linux IoT Edge-modul) és architektúrájának megfelelő projektet, majd válassza a Tovább lehetőséget.

  3. Az új projekt konfigurálása lapon adja meg a projekt nevét, és adja meg a helyet, majd válassza a Létrehozás lehetőséget.

  4. A Modul hozzáadása párbeszédpanelen válassza ki a fejleszteni kívánt modul típusát. A Meglévő modul kiválasztásával egy meglévő IoT Edge-modult is hozzáadhat az üzembe helyezéshez.

  5. A Modul neve mezőben adja meg a modul nevét.

  6. Az adattár URL-címében adja meg a modul képtárának nevét. A Visual Studio automatikusan feltölti a modul nevét a localhost:5000/<your modulnévvel>. Cserélje le a saját beállításjegyzék-adataira.

    Ha helyi Docker-beállításjegyzéket használ a teszteléshez, használja a localhostot . Ha az Azure Container Registryt használja, használja a bejelentkezési kiszolgálót a beállításjegyzék beállításai között. A bejelentkezési kiszolgáló formátum: <beállításjegyzék neve>.azurecr.io. Cserélje le csak a localhost:5000 sztringrészt, hogy a végeredmény úgy nézzen ki, mint <a registry name>.azurecr.io/<a modul neve>.

  7. Válassza a Hozzáadás lehetőséget a modul projekthez való hozzáadásához.

    Képernyőkép egy alkalmazás és modul Visual Studio-megoldáshoz való hozzáadásáról.

    Feljegyzés

    Ha már rendelkezik IoT Edge-projekttel, a fájl megnyitásával módosíthatja az module.json adattár URL-címét. Az adattár URL-címe a repository JSON-fájl tulajdonságában található.

Most már rendelkezik egy IoT Edge-projektel és egy IoT Edge-modullal a Visual Studio-megoldásban.

Projektstruktúra

A megoldás két projektszintű mappával rendelkezik: egy fő projektmappával és egy modulmappával. Előfordulhat például, hogy rendelkezik egy fő projektmappával AzureIotEdgeApp1 és egy modulmappával.IotEdgeModule1

A fő projektmappa tartalmazza az üzembehelyezési jegyzékfájlt. Az üzembehelyezési jegyzék egy JSON-dokumentum, amely leírja a célzott IoT Edge-eszközön konfigurálni kívánt modulokat.

A modulmappa tartalmaz egy fájlt a modul kódjához. A név vagy a választott nyelvtől függően van elnevezve Program.csmain.c. Ez a mappa egy olyan fájlt module.json is tartalmaz, amely leírja a modul metaadatait. A különböző Docker-fájlok biztosítják a modul Windows- vagy Linux-tárolóként való létrehozásához szükséges információkat.

A projekt üzembehelyezési jegyzékfájlja

A szerkesztett üzembehelyezési jegyzék neve deployment.debug.template.json. Ez a fájl egy IoT Edge-telepítési jegyzék sablonja, amely meghatározza az eszközön futó összes modult. A fájl azt is meghatározza, hogy a modulok hogyan kommunikálnak egymással. Az üzembehelyezési jegyzékekkel kapcsolatos további információkért lásd: Modulok üzembe helyezése és útvonalak létrehozása.

Az üzembehelyezési sablon a következőket tartalmazza:

  • A két futtatókörnyezeti modul és edgeAgentedgeHub.
  • A Visual Studio-projektben létrehozott egyéni modul.
  • Egy .SimulatedTemperatureSensor Ez az alapértelmezett modul szimulált adatokat hoz létre, amelyekkel tesztelheti a modulokat (vagy törölheti, ha nem szükséges). A szimulált hőmérséklet-érzékelő működésének megtekintéséhez tekintse meg a SimulatedTemperatureSensor.csproj forráskódot.

Az IoT Edge futtatókörnyezet verziójának beállítása

Jelenleg a legújabb stabil futtatókörnyezeti verzió az 1.5. Frissítse az IoT Edge futtatókörnyezeti verzióját a legújabb stabil kiadásra vagy az eszközökre megcélzni kívánt verzióra:

  1. A Megoldáskezelőben kattintson a jobb gombbal a fő projekt nevére, és válassza az IoT Edge-futtatókörnyezet verziójának beállítása lehetőséget.

    Képernyőkép az IoT Edge-futtatókörnyezet verziójának beállításáról.

  2. A legördülő menüben válassza ki az IoT Edge-eszközök futtató futtatókörnyezeti verzióját. Ezután kattintson az OK gombra a módosítások mentéséhez. Ha nem végzett módosításokat, kattintson a Mégse gombra.

    A bővítmény jelenleg nem tartalmaz kijelölést a legújabb futtatókörnyezeti verziókhoz. Ha 1.2-nél magasabb futtatókörnyezeti verziót szeretne beállítani, nyissa meg az deployment.debug.template.json üzembe helyezési jegyzékfájlt. Módosítsa a futtatókörnyezet verzióját a rendszer futtatókörnyezeti modul lemezképeinek edgeAgent és edgeHub. Ha például az IoT Edge-futtatókörnyezet 1.5-ös verzióját szeretné használni, módosítsa a következő sorokat az üzembehelyezési jegyzékfájlban:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.5"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
       //...
    
  3. Ha módosította a verziót, a jobb gombbal a projekt nevére kattintva és az IoT Edge-hez készült üzembe helyezés létrehozása lehetőség kiválasztásával hozza létre újra az üzembe helyezési jegyzékfájlt. Ez a lépés létrehoz egy üzembehelyezési jegyzékfájlt az üzembehelyezési sablon alapján. A jegyzék a Visual Studio-projekt mappájában config jelenik meg.

  1. Nyissa meg az deployment.debug.template.json üzembehelyezési jegyzékfájlt.

  2. Módosítsa a futtatókörnyezet verzióját a rendszer futtatókörnyezeti modul lemezképeinek edgeAgent és edgeHub. Ha például az IoT Edge-futtatókörnyezet 1.5-ös verzióját szeretné használni, módosítsa a következő sorokat az üzembehelyezési jegyzékfájlban:

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

A Visual Studio 2022 távoli Docker-motorpéldány beállítása

Konfigurálja az Azure IoT Edge Tools bővítményt a Linuxhoz készült IoT Edge-en futó távoli Docker-motor használatára Windows rendszerű virtuális gépen:

  1. Válassza az Eszközök>Azure IoT Edge eszközöket>IoT Edge eszközök beállításait.

  2. Cserélje le a DOCKER_HOST localhost értéket a Windows rendszerű virtuális gépen futó Linux IoT Edge IP-címére. Ha nem emlékszik az IP-címre, a Windows PowerShell-parancsmagon Get-EflowVmAddr a Linuxhoz készült IoT Edge használatával szerezheti be. Például, ha az IoT Edge for Linux on Windows virtuális gép IP-címe 172.20.1.100, az új értéknek tcp://172.20.1.100:2375 kell lennie.

    Képernyőkép az IoT Edge Tools beállításairól

  3. Válassza az OK gombot.

A modul fejlesztése

Amikor új modult ad hozzá, az alapértelmezett kóddal rendelkezik, amely készen áll az eszközre való használatra és üzembe helyezésre, hogy kód érintése nélkül megkezdhesse a tesztelést. A modul kódja a modul mappájában található egy (C#) vagy Program.cs (C esetén) nevű main.c fájlban.

Az alapértelmezett megoldásban a modul szimulált adatai a SimulatedTemperatureSensor modulhoz lesznek irányítva. A modul felveszi a bemenetet, majd elküldi az Azure IoT Hubnak.

Ha készen áll a modulsablon saját kóddal való testreszabására, az Azure IoT Hub SDK-kkal további modulokat hozhat létre, amelyek kielégítik az IoT-megoldások kulcsigényét. Ezek az igények magukban foglalhatják a biztonságot, az eszközkezelést és a megbízhatóságot.

Egyetlen modul létrehozása és leküldése

Általában minden modult tesztelni és hibakeresést végezni, mielőtt több modult tartalmazó teljes megoldásban futtatja. Mivel a megoldás windowsos virtuális gépen az IoT Edge for Linux rendszeren futó Docker-motor használatával fog létrehozni vagy hibakeresést végezni, az első lépés a modul létrehozása és közzététele a távoli hibakeresés engedélyezéséhez:

  1. A Megoldáskezelőben válassza ki a modul projektmappáját (például myIotEdgeModule).

  2. Állítsa be az egyéni modult indítási projektként. A menüben válassza a Projekt>Beállítás kezdőprojektként.

  3. A C# Linux modul hibakereséséhez frissítenie kell a fájlt az Dockerfile.amd64.debug SSH szolgáltatás engedélyezéséhez. Frissítse a fájlt a Dockerfile.amd64.debug következő sablon használatára: Dockerfile for Azure IoT Edge AMD64 C# modul távoli hibakeresési támogatással.

    Feljegyzés

    Ha a Hibakeresés lehetőséget választja, a Visual Studio Docker-rendszerképek készítésére használja Dockerfile.(amd64|windows-amd64).debug . Ez a fájl tartalmazza a .NET Core parancssori hibakereső VSDBG-t a tárolórendszerképben az összeállítás során. Az éles üzemre kész IoT Edge-modulok esetében javasoljuk, hogy a VSDBG nélkül használt Dockerfile.(amd64|windows-amd64) konfigurációt használja.

    Győződjön meg arról, ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]hogy a sablon utolsó sorában a DLL neve megegyezik az IoT Edge-modulprojekt nevével.

  4. Ha SSH-kapcsolatot szeretne létesíteni a Linux-modullal, létre kell hoznia egy RSA-kulcsot. Nyisson meg egy emelt szintű PowerShell-munkamenetet, és futtassa az alábbi parancsokat egy új RSA-kulcs létrehozásához. Mentse az RSA-kulcsot ugyanabban az IoT Edge-modulmappában, és győződjön meg arról, hogy a kulcs neve .id_rsa

    ssh-keygen -t RSA -b 4096 -m PEM
    

    Képernyőkép az SSH-kulcs létrehozásához használandó PowerShell-parancsról.

  5. Ha magánregisztrációs adatbázist használ, például az Azure Container Registryt, az alábbi Docker-paranccsal jelentkezzen be. A felhasználónevet és a jelszót a beállításjegyzék Hozzáférési kulcsok lapján szerezheti be az Azure Portalon. Ha helyi beállításjegyzéket használ, futtathat egy helyi beállításjegyzéket.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
    
  1. A Megoldáskezelőben kattintson a jobb gombbal a projektmappára, és válassza az IoT Edge-modulok összeállítása és leküldése lehetőséget. Ez a parancs minden modulhoz létrehozza és leküldi a Docker-rendszerképet.

  2. Ha magánregisztrációs adatbázist használ, például az Azure Container Registryt, hozzá kell adnia a beállításjegyzék bejelentkezési adatait a fájlban deployment.template.jsontalálható futtatókörnyezeti beállításokhoz. Cserélje le a helyőrzőket a tárolóregisztrációs adatbázis tényleges rendszergazdai felhasználónevére, jelszavára és beállításjegyzék-nevére.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Feljegyzés

    Ez a cikk rendszergazdai bejelentkezési hitelesítő adatokat használ az Azure Container Registryhez, amelyek fejlesztési és tesztelési forgatókönyvek esetén kényelmesek. Ha készen áll az éles helyzetekre, javasoljuk a minimális jogosultságú hitelesítési lehetőséget, például a szolgáltatásnevek használatát. További információ: A tárolóregisztrációs adatbázishoz való hozzáférés kezelése.

  3. A modul SSH-szolgáltatásához való hozzáféréshez el kellérhetővé tenni a 22-s portot. Ez az oktatóanyag 10022-et használ gazdaportként, de megadhat egy másik portot. A megadott port SSH-portként lesz használva a Linux C# modulhoz való csatlakozáshoz. Ehhez a Linux-modulbeállításhoz createOptions hozzá kell adnia az SSH-port adatait a fájlban deployment.debug.template.json:

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. A Megoldáskezelőben kattintson a jobb gombbal a projektmappára, és válassza az Üzembe helyezés létrehozása az IoT Edge-hez lehetőséget az új IoT Edge üzembehelyezési JSON létrehozásához.

  5. Válassza aCloud Explorer>. Győződjön meg arról, hogy bejelentkezett a Visual Studio 2019-be.

  6. A Cloud Explorerben bontsa ki előfizetését, majd keresse meg az Azure IoT Hubot és az üzembe helyezni kívánt Azure IoT Edge-eszközt.

  7. Kattintson a jobb gombbal az IoT Edge-eszközre, és válassza az Üzembe helyezés létrehozása lehetőséget. Nyissa meg a platformhoz konfigurált hibakeresési üzembehelyezési jegyzékfájlt. Ez a config Visual Studio-megoldás mappájában található, például deployment.amd64.json.

A modul Docker-rendszerképének létrehozása

A modul fejlesztése után létrehozhatja a modul rendszerképét egy tárolóregisztrációs adatbázisban az IoT Edge-eszközön való üzembe helyezéshez.

A modul Docker-lemezképének létrehozásához használja a modul Docker-fájlját:

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

Tegyük fel például, hogy a parancshéj a projektkönyvtárban van, a modul neve pedig .IotEdgeModule1 A helyi beállításjegyzék vagy az Azure Container Registry rendszerképének létrehozásához használja a következő parancsokat:

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

A modul Docker-lemezképének leküldése

Küldje le a modul rendszerképét a helyi beállításjegyzékbe vagy egy tárolóregisztrációs adatbázisba:

docker push <ImageName>

Példa:

# 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

A modul üzembe helyezése az IoT Edge-eszközön

A Visual Studióban nyissa meg az deployment.debug.template.json üzembehelyezési jegyzékfájlt a főprojektben.

Az üzembe helyezés előtt frissítenie kell az Azure Container Registry hitelesítő adatait, a modul lemezképeit és a megfelelő createOptions értékeket. Az értékekről createOption további információt az IoT Edge-modulok tároló-létrehozási beállításainak konfigurálása című témakörben talál.

  1. Ha egy Azure Container Registry használatával tárolja a modul rendszerképét, adja hozzá a hitelesítő adatait a deployment.debug.template.json beállításokhozedgeAgent. Példa:

    "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. Cserélje le a image tulajdonság értékét a regisztrációs adatbázisba leküldött modulrendszerkép nevére. Ha például egy egyéni modulhoz myacr.azurecr.io/iotedgemodule1:0.0.1-amd64címkézett IotEdgeModule1 képet küld le, cserélje le a képtulajdonság értékét a címkeértékre.

  3. Adja hozzá vagy cserélje le a createOptions értéket szövegesített tartalommal az üzembehelyezési sablon minden egyes rendszer- és egyéni moduljához.

    A beállítások és image a createOptions beállítások IotEdgeModule1 például az alábbi példához hasonlóak lehetnek:

    "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. Az IoT Edge Azure CLI set-modules parancsával üzembe helyezheti a modulokat az Azure IoT Hubon. Ha például a fájlban deployment.debug.amd64.json definiált modulokat az IoT Edge-eszköz my-iot-hubIoT Hubjában my-device szeretné üzembe helyezni, használja a következő parancsot:

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

    Tipp.

    Az IoT Hub connection string az Azure Portalon, az Azure IoT Hub>biztonsági beállításai>megosztott hozzáférési szabályzatok alatt található.

  5. A Cloud Explorerben kattintson a jobb gombbal a peremeszközre, és frissítsen annak ellenőrzéséhez, hogy az új modul fut-e azokkal és $edgeAgent a $edgeHub modulokkal együtt.

A megoldás hibakeresése

  1. Egy emelt szintű PowerShell-munkamenetben futtassa a következő parancsokat:

    1. Kérje le az moduleId értéket a Linux C# modul neve alapján. Cserélje le a <iot-edge-module-name> helyőrzőt a modul nevére.

      $moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
      
    2. Ellenőrizze, hogy helyes-e $moduleId . Ha a változó üres, győződjön meg arról, hogy a megfelelő modulnevet használja.

    3. Indítsa el az SSH szolgáltatást a Linux-tárolón belül:

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Nyissa meg a modul SSH-portját a Linuxhoz készült IoT Edge-en Windows rendszerű virtuális gépen. (Ez az oktatóanyag az 10022-s portot használja.)

      Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
      

    Figyelmeztetés

    Biztonsági okokból minden alkalommal, amikor a Windows rendszerű virtuális gépen futó Linux IoT Edge újraindul, a rendszer törli az IP-táblaszabályt, és visszatér az eredeti beállításokhoz. Emellett manuálisan is el kell indítania a modul SSH-szolgáltatását.

  2. Az SSH szolgáltatás sikeres elindítása után válassza a Debug>Attach to Process(Csatolás a folyamathoz) lehetőséget, állítsa be a kapcsolat típusátSSH-ra, és állítsa be a kapcsolati célt a Linuxhoz készült IoT Edge IP-címére Windows rendszerű virtuális gépen. Ha nem ismeri a Linuxhoz készült IoT Edge IP-címét Windows rendszerű virtuális gépen, használhatja a Get-EflowVmAddr PowerShell-parancsmagot.

    Írja be az IP-címet, majd válassza az Enter billentyűt. Az előugró ablakban adja meg a következő konfigurációkat:

    Mező Érték
    Állomásnév A Linuxhoz készült IoT Edge IP-címe Windows rendszerű virtuális gépen
    Kikötő 10022 (vagy az üzembe helyezési konfigurációban használt)
    Felhasználónév gyökér
    Hitelesítési típus Titkos kulcs
    Titkos kulcsfájl Az előző lépésben létrehozott érték teljes elérési útja id_rsa
    Jelszó Az előző lépésben létrehozott kulcshoz használt jelszó
  3. Miután sikeresen csatlakozott a modulhoz az SSH használatával, kiválaszthatja a folyamatot, és kiválaszthatja a Csatolás lehetőséget. A C# modulhoz ki kell választania a dotnet folyamatot és a Csatolás opciót a Felügyelt (CoreCLR)-hez. Első alkalommal 10–20 másodpercig is eltarthat.

  4. Állítson be egy töréspontot a modul vizsgálatához:

    • Ha C#-ban fejleszt, állítson be egy töréspontot a függvényben a PipeMessage() következőben ModuleBackgroundService.cs: .
    • Ha C-t használ, állítson be egy töréspontot a függvényben a InputQueue1Callback() következőben main.c: .
  5. A kimenetet SimulatedTemperatureSensor az egyéni Linux C# modulhoz kell átirányítani input1 . A töréspontot aktiválni kell. A változókat a Visual Studio Helyiek ablakában tekintheti meg.

    Képernyőkép egyetlen modul hibakereséséről.

  6. A hibakeresés leállításához válassza a Ctrl+F5 billentyűkombinációt vagy a Leállítás gombot.

Az erőforrások eltávolítása

Ha azt tervezi, hogy a következő ajánlott cikkel folytatja, megtarthatja és újból felhasználhatja a létrehozott erőforrásokat és konfigurációkat. Azt is megteheti, hogy ugyanezt az IoT Edge-eszközt használja teszteszközként.

Ellenkező esetben törölje a cikkben használt helyi konfigurációkat és Azure-erőforrásokat a díjak elkerülése érdekében.

Azure-erőforrások törlése

Az Azure-erőforrások és -erőforráscsoportok törlése visszafordíthatatlan. Figyeljen, nehogy véletlenül rossz erőforráscsoportot vagy erőforrásokat töröljön. Ha az IoT Hubot egy meglévő erőforráscsoporton belül hozta létre, amelyben meg szeretné tartani az erőforrásokat, csak magát az IoT Hub-erőforrást törölje, nem pedig az erőforráscsoportot.

Az erőforrások törlése:

  1. Jelentkezzen be az Azure Portalra, majd válassza ki az Erőforráscsoportokat.
  2. Válassza ki az IoT Edge teszterőforrásokat tartalmazó erőforráscsoport nevét.
  3. Tekintse át az erőforráscsoport által tartalmazott erőforrások listáját. Ha az összeset törölni szeretné, válassza az Erőforráscsoport törlése lehetőséget. Ha csak néhányat szeretne törölni, az egyes erőforrásokat egyenként is törölheti.

Következő lépés

Ebben az oktatóanyagban beállítja a Visual Studio-t a fejlesztői gépen, és üzembe helyezte és hibakereséssel telepítette az első IoT Edge-modult. Most, hogy megismerte az alapfogalmakat, próbáljon meg funkciókat hozzáadni egy modulhoz, hogy elemezhesse a rajta áthaladó adatokat: