Sdílet prostřednictvím


Kurz: Vývoj modulů IoT Edge s kontejnery Linuxu pomocí IoT Edge pro Linux na Windows

Použitelné pro:IoT Edge 1.5 zaškrtnuto IoT Edge 1.5

Důležité

IoT Edge 1.5 LTS je podporovaná verze. IoT Edge 1,4 LTS dosáhl konce životnosti 12. listopadu 2024. Pokud používáte starší verzi, přečtěte si téma Update IoT Edge.

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

Tento kurz obsahuje kroky pro dva IoT Edge vývojové nástroje:

  • Příkazový řádek (CLI) nástroje Azure IoT Edge Dev Tool, který je upřednostňovaným nástrojem pro vývoj.
  • Rozšíření Azure IoT Edge Tools pro Visual Studio, které je v režimu maintenance

Pomocí tlačítka selektoru na začátku tohoto kurzu 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 IoT Edge vývojové nástroje.
  • Sestavte projekt jako kontejner a uložte ho do Azure Container Registry.
  • Nasaďte kód do IoT Edge zařízení.

Požadavky

V tomto kurzu se předpokládá, že jako vývojový počítač používáte počítač, na kterém běží Windows. Na Windows počítačích můžete vyvíjet moduly Windows nebo Linux. Tento kurz vás provede vývojem kontejnerů Linuxu pomocí IoT Edge pro Linux na Windows pro sestavování a nasazování modulů.

Než začnete:

  • Nainstalujte IoT Edge pro Linux na Windows.

  • Přečtěte si rychlý průvodce nasazení prvního modulu IoT Edge na zařízení s Windows.

  • Stáhněte si nástroj .NET Core SDK.

  • Nainstalujte nebo upravte Visual Studio 2022 na vývojovém počítači. Zvolte vývoj pro Azure a vývoj Desktop s možnostmi úloh C++.

  • Po dokončení instalace Visual Studio 2022 si stáhněte a nainstalujte Azure IoT Edge Tools z Visual Studio Marketplace.

    K vytvoření a sestavení řešení IoT Edge můžete použít rozšíření Azure IoT Edge Tools. Preferovaným vývojářským nástrojem je Azure IoT Edge Dev Tool CLI. Rozšíření obsahuje šablony projektu Azure IoT Edge, které použijete k vytvoření projektu Visual Studio. V současné době je potřeba nainstalovat rozšíření bez ohledu na nástroj pro vývoj, který používáte.

    Návod

    Pokud používáte Visual Studio 2019, stáhněte a nainstalujte Azure IoT Edge Tools for Visual Studio 2019 z webu Visual Studio Marketplace.

  • Vytvořte bezplatnou nebo standardní úroveň IoT Hub ve Azure jako cloudový prostředek.

Pokud účet Azure nemáte, vytvořte si účet free než začnete.

Klíčové koncepty

Tento kurz vás provede vývojem modulu IoT Edge. Modul IoT Edge je kontejner, který má spustitelný kód. Do IoT Edge zařízení můžete nasadit jeden nebo více modulů. 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 Podstatné moduly 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 IoT Edge zařízením, 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 někdo, kdo vyvíjí modul na počítači Windows, který hodlá cílit na zařízení s Linuxem, na kterém běží IoT Edge. V takovém případě je operační systém kontejneru 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 použijete hostitele Windows pro vývoj a IoT Edge pro Linux na virtuálním počítači Windows pro sestavování a nasazování modulů.

Tento kurz cílí na zařízení, na kterých běží 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žívat Visual Studio, takže tento kurz používá. Můžete také použít Visual Studio Code, i když mezi těmito dvěma nástroji existují rozdíly. Další informace najdete v tématu Develop Azure IoT Edge moduly pomocí Visual Studio Code.

Nastavení rozhraní příkazového řádku Dockeru a modulu Dockeru pro vzdálené připojení

IoT Edge moduly jsou zabalené jako kontejnery, takže potřebujete na vývojovém počítači modul kontejneru, který je sestaví a spravuje.

