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őkre vonatkozik: IoT Edge 1.4 pipa IoT Edge 1.4

Fontos

Az IoT Edge 1.5 LTS és az IoT Edge 1.4 támogatott kiadások. Az IoT Edge 1.4 LTS 2024. november 12-én megszűnik. Ha egy korábbi kiadáson dolgozik, olvassa el az IoT Edge frissítése című témakört.

Ez az oktatóanyag végigvezeti a saját kód fejlesztésén, hibakeresésén és üzembe helyezésén egy IoT Edge-eszközön a Linuxhoz készült IoT Edge használatával Windows és Visual Studio 2022 rendszeren. 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 Linux-tárolóban futó egyéni Azure IoT Edge-modult fog üzembe helyezni és hibakeresést végezni Windowson (EFLOW). 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 a cikk két IoT Edge-fejlesztési eszköz lépéseit tartalmazza:

  • A parancssori felület (CLI) a fejlesztés előnyben részesített eszköze.
  • Azure IoT Edge-eszközök Visual Studio-bővítményhez . A bővítmény karbantartási módban van.

Az eszközverzió kiválasztásához használja a cikk elején található eszközválasztó gombot.

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

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

Előfeltételek

Ez a cikk 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 a Linux-tárolók fejlesztésén, a Windowson futó IoT Edge for Linux használatával a modulok létrehozásához és üzembe helyezéséhez.

A Visual Studio 2022 elkészülte után a következő eszközökre és összetevőkre is szüksége lesz:

  • Töltse le és telepítse az Azure IoT Edge-eszközöket a Visual Studio Marketplace-ről. Az Azure IoT Edge Tools bővítmény használatával létrehozhatja és létrehozhatja az IoT Edge-megoldást. Az előnyben részesített fejlesztési eszköz a parancssori (CLI) Azure IoT Edge fejlesztői eszköz. A bővítmény tartalmazza a Visual Studio-projekt létrehozásához használt Azure IoT Edge-projektsablonokat. Jelenleg telepítenie kell a bővítményt, függetlenül a használt fejlesztési eszköztől.

    Fontos

    Az Azure IoT Edge Tools for VS 2022 bővítmény karbantartási módban van. Az előnyben részesített fejlesztési eszköz a parancssori (CLI) Azure IoT Edge fejlesztői eszköz.

    Tipp.

    Ha Visual Studio 2019-et használ, töltse le és telepítse az Azure IoT Edge Tools for VS 2019-et a Visual Studio piactérről.

Felhőerőforrások:

  • Ingyenes vagy standard szintű IoT Hub az Azure-ban.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Fő fogalmak

Ez az oktatóanyag egy IoT Edge-modul fejlesztését mutatja be. Az IoT Edge-modul, vagy néha csak egy rövid 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, amely 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, az IoT Edge for Linux windowsos (EFLOW) virtuális gépet pedig 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.

Docker-cli és Docker-motor távoli kapcsolatának beállítása

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. Az EFLOW virtuális gép már tartalmaz egy Docker-motorpéldányt, így ez az oktatóanyag bemutatja, hogyan csatlakozhat távolról a Windows fejlesztői gépről az EFLOW virtuálisgép-Docker-példányhoz. Ezzel eltávolítjuk a WindowsHoz készült Docker Desktop függőségét.

Az első lépés a Docker-cli konfigurálása 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 docker-cli Chocolatey-ból. A hivatalos cli-projektet a docker/cli GitHubról is letöltheti, és az adattár utasításait követve fordíthatja le.
  2. Bontsa ki a docker.exe a fejlesztői gép egyik könyvtárába. Például: C:\Docker\bin
  3. Megnyitás a pc-ről –> Rendszerinformáció –> Speciális rendszerbeállítások
  4. Speciális környezeti> változók kiválasztása –> Felhasználói változók alatt ellenőrizze az elérési utat
  5. Az Elérési út változó szerkesztése és a docker.exe helyének hozzáadása
  6. Emelt szintű PowerShell-munkamenet megnyitása
  7. Ellenőrizze, hogy a Docker CLI elérhető-e a paranccsal
    docker --version
    

Ha minden sikeresen konfigurálva lett, az előző parancsnak a Docker 20.10.12-es verziójához hasonló docker-verziót kell kibocsátania, az e91ed57-es buildet.

A második lépés az EFLOW virtuális gép Docker-motorjának konfigurálása külső kapcsolatok elfogadására, és a megfelelő tűzfalszabályok hozzáadása.

Figyelmeztetés

