Kurz: Vývoj modulů IoT Edge s linuxovými kontejnery pomocí IoT Edge pro Linux ve Windows

Platí pro:Značka zaškrtnutí IoT Edge 1.4 IoT Edge 1.4

Důležité

Podporované verze ioT Edge 1.5 LTS a IoT Edge 1.4. IoT Edge 1.4 LTS je konec životnosti 12. listopadu 2024. Pokud používáte starší verzi, podívejte se na článek Aktualizace IoT Edge.

Tento kurz vás provede vývojem, laděním a nasazením vlastního kódu do zařízení IoT Edge pomocí IoT Edge pro Linux ve Windows a sadě Visual Studio 2022. Nejběžnější scénář vývojáře pro řešení IoT Edge se dozvíte nasazením modulu C# do zařízení s Linuxem. Nasadíte a ladíte vlastní modul Azure IoT Edge spuštěný v kontejneru Linuxu ve Windows (EFLOW). I když plánujete používat jiný jazyk nebo nasadit službu Azure, je tento kurz stále užitečný k seznámení s vývojářskými nástroji a koncepty.

Tento článek obsahuje kroky pro dva vývojové nástroje IoT Edge:

  • Upřednostňovaným nástrojem pro vývoj je rozhraní příkazového řádku (CLI).
  • Nástroje Azure IoT Edge pro rozšíření sady Visual Studio Rozšíření je v režimu údržby.

Pomocí tlačítka selektoru nástrojů na začátku tohoto článku vyberte verzi nástroje.

V tomto kurzu se naučíte:

  • Nastavte svůj vývojový počítač.
  • K vytvoření nového projektu použijte nástroje IoT Edge pro Visual Studio Code.
  • Sestavte projekt jako kontejner a uložte ho do registru kontejneru Azure.
  • Nasaďte kód do zařízení IoT Edge.

Požadavky

Tento článek předpokládá, že jako vývojový počítač používáte počítač s Windows. Na počítačích s Windows můžete vyvíjet moduly Windows nebo Linux. Tento kurz vás provede vývojem linuxových kontejnerů pomocí IoT Edge pro Linux ve Windows pro sestavování a nasazování modulů.

Jakmile bude sada Visual Studio 2022 připravená, budete potřebovat také následující nástroje a komponenty:

  • Stáhněte a nainstalujte nástroje Azure IoT Edge z webu Visual Studio Marketplace. K vytvoření a sestavení řešení IoT Edge můžete použít rozšíření Azure IoT Edge Tools. Upřednostňovaným vývojovým nástrojem je nástroj příkazového řádku (CLI) Azure IoT Edge Dev Tool. Součástí rozšíření jsou šablony projektů Azure IoT Edge použité k vytvoření projektu sady Visual Studio. V současné době potřebujete nainstalované rozšíření bez ohledu na nástroj pro vývoj, který používáte.

    Důležité

    Rozšíření Azure IoT Edge Tools for VS 2022 je v režimu údržby. Upřednostňovaným vývojovým nástrojem je nástroj příkazového řádku (CLI) Azure IoT Edge Dev Tool.

    Tip

    Pokud používáte Visual Studio 2019, stáhněte a nainstalujte nástroje Azure IoT Edge pro VS 2019 z marketplace sady Visual Studio.

Cloudové prostředky:

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Klíčové koncepty

Tento kurz vás provede vývojem modulu IoT Edge. Modul IoT Edge nebo někdy jen krátký modul je kontejner se spustitelným kódem. Jeden nebo více modulů můžete nasadit do zařízení IoT Edge. Moduly provádějí konkrétní úlohy, jako je ingestování dat ze senzorů, čištění a analýza dat nebo odesílání zpráv do centra IoT. Další informace najdete v tématu Vysvětlení modulů Azure IoT Edge.