IoT Edge pro Linux na virtuálním počítači Windows už obsahuje instanci modulu Dockeru. 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 IoT Edge pro Linux na virtuálním počítači s Windows. Pomocí tohoto vzdáleného připojení odeberete závislost na Docker Desktopu pro Windows.

Konfigurace rozhraní příkazového řádku Dockeru

Prvním krokem je konfigurace rozhraní příkazového řádku Dockeru na Windows vývojovém počítači, aby se mohlo připojit ke vzdálenému modulu Dockeru:

  1. Stáhněte si předkompilovanou docker.exe verzi Rozhraní příkazového řádku Dockeru z Chocolatey. Oficiální projekt cli si můžete stáhnout také z GitHub a zkompilovat ho podle pokynů k úložišti.

  2. Extrahujte docker.exe do adresáře ve vašem vývojovém počítači, C:\Docker\binnapříklad .

  3. Otevřete O systému PC>Informace o systému>Pokročilé systémové nastavení.

  4. Vyberte Pokročilé>proměnné prostředí. V části Proměnné uživatele vyberte Path.

  5. Upravte proměnnou Path a přidejte umístění docker.exe.

  6. Otevřete relaci PowerShellu se zvýšenými oprávněními.

  7. Pomocí následujícího příkazu zkontrolujte, jestli je rozhraní příkazového řádku Dockeru přístupné:

    docker --version
    

    Pokud jste všechno úspěšně nakonfigurovali, měl by výstup příkazu zobrazit verzi Dockeru. Měl by vypadat nějak takto Docker version 20.10.12, build e91ed57.

Konfigurace modulu Dockeru

Druhým krokem je konfigurace Docker enginu IoT Edge for Linux on Windows virtuálního počítače tak, aby přijímal externí připojení, a přidání příslušných pravidel brány firewall.

Varování

Zveřejnění modulu Dockeru pro externí připojení může zvýšit rizika zabezpečení. Tuto konfiguraci byste měli použít 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 IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules.
    Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    
    # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder.
    Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    
    # Replace the service execution line to listen for external connections.
    Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g'  /etc/systemd/system/docker.service"
    
    # Reload the IoT Edge for Linux on Windows VM services configurations.
    Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    
    # Reload the Docker engine service.
    Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    
    # Check that the Docker engine is listening to external connections.
    Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    

    Tady je příklad výstupu:

    PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules.
    PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    PS C:\>
    PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder.
    PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Replace the service execution line to listen for external connections.
    PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    PS C:\>
    PS C:\> # Reload the Docker engine service.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    PS C:\>
    PS C:\> # Check that the Docker engine is listening to external connections.
    PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    tcp6       0      0 :::2375                 :::*                    LISTEN      2790/dockerd
    

Test připojení

Posledním krokem instalace je otestování připojení Dockeru k IoT Edge pro Linux na Windows modulu Docker virtuálního počítače:

  1. Získejte IP adresu IoT Edge pro Linux na virtuálním počítači Windows:

    Get-EflowVmAddr
    

    Návod

    Pokud IoT Edge pro Linux na virtuálním počítači Windows byl nasazen bez statické IP adresy, může se IP adresa změnit napříč Windows restartováním operačního systému hostitele nebo změnami sítě. Ujistěte se, že používáte správnou IP adresu pro IoT Edge pro Linux na virtuálním počítači Windows pokaždé, když chcete navázat vzdálené připojení k modulu Dockeru.

    Tady je 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 
    
  2. Připojte se k Docker engine IoT Edge pro Linux na Windows VM a spusťte ukázkový kontejner hello-world. Nahraďte <EFLOW-VM-IP> IoT Edge pro Linux na IP adrese virtuálního počítače Windows, kterou jste získali v předchozím kroku.

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

    Po dokončení stahování kontejneru se kontejner spustí a vytvoří tento výstup:

    PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete
    Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you're currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

Vytvoření projektu Azure IoT Edge

Šablona projektu IoT Edge v Visual Studio vytvoří řešení, které můžete nasadit do IoT Edge zařízení. Pomocí následujících kroků vytvořte Azure IoT Edge řešení a pak vygenerujte první modul v tomto řešení. Každé IoT Edge řešení může obsahovat více než jeden modul.

