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
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.
Linux IoT Edge telepítése Windows rendszeren (EFLOW)
Rövid útmutató: Az első IoT Edge-modul üzembe helyezése Windows-eszközön
Telepítse vagy módosítsa a Visual Studio 2022-t a fejlesztői gépen. Válassza ki az Azure-fejlesztést és az asztali fejlesztést A C++ számítási feladatok beállításaival.
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.
- Telepítse az Azure CLI-t.
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.
- 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.
- Bontsa ki a docker.exe a fejlesztői gép egyik könyvtárába. Például: C:\Docker\bin
- Megnyitás a pc-ről –> Rendszerinformáció –> Speciális rendszerbeállítások
- Speciális környezeti> változók kiválasztása –> Felhasználói változók alatt ellenőrizze az elérési utat
- Az Elérési út változó szerkesztése és a docker.exe helyének hozzáadása
- Emelt szintű PowerShell-munkamenet megnyitása
- 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.
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
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
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.
Hozzon létre egy új projektet a Visual Studióban.
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.
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.
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.
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.>
Válassza a Hozzáadás lehetőséget a modul projekthez való hozzáadásához.
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.
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.
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", //...
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.
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.
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.
Eszközök –>Azure IoT Edge-eszközök –> IoT Edge-eszközök beállításai...
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.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.
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.
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ít
Dockerfile.(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áltDockerfile.(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.
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
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>
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.
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.json
talá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.
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.json
található Linux-modulbeállítás "createOptions" eleméhez."createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }
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.
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.
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.
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.json
a 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.
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" } } } }, //...
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.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.
- 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
A PowerShell-munkamenet használata és emelt szintű használata az alábbi parancsokat futtatja
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>"
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
Indítsa el az SSH szolgáltatást a Linux-tárolóban
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
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.
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ó 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.
Á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.
- Ha C#-ban fejleszt, állítson be töréspontot a függvényben a
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.
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:
Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.
Válassza ki az IoT Edge teszterőforrásokat tartalmazó erőforráscsoport nevét.
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.