Při vývoji modulů IoT Edge je důležité pochopit rozdíl mezi vývojovým počítačem a cílovým zařízením IoT Edge, kde se modul nakonec nasadí. Kontejner, který sestavíte pro uložení kódu modulu, musí odpovídat operačnímu systému cílového zařízení. Nejběžnějším scénářem je například, že někdo vyvíjí modul na počítači s Windows, který má v úmyslu cílit na zařízení s Linuxem, na kterém běží IoT Edge. V takovém případě by operační systém kontejneru byl Linux. Při procházení tohoto kurzu mějte na paměti rozdíl mezi operačním systémem vývojového počítače a operačním systémem kontejneru. V tomto kurzu budete používat svého hostitele Windows pro vývoj a virtuální počítač IoT Edge pro Linux ve Windows (EFLOW) pro sestavování a nasazování modulů.

Tento kurz cílí na zařízení se službou IoT Edge s kontejnery Linuxu. Upřednostňovaný operační systém můžete použít, pokud váš vývojový počítač spouští kontejnery Linuxu. K vývoji s linuxovými kontejnery doporučujeme použít Visual Studio, takže tento kurz používá. Visual Studio Code můžete použít také, i když mezi těmito dvěma nástroji existují rozdíly. Další informace najdete v tématu Vývoj modulů Azure IoT Edge pomocí editoru Visual Studio Code.

Nastavení vzdáleného připojení k docker-cli a modulu Dockeru

Moduly IoT Edge jsou zabalené jako kontejnery, takže k jejich sestavení a správě potřebujete na vývojovém počítači modul kontejneru. Virtuální počítač EFLOW už obsahuje instanci modulu Docker, takže v tomto kurzu se dozvíte, jak se vzdáleně připojit z vývojářského počítače s Windows k instanci Dockeru virtuálního počítače EFLOW. Tímto způsobem odebereme závislost na Docker Desktopu pro Windows.

Prvním krokem je konfigurace docker-cli na vývojovém počítači s Windows tak, aby se mohla připojit ke vzdálenému modulu Dockeru.

  1. Stáhněte si předkompilovanou docker.exe verzi docker-cli z docker-cli Chocolatey. Oficiální projekt cli si můžete stáhnout také z GitHubu dockeru nebo rozhraní příkazového řádku a zkompilovat ho podle pokynů k úložišti.
  2. Extrahujte docker.exe do adresáře ve vývojovém počítači. Například C:\Docker\bin
  3. Otevřít Informace o počítači ->Systémové informace ->Upřesnit nastavení systému
  4. Select Advanced ->Environment variables -> Under User variables check Path
  5. Upravte proměnnou Cesta a přidejte umístění docker.exe
  6. Otevření relace PowerShellu se zvýšenými oprávněními
  7. Pomocí příkazu zkontrolujte, jestli je rozhraní příkazového řádku Dockeru přístupné.
    docker --version
    

Pokud bylo všechno úspěšně nakonfigurováno, předchozí příkaz by měl vypisovat verzi Dockeru, například Docker verze 20.10.12, build e91ed57.

Druhým krokem je konfigurace modulu Dockeru virtuálního počítače EFLOW tak, aby přijímala externí připojení, a přidejte příslušná pravidla brány firewall.

Upozorňující

Zveřejnění modulu Dockeru pro externí připojení může zvýšit bezpečnostní rizika. Tato konfigurace by se měla používat jenom pro účely vývoje. Po dokončení vývoje nezapomeňte obnovit konfiguraci na výchozí nastavení.

  1. Otevřete relaci PowerShellu se zvýšenými oprávněními a spusťte následující příkazy.

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

    Následuje příklad výstupu.

    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. Posledním krokem je otestování připojení Dockeru k modulu Dockeru virtuálního počítače EFLOW. Nejprve potřebujete IP adresu virtuálního počítače EFLOW.

    Get-EflowVmAddr
    

    Tip

    Pokud byl virtuální počítač EFLOW nasazen bez statické IP adresy, může se IP adresa změnit napříč restartováním operačního systému Windows nebo síťovými změnami. Při každém navázání vzdáleného připojení k modulu Dockeru se ujistěte, že používáte správnou IP adresu virtuálního počítače EFLOW.

    Následuje příklad výstupu.

    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. Pomocí získané IP adresy se připojte k modulu Docker virtuálního počítače EFLOW a spusťte ukázkový kontejner Hello-World. Hodnotu EFLOW-VM-IP> nahraďte <IP adresou virtuálního počítače EFLOW získanou v předchozím kroku.

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

    Měli byste vidět, že se kontejner stahuje, a potom se spustí a vypíše následující příkaz.

    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/
    