Důležité

Struktura projektu IoT Edge, kterou Visual Studio vytvoří, není stejná jako struktura projektu v Visual Studio Code.

Rozhraní příkazového řádku Azure IoT Edge Dev Tool v současné době nepodporuje vytváření typu projektu Visual Studio. K vytvoření projektu Visual Studio je potřeba použít rozšíření Azure IoT Edge Tools.

  1. V Visual Studio vytvořte nový projekt tak, že na úvodní stránce vyberete Vytvoří nový projekt nebo vyberete tlačítko Nový projekt na panelu nástrojů.

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

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

  4. V dialogovém okně Přidat modul vyberte typ modulu, který chcete vyvíjet. Můžete také vybrat modul Existing a přidat do nasazení existující modul IoT Edge.

  5. Do pole Název modulu zadejte název modulu.

  6. V adrese URL úložiště zadejte název úložiště imagí modulu. Visual Studio automaticky vyplní název modulu jako localhost:5000/<váš název 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í registru. Přihlašovací server vypadá jako <název registru>.azurecr.io. Nahraďte pouze localhost:5000, aby konečný výsledek vypadal jako <název registru>.azurecr.io/<název modulu>.

  7. Vyberte Přidat a přidejte modul do projektu.

    Screenshot výběrů pro přidání aplikace a modulu do projektu ve 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 repository vlastnosti souboru JSON.

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

Struktura projektu

Vaše řešení má dvě složky na úrovni projektu: hlavní složku projektu a složku 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 nasazovací manifest. Manifest nasazení je dokument JSON, který popisuje moduly, které se mají nakonfigurovat na cílovém zařízení IoT Edge.

Složka modulu obsahuje soubor pro kód modulu. Jmenuje se 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í potřebné informace 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í. Soubor také definuje, jak moduly vzájemně komunikují. Další informace o manifestech nasazení najdete v tématu Informace o nasazení modulů a vytváření tras.

Šablona nasazení zahrnuje:

  • Dva runtime moduly, edgeAgent a edgeHub.
  • Vlastní modul, který jste vytvořili v tomto projektu Visual Studio.
  • Modul s názvem SimulatedTemperatureSensor. Tento výchozí modul generuje 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.5. Aktualizujte verzi modulu runtime IoT Edge na nejnovější stabilní verzi nebo verzi, na kterou chcete cílit pro vaše zařízení:

  1. V Solution Explorer klikněte pravým tlačítkem na název hlavního projektu a vyberte Set IoT Edge verzi modulu runtime.

    Screenshot výběrů pro nastavení verze IoT Edge runtime.

  2. V rozevírací nabídce zvolte verzi runtime, na které běží vaše IoT Edge zařízení. Potom uložte provedené změny kliknutím na TLAČÍTKO OK . Pokud jste neudělali žádné změny, vyberte Zrušit.

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

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.5"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
       //...
    
  3. Pokud jste změnili verzi, znovu vygenerujte manifest nasazení tak, že kliknete pravým tlačítkem na název projektu a vyberete Generate deployment for IoT Edge. Tento krok vygeneruje manifest nasazení na základě šablony nasazení. Manifest se zobrazí ve složce config projektu Visual Studio.

  1. Otevřete soubor manifestu deployment.debug.template.json nasazení.

  2. Změňte verzi runtime pro obrazy systémového runtime modulu edgeAgent a edgeHub. Pokud například chcete použít modul runtime IoT Edge verze 1.5, změňte následující řádky v souboru manifestu nasazení:

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

Nastavení instance vzdáleného motoru Docker ve Visual Studio 2022

Nakonfigurujte rozšíření Azure IoT Edge Tools tak, aby používalo vzdálený modul Dockeru, který běží v IoT Edge pro Linux na Windows virtuálním počítači:

  1. Vyberte Nástroje>Azure IoT Edge tools>IoT Edge nastavení nástrojů.

  2. Hodnotu localhost DOCKER_HOST nahraďte IP adresou IoT Edge pro Linux na Windows virtuálním počítači. Pokud si IP adresu nepamatujete, získejte ji pomocí příkazu IoT Edge pro Linux na Windows PowerShellu Get-EflowVmAddr. Pokud je například IoT Edge pro Linux na IP adrese virtuálního počítače Windows 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).