Ha a Docker-motort külső kapcsolatoknak teszi ki, az növelheti a biztonsági kockázatokat. Ez a konfiguráció csak fejlesztési célokra használható. 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 EFLOW virtual machine 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 EFLOW 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 EFLOW 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"
    

    A következő példakimenet.

    PS C:\> # Configure the EFLOW 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 EFLOW 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 EFLOW 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
    
  2. Az utolsó lépés a Docker-kapcsolat tesztelése az EFLOW virtuális gép Docker-motorjához. Először is szüksége lesz az EFLOW virtuális gép IP-címére.

    Get-EflowVmAddr
    

    Tipp.

    Ha az EFLOW virtuális gép 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 a hálózat módosítása során. Győződjön meg arról, hogy a megfelelő EFLOW virtuálisgép-IP-címet használja minden alkalommal, amikor távoli Docker-motorkapcsolatot szeretne létesíteni.

    A következő 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 
    
  3. A kapott IP-cím használatával csatlakozzon az EFLOW VM Docker-motorhoz, és futtassa a Hello-World mintatárolót. Cserélje le <az EFLOW-VM-IP-címet> az előző lépésben beszerzett EFLOW virtuális gép IP-címére.

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

    Látnia kell, hogy a tároló letöltése folyamatban van, és a futtatás után a következőt fogja kihozni.

    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 are 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, amely üzembe helyezhető az IoT Edge-eszközökön. Először létrehoz egy Azure IoT Edge-megoldást, majd létrehozza az első modult ebben 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 a Visual Studio IoT Edge-bővítményt kell használnia.

  1. Hozzon létre egy új projektet a Visual Studióban.

  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, és 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 ablakban válassza ki a fejlesztendő 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. Adja meg a modul nevét és a modul rendszerkép-adattárát.

  5. 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ó úgy néz ki, mint a <beállításjegyzék neve.azurecr.io.> Csak a localhost:5000 sztringrészt cserélje le úgy, hogy a végeredmény úgy nézzen ki, mint <a beállításjegyzék neve.azurecr.io/<> your modul neve.>

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

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

    Feljegyzés

    Ha már rendelkezik IoT Edge-projekttel, módosíthatja az adattár URL-címét a module.json fájl megnyitásával. Az adattár URL-címe a JSON-fájl adattártulajdonsá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ásban két projektszintű mappa található, köztük egy fő projektmappa és egy modulmappa. Előfordulhat például, hogy rendelkezik egy AzureIotEdgeApp1 nevű fő projektmappával és egy IotEdgeModule1 nevű modulmappával. A fő projektmappa tartalmazza az üzembehelyezési jegyzékfájlt.

A modulmappa tartalmaz egy fájlt a modul kódjához, vagy Program.cs main.c a választott nyelvtől függően. 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 üzembehelyezési jegyzék sablonja, amely meghatározza az eszközön futó összes modult, valamint azt, hogy 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.

Ha megnyitja ezt az üzembehelyezési sablont, láthatja, hogy a két futtatókörnyezeti modul, az edgeAgent és az edgeHub is megtalálható a Visual Studio-projektben létrehozott egyéni modullal együtt. A modul egy negyedik, SimulatedTemperatureSensor nevű modult is tartalmaz. Ez az alapértelmezett modul szimulált adatokat hoz létre, amelyekkel tesztelheti a modulokat, vagy törölheti őket, 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.4. Frissítenie kell az IoT Edge futtatókörnyezet verzióját a legújabb stabil kiadásra, vagy az eszközök számára megcélzni kívánt verzióra.

  1. A Megoldáskezelő 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

  2. A legördülő menüben válassza ki az IoT Edge-eszközök futtató futtatókörnyezeti verzióját, majd kattintson az OK gombra a módosítások mentéséhez. Ha nem történt módosítás, a Kilépéshez válassza a Mégse lehetőséget.

    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 deployment.debug.template.json üzembehelyezési jegyzékfájlt. Módosítsa a futtatókörnyezet verzióját a rendszer futtatókörnyezeti moduljának lemezképeinek edgeAgent és edgeHub esetében. Ha például az IoT Edge-futtatókörnyezet 1.4-es 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.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. Ha módosította a verziót, a jobb gombbal a projekt nevére kattintva újragenerálja az üzembehelyezési jegyzékfájlt, és válassza az Üzembe helyezés létrehozása az IoT Edge-hez lehetőséget. Ez létrehoz egy üzembehelyezési jegyzékfájlt az üzembehelyezési sablon alapján, és megjelenik a Visual Studio-projekt konfigurációs mappájában.

  1. Nyissa meg deployment.debug.template.json ü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.

  2. Módosítsa a futtatókörnyezet verzióját a rendszer futtatókörnyezeti moduljának lemezképeinek edgeAgent és edgeHub esetében. Ha például az IoT Edge-futtatókörnyezet 1.4-es 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.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

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