Vytvoření projektu Azure IoT Edge

Šablona projektu IoT Edge v sadě Visual Studio vytvoří řešení, které je možné nasadit na zařízení IoT Edge. Nejprve vytvoříte řešení Azure IoT Edge a pak vygenerujete první modul v řešení. Každé řešení IoT Edge může obsahovat více než jeden modul.

Důležité

Struktura projektu IoT Edge vytvořená sadou Visual Studio není stejná jako struktura projektu v editoru Visual Studio Code.

Azure IoT Edge Dev Tool CLI v současné době nepodporuje vytváření typu projektu sady Visual Studio. K vytvoření projektu sady Visual Studio potřebujete použít rozšíření Visual Studio IoT Edge.

  1. V sadě Visual Studio vytvořte nový projekt.

  2. Na stránce Vytvořit nový projekt vyhledejte Azure IoT Edge. Vyberte projekt, který odpovídá platformě (modulu Linux IoT Edge) a architektuře vašeho zařízení IoT Edge, a vyberte Další.

  3. Na stránce Konfigurovat nový projekt zadejte název projektu a zadejte umístění a pak vyberte Vytvořit.

  4. V okně Přidat modul vyberte typ modulu, který chcete vyvíjet. Můžete také vybrat Existující modul a přidat do nasazení existující modul IoT Edge. Zadejte název modulu a úložiště imagí modulu.

  5. V adrese URL úložiště zadejte název úložiště imagí modulu. Visual Studio automaticky vyplní název modulu localhost:5000/<název> vašeho modulu. Nahraďte ho vlastními informacemi registru. Pokud k testování použijete místní registr Dockeru, použijte localhost . Pokud používáte Azure Container Registry, použijte přihlašovací server z nastavení vašeho registru. Přihlašovací server vypadá jako <název> registru.azurecr.io. Nahraďte pouze část řetězce localhost:5000, aby konečný výsledek vypadal jako< název> registru.azurecr.io/< názvový> modul.

  6. Výběrem možnosti Přidat přidáte modul do projektu.

    Snímek obrazovky přidání aplikace a modulu do řešení sady Visual Studio

    Poznámka:

    Pokud máte existující projekt IoT Edge, můžete změnit adresu URL úložiště tak, že otevřete soubor module.json . Adresa URL úložiště se nachází ve vlastnosti úložiště souboru JSON.

Teď máte v řešení sady Visual Studio projekt IoT Edge a modul IoT Edge.

Struktura projektu

Ve vašem řešení jsou dvě složky na úrovni projektu, včetně hlavní složky projektu a jedné složky modulu. Můžete mít například hlavní složku projektu s názvem AzureIotEdgeApp1 a složku modulu s názvem IotEdgeModule1. Hlavní složka projektu obsahuje manifest nasazení.

Složka modulu obsahuje soubor pro kód modulu s názvem buď Program.cs nebo main.c v závislosti na jazyce, který jste zvolili. Tato složka obsahuje také soubor s názvem module.json , který popisuje metadata vašeho modulu. Různé soubory Dockeru poskytují informace potřebné k sestavení modulu jako kontejneru Windows nebo Linuxu.

Manifest nasazení projektu

Manifest nasazení, který upravíte, má název deployment.debug.template.json. Tento soubor je šablona manifestu nasazení IoT Edge, který definuje všechny moduly, které běží na zařízení, spolu s tím, jak spolu komunikují. Další informace o manifestech nasazení najdete v tématu Informace o nasazení modulů a vytváření tras.