Ve výchozím řešení se simulovaná data z SimulatedTemperatureSensor modulu směrují do vašeho modulu. Modul vezme vstup a pak ho odešle do Azure IoT Hub.

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

Sestavení a nahrání jednoho modulu

Obvykle chcete testovat a ladit každý modul před spuštěním v rámci celého řešení s více moduly. Vzhledem k tomu, že řešení sestaví nebo ladí pomocí modulu Docker spuštěného v IoT Edge pro Linux na virtuálním počítači Windows, je prvním krokem sestavení a publikování modulu, aby se povolilo vzdálené ladění:

  1. V Solution Explorer vyberte složku projektu modulu (například myIotEdgeModule).

  2. Nastavte vlastní modul jako spouštěný projekt. V nabídce vyberte Projekt>Nastavit jako startovací projekt.

  3. Pokud chcete ladit C# modul na Linuxu, musíte 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:

    Když vyberete Debug, Visual Studio k sestavení imagí Dockeru použije Dockerfile.(amd64|windows-amd64).debug. Tento soubor obsahuje ladicí program příkazového řádku VSDBG pro .NET Core v kontejnerové imagi během jejího sestavování. Pro produkční moduly IoT Edge doporučujeme použít konfiguraci Release, která funguje bez VSDBG.

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

  4. Pokud chcete vytvořit připojení SSH s linuxovým modulem, musíte 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. Uložte klíč RSA do stejné složky modulu IoT Edge a ujistěte se, že je název klíče id_rsa.

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

    Snímek obrazovky s příkazem PowerShellu pro vytvoření klíče SSH

  5. Pokud používáte privátní registr, jako je Azure Container Registry, přihlaste se k němu pomocí následujícího příkazu Dockeru. Uživatelské jméno a heslo můžete získat ze stránky Access vašeho registru na portálu Azure. Pokud používáte místní registr, můžete spustit místní registr.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
    
  1. V Solution Explorer klikněte pravým tlačítkem na složku projektu a vyberte Build and Push IoT Edge Modules. Tento příkaz sestaví a vytlačí Docker image pro každý modul.

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

          "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 služební identity. Další informace najdete v tématu Správa přístupu k registru kontejneru.

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

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. V Solution Explorer klikněte pravým tlačítkem na složku projektu, vyberte možnost Vytvořit nasazení pro IoT Edge a sestavte nový JSON nasazení IoT Edge.

  5. Vyberte Zobrazit>Průzkumník cloudu. Ujistěte se, že jste přihlášení k Visual Studio 2019.

  6. V Cloud Exploreru rozbalte své předplatné a vyhledejte Azure IoT Hub a Azure IoT Edge zařízení, které chcete nasadit.

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

Sestavení obrazu Dockeru modulu

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

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 modulu je IotEdgeModule1. K sestavení image pro místní registr nebo Azure Container Registry 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"

Odeslat obraz Dockeru modulu

Nasdílejte image modulu do místního registru nebo 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

Nasazení modulu do zařízení IoT Edge

V Visual Studio otevřete soubor manifestu nasazení deployment.debug.template.json v hlavním projektu.

Před nasazením je potřeba aktualizovat přihlašovací údaje Azure Container Registry, image modulů a správné hodnoty createOptions. Další informace o hodnotách createOption najdete v tématu Jak konfigurovat možnosti vytváření kontejnerů pro moduly IoT Edge.

  1. Pokud k uložení image modulu používáte Azure Container Registry, přidejte přihlašovací údaje do deployment.debug.template.json v nastavení edgeAgent. 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. image Hodnotu vlastnosti nahraďte názvem image modulu, který jste odeslali do registru. Pokud jste například odeslali obrázek označený myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 pro vlastní modul IotEdgeModule1, nahraďte hodnotu vlastnosti obrázku hodnotou značky.

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

    Nastavení image a createOptions pro IotEdgeModule1 by se například podobalo následujícímu příkladu:

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    
  4. Pomocí příkazu IoT Edge Azure CLI set-modules nasaďte moduly do centra Azure IoT. Pokud chcete například nasadit moduly definované v souboru deployment.debug.amd64.json do služby IoT Hub my-iot-hub pro IoT Edge zařízení 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>"
    

    Návod

    Svůj řetězec připojení IoT Hub najdete ve službě Azure Portal pod Azure IoT Hub>Nastavení zabezpečení>Sdílené přístupové zásady.

  5. V Cloud Explorer klikněte pravým tlačítkem myši na hraniční zařízení a obnovte zobrazení pro ověření, že nový modul běží spolu s moduly $edgeAgent a $edgeHub.