Használja az Azure IoT Edge-eszközök bővítményét, és konfigurálja az EFLOW virtuális gépen futó távoli Docker-motor használatára.

  1. Eszközök –>Azure IoT Edge-eszközök –> IoT Edge-eszközök beállításai...

  2. Cserélje le a DOCKER_HOST localhost értéket az EFLOW virtuális gép IP-címére. Ha nem emlékszik az IP-címre, az EFLOW PowerShell-parancsmaggal Get-EflowVmAddr szerezheti be. Exmaple esetén, ha az EFLOW virtuális gép IP-címe 172.20.1.100, akkor 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. Kattintson az OK gombra

A modul fejlesztése

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

Az alapértelmezett megoldás úgy van létrehozva, hogy a SimulatedTemperatureSensor modul szimulált adatai a modulhoz lesznek irányítva, amely felveszi a bemenetet, majd elküldi azokat az IoT Hubnak.

Ha készen áll a modulsablon saját kóddal történő testreszabására, az Azure IoT Hub SDK-kkal további modulokat hozhat létre, amelyek kielégítik az IoT-megoldások alapvető igényeit, például 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égeznie kell, mielőtt egy több modult tartalmazó teljes megoldásban futtatja. Mivel a megoldás az EFLOW virtuális gépen futó Docker-motor használatával fog buildelést 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ő válassza ki és jelölje ki a modul projektmappáját (például myIotEdgeModule). Állítsa be az egyéni modult indítási projektként. Válassza a Projektkészlet>kezdőprojektként lehetőséget a menüből.

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

    Feljegyzés

    A Hibakeresés kiválasztásakor a Visual Studio Docker-rendszerképeket készítDockerfile.(amd64|windows-amd64).debug. Ez magában foglalja 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) kiadási konfigurációt használja.

    Figyelmeztetés

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

    Képernyőkép a Dockerfile-sablon beállításáról

  3. Ahhoz, hogy SSH-kapcsolatot létesítsünk a Linux modullal, létre kell hoznunk egy RSA-kulcsot. Nyisson meg egy emelt szintű PowerShell-munkamenetet, és futtassa az alábbi parancsokat egy új RSA-kulcs létrehozásához. Győződjön meg arról, hogy az RSA-kulcsot ugyanabban az IoT Edge-modulmappában menti, és a kulcs neve id_rsa.

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

    SSH-kulcs létrehozásának képernyőképe

  4. Ha olyan privát beállításjegyzéket használ, mint az Azure Container Registry (ACR), a következő 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 <ACR username> -p <ACR password> <ACR login server>
    
  1. A Megoldáskezelő kattintson a jobb gombbal a projektmappára, és válassza a Build and Push IoT Edge Modules (IoT Edge-modulok létrehozása és leküldése) lehetőséget az egyes modulok Docker-rendszerképének létrehozásához és leküldéséhez.

  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ényleges ACR-rendszergazdai felhasználónévre, jelszóra és beállításjegyzék-névre.

          "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. Az SSH-szolgáltatás eléréséhez 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, amely SSH-portként lesz használva a Linux C# modulhoz való csatlakozáshoz. Hozzá kell adnia az SSH-port adatait a fájlban deployment.debug.template.jsontalálható Linux-modulbeállítás "createOptions" eleméhez.

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. A Megoldáskezelő 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 üzembe helyezési json létrehozásához.

  5. Nyissa meg a Cloud Explorert a Cloud Explorer megtekintése parancsra>kattintva. Győződjön meg arról, hogy bejelentkezett a Visual Studio 2019-be.

  6. A Cloud Explorerben bontsa ki előfizetését, 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. Keresse meg a Visual Studio-megoldás konfigurációs mappájában, például deployment.amd64.jsona platformhoz konfigurált hibakeresési telepítési jegyzékfájlt.

Build modul Docker-rendszerképe

Miután kifejlesztette a modult, 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-rendszerké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 egy Azure-tárolóregisztrációs adatbázis rendszerképének létrehozásához használja az alábbi 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"

Leküldéses modul Docker-rendszerképe

Küldje el 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

Telepítse a modult az IoT Edge-eszközön.

A Visual Studióban nyissa meg deployment.debug.template.json központi telepítési jegyzékfájlt a fő projektben. 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. 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. A createOption-értékekkel kapcsolatos további információkért tekintse meg az IoT Edge-modulok tároló-létrehozási beállításainak konfigurálását ismertető témakört.

  1. Ha egy Azure Container Registryt használ a modul lemezképének tárolásához, a hitelesítő adatokat hozzá kell adnia deployment.debug.template.json az edgeAgent beállításaiban. Például:

    "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 rendszerképtulajdonság értékét a regisztrációs adatbázisba leküldött modulkép nevére. Ha például egy IotEdgeModule1 egyéni modulhoz címkézett myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 képet küld, 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 sztringezett tartalommal az üzembehelyezési sablon minden egyes rendszeréhez és egyéni moduljaihoz.

    Az IotEdgeModule1 rendszerképe és a createOptions beállításai például az alábbihoz 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\"}]}}}"
    }
    

Az IoT Edge Azure CLI set-modules parancsával üzembe helyezheti a modulokat az Azure IoT Hubon. Ha például a deployment.debug.amd64.json fájlban definiált modulokat az IoT Hub my-iot-hubra szeretné telepíteni az eszközöm IoT Edge-eszközéhez, 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 kapcsolati sztring az Azure Portalon, az Azure IoT Hub >biztonsági beállításainak>megosztott hozzáférési szabályzatai között találja.

  1. A Cloud Explorerben kattintson a jobb gombbal a peremeszközre, és frissítsen az új modul futtatásához $edgeAgent és $edgeHub modulokkal együtt.

A megoldás hibakeresése

  1. A PowerShell-munkamenet használata és emelt szintű használata az alábbi parancsokat futtatja

    1. Szerezze be a modulazonosítót a Linux C# modulhoz használt név alapján. Mindenképpen cserélje le az <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 a $moduleId helyes-e – 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óban

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Nyissa meg a modul SSH-portját az EFLOW 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 az EFLOW virtuális gép újraindul, az IP-táblaszabály törlődik, és visszatér az eredeti beállításokhoz. Emellett a modul SSH szolgáltatását manuálisan kell újra elindítani.

  2. Az SSH-szolgáltatás sikeres elindítása után válassza a Hibakeresés –>Csatolás a folyamathoz lehetőséget, állítsa be a kapcsolat típusát SSH-ra, a kapcsolati célt pedig az EFLOW virtuális gép IP-címére. Ha nem ismeri az EFLOW virtuális gép IP-címét, használhatja a Get-EflowVmAddr PowerShell-parancsmagot. Először írja be az IP-címet, majd nyomja le az Enter billentyűt. Az előugró ablakban adja meg a következő konfigurációkat:

    Mező Érték
    Állomásnév Az EFLOW virtuális gép IP-címének használata
    Port 10022 (Vagy az üzembe helyezési konfigurációban használt)
    Felhasználónév gyökér
    Hitelesítés típusa Titkos kulcs
    Titkos kulcsfájl Az előző lépésben létrehozott id_rsa teljes elérési útja
    Jelszó Az előző lépésben létrehozott kulcshoz használt jelszó

    Képernyőkép a távoli rendszerhez való csatlakozásról

  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 folyamat dotnetet és a Csatolás felügyelthez (CoreCLR) lehetőséget. Első alkalommal 10–20 másodpercig is eltarthat.

    Képernyőkép egy peremmodul-folyamat csatolásáról.

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

    • Ha C#-ban fejleszt, állítson be töréspontot a függvényben a PipeMessage() ModuleBackgroundService.cs.
    • C használata esetén állítson be egy töréspontot a InputQueue1Callback() main.c függvényben.
  5. A SimulatedTemperatureSensor kimenetét át kell irányítani az egyéni Linux C# modul 1. bemenetére. 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 nyomja le a Ctrl + F5 billentyűkombinációt, vagy válassza 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ölheti 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 egy meglévő erőforráscsoporton belül hozta létre az IoT Hubot, amelynek erőforrásait meg szeretné tartani, 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, és válassza az Erőforráscsoportok elemet.

  2. Válassza ki az IoT Edge teszterőforrásokat tartalmazó erőforráscsoport nevét.

  3. Tekintse át az erőforráscsoportban található erőforrások listáját. Ha mindet törölni szeretné, válassza az Erőforráscsoport törlése lehetőséget. Ha csak bizonyos elemeket szeretne törölni, az egyes erőforrásokra kattintva külön törölheti őket.

Következő lépések

Ebben az oktatóanyagban beállítja a Visual Studiót a fejlesztői gépen, és üzembe helyezi és hibakereséssel eltávolítja 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.