Pokud otevřete tuto šablonu nasazení, uvidíte, že jsou zahrnuty dva moduly modulu runtime EdgeAgent a edgeHub spolu s vlastním modulem, který jste vytvořili v tomto projektu sady Visual Studio. Součástí je také čtvrtý modul s názvem SimulatedTemperatureSensor . Tento výchozí modul vygeneruje simulovaná data, která můžete použít k otestování modulů nebo odstranění, pokud to není nutné. Pokud chcete zjistit, jak simulovaný senzor teploty funguje, podívejte se na zdrojový kód SimulatedTemperatureSensor.csproj.

Nastavení verze modulu runtime IoT Edge

Nejnovější stabilní verze modulu runtime je v současné době 1.4. Verzi modulu runtime IoT Edge byste měli aktualizovat na nejnovější stabilní verzi nebo verzi, na kterou chcete cílit na vaše zařízení.

  1. V Průzkumník řešení klikněte pravým tlačítkem na název hlavního projektu a vyberte Nastavit verzi modulu runtime IoT Edge.

    Snímek obrazovky znázorňuje, jak najít a vybrat položku nabídky s názvem Set IoT Edge Runtime version (Nastavit verzi modulu runtime IoT Edge).

  2. V rozevírací nabídce zvolte verzi modulu runtime, na které běží vaše zařízení IoT Edge, a pak výběrem ok uložte změny. Pokud nedošlo k žádné změně, vyberte Zrušit a ukončete ji.

    Rozšíření v současné době neobsahuje výběr nejnovějších verzí modulu runtime. Pokud chcete nastavit verzi modulu runtime vyšší než 1.2, otevřete soubor manifestu nasazení deployment.debug.template.json . Změňte verzi modulu runtime modulu system runtime image edgeAgent a edgeHub. Pokud například chcete použít modul runtime IoT Edge verze 1.4, změňte v souboru manifestu nasazení následující řádky:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. Pokud jste změnili verzi, znovu vygenerujte manifest nasazení tak, že kliknete pravým tlačítkem na název projektu a vyberete Vygenerovat nasazení pro IoT Edge. Tím se vygeneruje manifest nasazení na základě šablony nasazení a zobrazí se v konfigurační složce projektu sady Visual Studio.

  1. Otevřete soubor manifestu nasazení deployment.debug.template.json. Manifest nasazení je dokument JSON, který popisuje moduly, které se mají nakonfigurovat na cílovém zařízení IoT Edge.

  2. Změňte verzi modulu runtime modulu system runtime image edgeAgent a edgeHub. Pokud například chcete použít modul runtime IoT Edge verze 1.4, změňte v souboru manifestu nasazení následující řádky:

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

Nastavení vzdálené instance modulu Dockeru sady Visual Studio 2022

Použijte rozšíření nástrojů Azure IoT Edge a nakonfigurujte ho tak, aby používal vzdálený modul Docker spuštěný uvnitř virtuálního počítače EFLOW.

  1. Vyberte Nástroje –>Nástroje Azure IoT Edge –> Nastavení nástrojů IoT Edge...

  2. Nahraďte hodnotu DOCKER_HOST localhost IP adresou virtuálního počítače EFLOW. Pokud si IP adresu nepamatujete, získejte ji pomocí rutiny Get-EflowVmAddr PowerShellu EFLOW. Pokud je IP adresa virtuálního počítače EFLOW 172.20.1.100, měla by být nová hodnota tcp://172.20.1.100:2375.

    Snímek obrazovky s nastavením nástrojů IoT Edge

  3. Vyberte OK.

Vývoj modulu

Když přidáte nový modul, obsahuje výchozí kód, který je připravený k sestavení a nasazení do zařízení, abyste mohli začít testovat bez zásahu do jakéhokoli kódu. Kód modulu se nachází ve složce modulu v souboru s názvem Program.cs (pro C#) nebo main.c (pro C).

Výchozí řešení je vytvořené tak, aby simulovaná data z modulu SimulatedTemperatureSensor byla směrována do vašeho modulu, který přijímá vstup a pak je odesílá do IoT Hubu.

Až budete připravení přizpůsobit šablonu modulu vlastním kódem, použijte sady SDK služby Azure IoT Hub k vytvoření dalších modulů, které řeší klíčové potřeby řešení IoT, jako je zabezpečení, správa zařízení a spolehlivost.

Sestavení a nasdílení jednoho modulu

Obvykle budete chtít každý modul otestovat a ladit předtím, než ho spustíte v rámci celého řešení s více moduly. Vzhledem k tomu, že řešení bude sestavovat nebo ladit pomocí modulu Docker spuštěného uvnitř virtuálního počítače EFLOW, je prvním krokem sestavení a publikování modulu pro povolení vzdáleného ladění.

  1. V Průzkumník řešení vyberte a zvýrazněte složku projektu modulu (například myIotEdgeModule). Nastavte vlastní modul jako spouštěný projekt. V nabídce vyberte Project>Set as StartUp Project (Spustit projekt).

  2. Abychom mohli ladit modul C# Linux, musíme aktualizovat soubor Dockerfile.amd64.debug , aby se povolila služba SSH. Aktualizujte soubor Dockerfile.amd64.debug tak, aby používal následující šablonu: Dockerfile pro modul Azure IoT Edge AMD64 C# s podporou vzdáleného ladění.

    Poznámka:

    Při výběru možnosti Ladit sada Visual Studio používá Dockerfile.(amd64|windows-amd64).debug k sestavení imagí Dockeru. To zahrnuje ladicí program příkazového řádku .NET Core VSDBG v imagi kontejneru při jeho vytváření. Pro moduly IoT Edge připravené pro produkční prostředí doporučujeme použít konfiguraci vydané verze , která se používá Dockerfile.(amd64|windows-amd64) bez VSDBG.

    Upozorňující

    Ujistěte se, že poslední řádek šablony ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"] název knihovny DLL odpovídá názvu projektu modulu IoT Edge.

    Snímek obrazovky s nastavením šablony souboru Dockerfile

  3. Abychom vytvořili připojení SSH k modulu Linuxu, musíme vytvořit klíč RSA. Otevřete relaci PowerShellu se zvýšenými oprávněními a spuštěním následujících příkazů vytvořte nový klíč RSA. Ujistěte se, že klíč RSA uložíte do stejné složky modulu IoT Edge a název klíče je id_rsa.

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

    Snímek obrazovky znázorňuje, jak vytvořit klíč SSH

  4. Pokud používáte privátní registr, jako je Azure Container Registry (ACR), přihlaste se k němu pomocí následujícího příkazu Dockeru. Uživatelské jméno a heslo můžete získat na stránce Přístupové klíče vašeho registru na webu Azure Portal. Pokud používáte místní registr, můžete spustit místní registr.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <ACR username> -p <ACR password> <ACR login server>
    
  1. V Průzkumník řešení klikněte pravým tlačítkem na složku projektu a vyberte Sestavit a odeslat moduly IoT Edge a sestavte a nasdílejte image Dockeru pro každý modul.

  2. Pokud používáte privátní registr, jako je Azure Container Registry, musíte do nastavení modulu runtime nalezeného v souboru deployment.template.jsonpřidat přihlašovací údaje registru. Zástupné symboly nahraďte skutečným uživatelským jménem, heslem a názvem registru správce ACR.

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

    Poznámka:

    Tento článek používá přihlašovací údaje správce pro Azure Container Registry, které jsou vhodné pro scénáře vývoje a testování. Až budete připraveni na produkční scénáře, doporučujeme použít možnost ověřování s nejnižšími oprávněními, jako jsou instanční objekty. Další informace najdete v tématu Správa přístupu k registru kontejneru.

  3. Pro přístup ke službě SSH modulu je nutné zveřejnit port 22. Tento kurz používá jako port hostitele 10022, ale můžete zadat jiný port, který se použije jako port SSH pro připojení k modulu Linux C#. Informace o portu SSH musíte přidat do "createOptions" tohoto nastavení modulu Linuxu nalezeného v souboru deployment.debug.template.json.

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. V Průzkumník řešení klikněte pravým tlačítkem na složku projektu a vyberte Vygenerovat nasazení pro IoT Edge a sestavte nový json nasazení IoT Edge.

  5. Otevřete Průzkumníka cloudu kliknutím na Zobrazit>Průzkumníka cloudu. Ujistěte se, že jste se přihlásili k sadě Visual Studio 2019.

  6. V Průzkumníku cloudu rozbalte své předplatné, vyhledejte službu Azure IoT Hub a zařízení Azure IoT Edge, které chcete nasadit.

  7. Klikněte pravým tlačítkem na zařízení IoT Edge a zvolte Vytvořit nasazení. Přejděte do manifestu nasazení ladění nakonfigurovaného pro vaši platformu ve složce konfigurace v řešení sady Visual Studio, například deployment.amd64.json.

Image Dockeru pro sestavení modulu

Po vytvoření modulu můžete sestavit image modulu, která se uloží do registru kontejneru pro nasazení do zařízení IoT Edge.

Pomocí souboru Dockerfile modulu sestavte image Dockeru modulu.

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

Předpokládejme například, že příkazové prostředí je v adresáři projektu a název vašeho modulu je IotEdgeModule1. Pokud chcete vytvořit image místního registru nebo registru kontejneru Azure, použijte následující příkazy:

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

Image Dockeru modulu push

Nasdílejte image modulu do místního registru nebo do registru kontejneru.

docker push <ImageName>

Příklad:

# 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

Nasaďte modul do zařízení IoT Edge.

V sadě Visual Studio otevřete v hlavním projektu soubor manifestu nasazení deployment.debug.template.json. Manifest nasazení je dokument JSON, který popisuje moduly, které se mají nakonfigurovat na cílovém zařízení IoT Edge. Před nasazením musíte aktualizovat přihlašovací údaje služby Azure Container Registry, image modulů a správné createOptions hodnoty. Další informace o hodnotách createOption najdete v tématu Konfigurace možností vytváření kontejnerů pro moduly IoT Edge.

  1. Pokud k uložení image modulu používáte Službu Azure Container Registry, musíte do nastavení edgeAgent přidat přihlašovací údaje k deployment.debug.template.json. Příklad:

    "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. Hodnotu vlastnosti image nahraďte názvem image modulu, který jste odeslali do registru. Pokud jste například odeslali image označenou myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 pro vlastní modul IotEdgeModule1, nahraďte hodnotu vlastnosti image hodnotou značky.

  3. Přidejte nebo nahraďte hodnotu createOptions řetězcovým obsahem pro každý systém a vlastní modul v šabloně nasazení.

    Například image IotEdgeModule1 a nastavení createOptions by se podobaly následujícímu:

    "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\"}]}}}"
    }
    

K nasazení modulů do Azure IoT Hubu použijte příkaz set-modules Pro IoT Edge. Pokud chcete například nasadit moduly definované v souboru deployment.debug.amd64.json do ioT Hubu my-iot-hub pro zařízení IoT Edge my-device, použijte následující příkaz:

az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Tip

Svůj připojovací řetězec IoT Hub najdete na webu Azure Portal v části Zásady sdíleného přístupu nastavení>zabezpečení služby Azure IoT Hub.>

  1. V Průzkumníku cloudu klikněte pravým tlačítkem na hraniční zařízení a aktualizujte nový modul, který běží společně s moduly $edgeAgent a $edgeHub .

Ladění řešení

  1. Spuštěním následujících příkazů spusťte relaci PowerShellu se zvýšenými oprávněními.

    1. Získejte id modulu na základě názvu použitého pro modul Linux C#. Nezapomeňte zástupný symbol pro název> modulu iot-edge-module nahradit <názvem vašeho modulu.

      $moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
      
    2. Zkontrolujte správnost $moduleId – pokud je proměnná prázdná, ujistěte se, že používáte správný název modulu.

    3. Spuštění služby SSH v kontejneru Linuxu

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Otevřete port SSH modulu na virtuálním počítači EFLOW (v tomto kurzu se používá port 10022).

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

    Upozorňující

    Zbezpečnostních Služba SSH modulu bude také muset znovu spustit ručně.

  2. Po úspěšném spuštění služby SSH vyberte Debug ->Attach to Process, set Připojení ion Type to SSH a Připojení ion target to the IP address of your EFLOW VM. Pokud IP adresu virtuálního počítače EFLOW neznáte, můžete použít rutinu PowerShellu Get-EflowVmAddr . Nejprve zadejte IP adresu a stiskněte enter. V automaticky otevíraných otevíraných oknech zadejte následující konfigurace:

    Pole Hodnota
    Název hostitele Použití IP adresy virtuálního počítače EFLOW
    Port 10022 (nebo ten, který jste použili v konfiguraci nasazení)
    Uživatelské jméno kořen
    Typ ověřování Privátní klíč
    Soubor privátního klíče Úplná cesta k id_rsa vytvořené v předchozím kroku
    Heslo Heslo použité pro klíč vytvořený v předchozím kroku

    Snímek obrazovky znázorňuje, jak se připojit ke vzdálenému systému

  3. Po úspěšném připojení k modulu pomocí SSH pak můžete zvolit proces a vybrat Připojit. Pro modul C# musíte zvolit proces dotnet a připojit se ke spravovanému (CoreCLR). První spuštění může trvat 10 až 20 sekund.

    Snímek obrazovky s postupem připojení procesu hraničního modulu

  4. Nastavte zarážku pro kontrolu modulu.

    • Při vývoji v jazyce C# nastavte zarážku ve PipeMessage() funkci v ModuleBackgroundService.cs.
    • Pokud používáte jazyk C, nastavte zarážku ve InputQueue1Callback() funkci v main.c.
  5. Výstup simulatedTemperatureSensor by měl být přesměrován na vstup1 vlastního modulu Linux C#. Zarážka by se měla aktivovat. Proměnné můžete sledovat v okně Místní prostředí sady Visual Studio.

    Snímek obrazovky s ladit jeden modul

  6. Pokud chcete zastavit ladění, stiskněte Ctrl+F5 nebo stiskněte tlačítko zastavit.

Vyčištění prostředků

Pokud máte v plánu pokračovat k dalšímu doporučenému článku, můžete si vytvořené prostředky a konfigurace uschovat a znovu je použít. Také můžete dál používat stejné zařízení IoT Edge jako testovací zařízení.

Jinak můžete odstranit místní konfigurace a prostředky Azure, které jste použili v tomto článku, abyste se vyhnuli poplatkům.

Odstranění prostředků Azure

Odstranění prostředků Azure a skupin prostředků je nevratná akce. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste centrum IoT vytvořili ve stávající skupině prostředků, která obsahuje prostředky, které chcete zachovat, odstraňte pouze samotný prostředek ioT Hubu, nikoli skupinu prostředků.

Odstranění prostředků:

  1. Přihlaste se k portálu Azure Portal a potom vyberte Skupiny prostředků.

  2. Vyberte název skupiny prostředků, která obsahuje vaše testovací prostředky služby IoT Edge.

  3. Zkontrolujte seznam prostředků obsažených ve vaší skupině prostředků. Pokud chcete odstranit všechny prostředky, můžete vybrat možnost Odstranit skupinu prostředků. Pokud chcete odstranit pouze některé prostředky, můžete na ně kliknout a odstranit je jednotlivě.

Další kroky

V tomto kurzu nastavíte sadu Visual Studio na vývojovém počítači a nasadíte a ladíte z něj svůj první modul IoT Edge. Teď, když znáte základní koncepty, zkuste do modulu přidat funkce, aby bylo možné analyzovat data, která procházejí.