Odstraňování chyb v řešení

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

    1. Získejte hodnotu moduleId na základě názvu modulu Linux C#. <iot-edge-module-name> Zástupný symbol nahraďte názvem 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. Spusťte službu SSH v kontejneru Linuxu:

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

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

    Varování

    Z bezpečnostních důvodů se při každém restartování IoT Edge pro Linux na Windows virtuálním počítači odstraní pravidlo tabulky IP adres a vrátí se k původnímu nastavení. Také musíte službu SSH modulu spustit ručně.

  2. Po úspěšném spuštění služby SSH vyberte Debug>Připojit k procesu, nastavte Typ připojení na SSH a nastavte Cílová IP adresa připojení na IP adresu vašeho IoT Edge pro Linux na VM s Windows. Pokud na virtuálním počítači Windows neznáte IP adresu IoT Edge pro Linux, můžete použít rutinu powershellu Get-EflowVmAddr.

    Zadejte IP adresu a pak vyberte klávesu Enter. V automaticky otevíracím okně zadejte následující konfigurace:

    Pole Hodnota
    Název hostitele IP adresa pro IoT Edge pro Linux na virtuálním počítači Windows
    Port 10022 (nebo ten, který jste použili v konfiguraci nasazení)
    Uživatelské jméno kořen
    Typ ověřování Soukromý klíč
    Soubor privátního klíče Úplná cesta k hodnotě id_rsa , kterou jste vytvořili v předchozím kroku
    Přístupové heslo Heslo použité pro klíč, který jste vytvořili v předchozím kroku
  3. Po úspěšném připojení k modulu pomocí SSH můžete zvolit proces a vybrat Připojit. Pro modul C# musíte zvolit proces dotnet a Připojení ke Správa (CoreCLR). První spuštění může trvat 10 až 20 sekund.

  4. Nastavte bod přerušení pro inspekci modulu:

    • Pokud vyvíjíte 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 input1 v rámci vlastního modulu Linux C#. Zarážka by se měla aktivovat. Proměnné můžete sledovat v okně Visual Studio Locals.

    Snímek obrazovky jak ladit jediný modul

  6. Ladění zastavíte tak, že vyberete Ctrl+F5 nebo vyberete 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. Můžete také dál používat stejné IoT Edge zařízení jako testovací zařízení.

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

Odstraňte prostředky Azure

Odstranění prostředků a skupin prostředků v Azure nelze vrátit zpět. Dávejte pozor, abyste nechtěně neodstranili nesprávnou skupinu prostředků nebo jednotlivé prostředky. Pokud jste vytvořili IoT Hub uvnitř existující skupiny prostředků, která obsahuje prostředky, které chcete zachovat, odstraňte pouze samotný IoT Hub prostředek, nikoli skupinu prostředků.

Chcete-li odstranit prostředky:

  1. Přihlaste se k portálu Azure a vyberte Sourcové skupiny.
  2. Vyberte název skupiny prostředků, která obsahuje vaše IoT Edge testovací prostředky.
  3. Zkontrolujte seznam prostředků, které vaše skupina prostředků obsahuje. Pokud chcete odstranit všechny prostředky, můžete vybrat možnost Odstranit skupinu prostředků. Pokud chcete odstranit jenom některé z nich, vyberte jednotlivé prostředky, abyste je odstranili jednotlivě.

Další krok

V tomto kurzu nastavíte Visual Studio na vývojovém počítači a nasadili a ladili jste 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í: