Kurz: Vývoj modulů IoT Edge pomocí editoru Visual Studio Code

Platí pro:IoT Edge 1.4 checkmark IoT Edge 1.4

Důležité

IoT Edge 1.4 je podporovaná verze. Pokud používáte starší verzi, podívejte se na článek Aktualizace IoT Edge.

Tento kurz vás provede vývojem a nasazením vlastního kódu do zařízení IoT Edge. Moduly Azure IoT Edge můžete použít k nasazení kódu, který implementuje obchodní logiku přímo do zařízení IoT Edge. V rychlém startu Nasazení kódu do zařízení s Linuxem jste vytvořili zařízení IoT Edge a nasadili jste modul z Azure Marketplace.

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

  • Azure IoT Edge Dev Tool – příkazový řádek (CLI). Tento nástroj je upřednostňovaný pro vývoj.
  • Nástroje Azure IoT Edge pro rozšíření Visual Studio Code 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č.
  • Pomocí nástrojů IoT Edge vytvořte nový projekt.
  • Sestavte projekt jako kontejner Dockeru a uložte ho do registru kontejnerů Azure.
  • Nasaďte kód do zařízení IoT Edge.

Modul IoT Edge, který vytvoříte v tomto kurzu, filtruje data o teplotě, která vaše zařízení generuje. Zprávy posílá dále, jen když teplota překročí zadanou prahovou hodnotu. Tento typ analýzy v zařízení Edge je užitečný kvůli zmenšení objemu dat přenášených a ukládaných do cloudu.

Požadavky

Vývojový počítač:

  • Použijte vlastní počítač nebo virtuální počítač.
  • Váš vývojový počítač musí podporovat vnořenou virtualizaci pro spuštění modulu kontejneru.
  • Většina operačních systémů, které můžou spouštět modul kontejnerů, se dá použít k vývoji modulů IoT Edge pro zařízení s Linuxem. Tento kurz používá počítač s Windows, ale upozorňuje na známé rozdíly v systému macOS nebo Linux.
  • Instalace Visual Studio Code
  • Nainstalujte rozhraní příkazového řádku Azure CLI.

Zařízení Azure IoT Edge:

Cloudové prostředky:

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

Tip

Pokyny k interaktivnímu ladění v editoru Visual Studio Code nebo sadě Visual Studio 2022:

V tomto kurzu se naučíte kroky vývoje pro Visual Studio Code.

Klíčové koncepty

Tento kurz vás provede vývojem modulu IoT Edge. Modul IoT Edge 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, ve kterém se modul nasazuje. 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.

Tip

Pokud používáte IoT Edge pro Linux ve Windows, pak cílové zařízení ve vašem scénáři je virtuální počítač s Linuxem, ne hostitelem Windows.

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 Code, takže tento kurz používá. Sadu Visual Studio můžete použít také, i když mezi těmito dvěma nástroji existují rozdíly.

Následující tabulka uvádí podporované vývojové scénáře pro linuxové kontejnery v editoru Visual Studio Code a sadě Visual Studio.

Visual Studio Code Visual Studio 2019/2022
Architektura zařízení s Linuxem Linux AMD64
Linux ARM32v7
Linux ARM64
Linux AMD64
Linux ARM32
Linux ARM64
Služby Azure Azure Functions
Azure Stream Analytics
Azure Machine Learning
Jazyky C
C#
Java
Node.js
Python
C
C#
Další informace Azure IoT Edge pro Visual Studio Code Azure IoT Edge Tools for Visual Studio 2019
Azure IoT Edge Tools for Visual Studio 2022

Instalace modulu kontejneru

Moduly IoT Edge jsou zabalené jako kontejnery, takže k jejich sestavení a správě potřebujete na vývojovém počítači kompatibilní systém správy kontejnerů Dockeru. Vzhledem k podpoře a oblíbenosti funkcí doporučujeme Docker Desktop pro vývoj. Docker Desktop ve Windows umožňuje přepínat mezi kontejnery Linuxu a kontejnery Windows, abyste mohli vyvíjet moduly pro různé typy zařízení IoT Edge.

K instalaci na vývojovém počítači použijte dokumentaci k Dockeru:

Nastavení nástrojů

Nainstalujte nástroj Azure IoT Edge Pro vývoj založený na Pythonu a vytvořte řešení IoT Edge. Existují dvě možnosti:

Důležité

Nástroje Azure IoT Edge pro rozšíření Visual Studio Code jsou 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.

K vývoji modulů IoT Edge použijte rozšíření IoT pro Visual Studio Code. Tato rozšíření nabízejí šablony projektů, automatizují vytváření manifestu nasazení a umožňují monitorovat a spravovat zařízení IoT Edge. V této části nainstalujete Visual Studio Code a rozšíření IoT a pak nastavíte svůj účet Azure pro správu prostředků IoT Hubu v editoru Visual Studio Code.

  1. Nainstalujte rozšíření Azure IoT Edge .

  2. Nainstalujte rozšíření Azure IoT Hubu .

  3. Po instalaci rozšíření otevřete paletu příkazů výběrem palety příkazů Zobrazit>.

  4. Na paletě příkazů znovu vyhledejte a vyberte Azure IoT Hub: Vyberte IoT Hub. Podle pokynů vyberte své předplatné Azure a IoT Hub.

  5. Otevřete oddíl průzkumníka editoru Visual Studio Code tak, že na panelu aktivit vlevo vyberete ikonu nebo vyberete Průzkumníka zobrazení>.

  6. V dolní části průzkumníka rozbalte sbalenou nabídku Azure IoT Hub / Zařízení . Měla by se zobrazit zařízení a zařízení IoT Edge přidružená ke službě IoT Hub, kterou jste vybrali prostřednictvím palety příkazů.

Instalace nástrojů specifických pro jazyk

Nainstalujte nástroje specifické pro jazyk, ve kterém vyvíjíte:

Vytvoření registru kontejneru

V tomto kurzu použijete rozšíření Azure IoT Edge a Azure IoT Hub k vytvoření modulu a vytvoření image kontejneru ze souborů. Tuto image pak nasdílíte do registru, ve kterém se ukládají a spravují vaše image. Nakonec nasadíte svou image z registru pro spuštění na zařízení IoT Edge.

Důležité

Rozšíření Visual Studio Code pro Azure IoT Edge je v režimu údržby.

K uložení imagí kontejneru můžete použít libovolný registr kompatibilní s Dockerem. Mezi dvě oblíbené služby registru Dockeru patří Azure Container Registry a Docker Hub. V tomto kurzu se používá služba Azure Container Registry.

Pokud ještě nemáte registr kontejneru, vytvořte nový v Azure pomocí následujícího postupu:

  1. Na webu Azure Portal vyberte Vytvořit prostředek>Kontejnery>Container Registry.

  2. Zadejte následující požadované hodnoty pro vytvoření registru kontejneru:

    Pole Hodnota
    Předplatné V rozevíracím seznamu vyberte předplatné.
    Skupina prostředků Stejnou skupinu prostředků použijte pro všechny testovací prostředky, které vytvoříte během rychlých startů a kurzů ioT Edge. Například IoTEdgeResources.
    Název registru Zadejte jedinečný název.
    Umístění Zvolte umístění, které je blízko vás.
    Skladová jednotka (SKU) Vyberte Basic.
  3. Vyberte Zkontrolovat a vytvořit a pak Vytvořit.

  4. V části Prostředky domovské stránky webu Azure Portal vyberte nový registr kontejneru a otevřete ho.

  5. V levém podokně registru kontejneru vyberte v nabídce umístěné v části Nastavení přístupové klíče.

    Screenshot of the Access Keys menu location.

  6. Povolte Správa uživatele s přepínacím tlačítkem a zobrazte uživatelské jméno a heslo pro registr kontejneru.

  7. Zkopírujte hodnoty přihlašovacího serveru, uživatelského jména a hesla a uložte je někam pohodlně. Tyto hodnoty použijete v tomto kurzu k poskytnutí přístupu k registru kontejneru.

Vytvoření nového projektu modulu

Rozšíření Azure IoT Edge nabízí šablony projektů pro všechny podporované jazyky modulů IoT Edge v editoru Visual Studio Code. Tyto šablony mají všechny soubory a kód, které potřebujete k nasazení pracovního modulu pro testování IoT Edge, nebo vám poskytnou výchozí bod pro přizpůsobení šablony vlastní obchodní logikou.

Vytvoření šablony projektu

Nástroj IoT Edge Dev Tool zjednodušuje vývoj pro Azure IoT Edge na příkazy řízené proměnnými prostředí. Začnete s vývojem ioT Edge pomocí generování uživatelského rozhraní řešení IoT Edge pro vývoj a řešení IoT Edge, které má výchozí modul a všechny požadované konfigurační soubory.

  1. Vytvořte pro své řešení adresář s cestou podle vašeho výběru. Přejděte do adresáře iotedgesolution .

    mkdir c:\dev\iotedgesolution
    cd c:\dev\iotedgesolution
    
  2. Pomocí příkazu iotedgedev solution init vytvořte řešení a nastavte službu Azure IoT Hub ve vývojovém jazyce podle svého výběru.

    iotedgedev solution init --template csharp
    

Inicializační skript řešení iotedgedev vás vyzve k provedení několika kroků, mezi které patří:

  • Ověřování v Azure
  • Volba předplatného Azure
  • Volba nebo vytvoření skupiny prostředků
  • Volba nebo vytvoření služby Azure IoT Hub
  • Volba nebo vytvoření zařízení Azure IoT Edge

Použijte Visual Studio Code a rozšíření Azure IoT Edge . Začnete vytvořením řešení a následným vygenerováním prvního modulu v daném řešení. Každé řešení může obsahovat více modulů.

  1. Vyberte paletu příkazů Zobrazit>.
  2. Na paletě příkazů zadejte a spusťte příkaz Azure IoT Edge: Nové řešení IoT Edge.
  3. Přejděte do složky, do které chcete vytvořit nové řešení, a pak vyberte Vybrat složku.
  4. Zadejte název řešení.
  5. Vyberte šablonu modulu pro preferovaný vývojový jazyk, který bude prvním modulem v řešení.
  6. Zadejte název modulu. Zvolte název, který je v registru kontejneru jedinečný.
  7. Zadejte název úložiště imagí modulu. Visual Studio Code 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í 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.

Visual Studio Code vezme informace, které jste zadali, vytvoří řešení IoT Edge a pak ho načte do nového okna.

Po vytvoření řešení jsou v řešení tyto hlavní soubory:

  • Složka .vscode obsahuje konfigurační soubor launch.json.

  • Složka modulů, která obsahuje podsložky pro každý modul. V podsložce pro každý modul řídí module.json soubor, jak se moduly sestavují a nasazují.

  • Soubor .env obsahuje seznam proměnných prostředí. Proměnná prostředí pro registr kontejneru je ve výchozím nastavení localhost:5000 .

  • Dva soubory nasazení modulu s názvem deployment.template.json a deployment.debug.template.json zobrazí seznam modulů, které se mají nasadit do vašeho zařízení. Ve výchozím nastavení seznam obsahuje systémové moduly IoT Edge (edgeAgent a edgeHub) a ukázkové moduly, jako jsou:

    • filtermodule je ukázkový modul, který implementuje jednoduchou funkci filtru.
    • Modul SimulatedTemperatureSensor , který simuluje data, která můžete použít k testování. Další informace o tom, jak fungují manifesty nasazení, najdete v tématu Informace o tom, jak pomocí manifestů nasazení nasazovat moduly a navazovat trasy. Další informace o tom, jak simulovaný modul teploty funguje, najdete ve zdrojovém kódu SimulatedTemperatureSensor.csproj.

    Poznámka:

    Přesné nainstalované moduly můžou záviset na zvoleném jazyce.

Nastavení verze modulu runtime IoT Edge

Nejnovější stabilní verze systémového modulu IoT Edge je 1.4. Nastavte systémové moduly na verzi 1.4.

  1. V editoru Visual Studio Code otevřete soubor manifestu nasazení deployment.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",
    

Zadání přihlašovacích údajů registru k agentu IoT Edge

V souboru prostředí jsou uložené přihlašovací údaje pro registr kontejneru, které soubor sdílí s modulem runtime IoT Edge. Modul runtime tyto přihlašovací údaje potřebuje k načtení imagí kontejneru do zařízení IoT Edge.

Rozšíření IoT Edge se pokusí načíst přihlašovací údaje registru kontejneru z Azure a naplnit je v souboru prostředí.

Poznámka:

Soubor prostředí se vytvoří pouze v případě, že pro modul zadáte úložiště imagí. Pokud jste přijali výchozí nastavení localhost pro místní testování a ladění, nemusíte deklarovat proměnné prostředí.

Zkontrolujte, jestli vaše přihlašovací údaje existují. Pokud ne, přidejte je teď:

  1. Pokud je azure Container Registry vaším registrem, nastavte uživatelské jméno a heslo služby Azure Container Registry. Tyto hodnoty získáte z nabídky klíčů Nastavení> Access v registru kontejneru na webu Azure Portal.

  2. Otevřete soubor .env v řešení modulu.

  3. Přidejte hodnoty uživatelského jména a hesla, které jste zkopírovali z registru kontejneru Azure. Příklad:

    CONTAINER_REGISTRY_SERVER="myacr.azurecr.io"
    CONTAINER_REGISTRY_USERNAME="myacr"
    CONTAINER_REGISTRY_PASSWORD="<registry_password>"
    
  4. Uložte změny do souboru .env .

Poznámka:

Tento kurz používá přihlašovací údaje správce pro Službu 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 nebo tokeny v oboru úložiště. Další informace najdete v tématu Správa přístupu k registru kontejneru.

Cílová architektura

Potřebujete vybrat architekturu, na kterou cílíte u každého řešení, protože to má vliv na to, jak se kontejner sestaví a spustí. Výchozí hodnota je Linux AMD64. Pro účely tohoto kurzu používáme jako zařízení IoT Edge virtuální počítač s Ubuntu a ponecháme výchozí amd64.

Pokud potřebujete změnit cílovou architekturu vašeho řešení, postupujte následovně.

  1. Otevřete paletu příkazů a vyhledejte Azure IoT Edge: Nastavte výchozí cílovou platformu pro řešení Edge nebo vyberte ikonu zástupce na bočním panelu v dolní části okna.

  2. Na paletě příkazů vyberte cílovou architekturu ze seznamu možností.

Cílová architektura se nastaví při vytváření image kontejneru v pozdějším kroku.

Aktualizace modulu pomocí vlastního kódu

Každá šablona obsahuje vzorový kód, který přijímá simulovaná data snímačů z modulu SimulatedTemperatureSensor a směruje je do centra IoT. Ukázkový modul přijímá zprávy a předává je dál. Funkce kanálu ukazuje důležitý koncept v IoT Edge, což je způsob, jakým moduly vzájemně komunikují.

Každý modul může mít v kódu deklarováno více vstupních a výstupních front. Centrum IoT Edge spuštěné na zařízení směruje zprávy z výstupu jednoho modulu do vstupu jednoho nebo více modulů. Specifický kód pro deklarování vstupů a výstupů se liší mezi jazyky, ale koncept je stejný ve všech modulech. Další informace o směrování mezi moduly naleznete v tématu Deklarování tras.

Ukázkový kód jazyka C#, který je součástí šablony projektu, používá třídu ModuleClient ze sady IoT Hub SDK pro .NET.

  1. V Průzkumníku editoru Visual Studio Code otevřete moduly>filtermodule>ModuleBackgroundService.cs.

  2. Před obor názvů filtermodule přidejte tři příkazy using pro typy, které se používají později:

    using System.Collections.Generic;     // For KeyValuePair<>
    using Microsoft.Azure.Devices.Shared; // For TwinCollection
    using Newtonsoft.Json;                // For JsonConvert
    
  3. Přidejte proměnnou temperatureThreshold do třídy ModuleBackgroundService . Tato proměnná nastaví hodnotu, kterou musí naměřená teplota překročit, aby se data odeslala do IoT Hubu.

    static int temperatureThreshold { get; set; } = 25;
    
  4. Přidejte třídy MessageBody, Stroj a Okolí. Tyto třídy definují očekávané schéma textu příchozích zpráv.

    class MessageBody
    {
        public Machine machine {get;set;}
        public Ambient ambient {get; set;}
        public string timeCreated {get; set;}
    }
    class Machine
    {
        public double temperature {get; set;}
        public double pressure {get; set;}
    }
    class Ambient
    {
        public double temperature {get; set;}
        public int humidity {get; set;}
    }
    
  5. Vyhledejte funkci ExecuteAsync. Tato funkce vytvoří a nakonfiguruje objekt ModuleClient , který umožňuje modulu připojit se k místnímu modulu runtime Azure IoT Edge pro odesílání a příjem zpráv. Po vytvoření objektu ModuleClient kód přečte hodnotu TemperatureThreshold z požadovaných vlastností dvojčete modulu. Kód zaregistruje zpětné volání pro příjem zpráv z centra IoT Edge prostřednictvím koncového bodu s názvem input1.

    Nahraďte volání metody ProcessMessageAsync novou metodou, která aktualizuje název koncového bodu a metodu, která se volá při přijetí vstupu. Přidejte také metodu SetDesiredPropertyUpdateCallbackAsync pro aktualizace požadovaných vlastností. Pokud chcete tuto změnu provést, nahraďte poslední řádekmetody ExecuteAsync následujícím kódem:

    // Register a callback for messages that are received by the module.
    // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken);
    
    // Read the TemperatureThreshold value from the module twin's desired properties
    var moduleTwin = await _moduleClient.GetTwinAsync();
    await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient);
    
    // Attach a callback for updates to the module twin's desired properties.
    await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null);
    
    // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method.
    await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);
    
  6. Přidejte metodu onDesiredPropertiesUpdate do třídy ModuleBackgroundService . Tato metoda přijímá aktualizace požadovaných vlastností dvojčete modulu a aktualizuje proměnnou temperatureThreshold na stejnou hodnotu. Všechny moduly mají vlastní dvojče, abyste mohli kód, který je spuštěný v modulu, konfigurovat přímo z cloudu.

    static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext)
    {
        try
        {
            Console.WriteLine("Desired property change:");
            Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    
            if (desiredProperties["TemperatureThreshold"]!=null)
                temperatureThreshold = desiredProperties["TemperatureThreshold"];
    
        }
        catch (AggregateException ex)
        {
            foreach (Exception exception in ex.InnerExceptions)
            {
                Console.WriteLine();
                Console.WriteLine("Error when receiving desired property: {0}", exception);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error when receiving desired property: {0}", ex.Message);
        }
        return Task.CompletedTask;
    }
    
  7. Přidejte metodu FilterMessages . Tato metoda se volá pokaždé, když modul dostane zprávu z IoT Edge Hubu. Odfiltruje zprávy, které hlásí nižší teploty, než je prahová hodnota nastavená ve dvojčeti modulu. Do zprávy také přidá vlastnost MessageType, která má nastavenou hodnotu Alert.

    async Task<MessageResponse> FilterMessages(Message message, object userContext)
    {
        var counterValue = Interlocked.Increment(ref _counter);
        try
        {
            ModuleClient moduleClient = (ModuleClient)userContext;
            var messageBytes = message.GetBytes();
            var messageString = Encoding.UTF8.GetString(messageBytes);
            Console.WriteLine($"Received message {counterValue}: [{messageString}]");
    
            // Get the message body.
            var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString);
    
            if (messageBody != null && messageBody.machine.temperature > temperatureThreshold)
            {
                Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " +
                    $"exceeds threshold {temperatureThreshold}");
                using (var filteredMessage = new Message(messageBytes))
                {
                    foreach (KeyValuePair<string, string> prop in message.Properties)
                    {
                        filteredMessage.Properties.Add(prop.Key, prop.Value);
                    }
    
                    filteredMessage.Properties.Add("MessageType", "Alert");
                    await moduleClient.SendEventAsync("output1", filteredMessage);
                }
            }
    
            // Indicate that the message treatment is completed.
            return MessageResponse.Completed;
        }
        catch (AggregateException ex)
        {
            foreach (Exception exception in ex.InnerExceptions)
            {
                Console.WriteLine();
                Console.WriteLine("Error in sample: {0}", exception);
            }
            // Indicate that the message treatment is not completed.
            var moduleClient = (ModuleClient)userContext;
            return MessageResponse.Abandoned;
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
            // Indicate that the message treatment is not completed.
            ModuleClient moduleClient = (ModuleClient)userContext;
            return MessageResponse.Abandoned;
        }
    }
    
  8. Uložte soubor ModuleBackgroundService.cs.

  9. V průzkumníku editoru Visual Studio Code otevřete soubor deployment.template.json v pracovním prostoru řešení IoT Edge.

  10. Vzhledem k tomu, že jsme změnili název koncového bodu, na který modul naslouchá, musíme také aktualizovat trasy v manifestu nasazení tak, aby edgeHub odesílal zprávy do nového koncového bodu.

    Najděte oddíl trasy ve dvojčeti modulu $edgeHub. Aktualizujte trasu sensorTofiltermodule tak, aby nahradila input1inputFromSensor:

    "sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"
    
  11. Přidejte dvojče modulu filtermodule do manifestu nasazení. Vložte následující obsah JSON do dolní části oddílu modulesContent za dvojče modulu $edgeHub:

       "filtermodule": {
           "properties.desired":{
               "TemperatureThreshold":25
           }
       }
    
  12. Uložte soubor deployment.template.json.

Sestavení a nasdílení řešení

Aktualizovali jste kód modulu a šablonu nasazení, abyste pochopili některé klíčové koncepty nasazení. Teď jste připraveni sestavit image kontejneru modulu a odeslat ji do registru kontejneru.

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

Pokud k uložení image modulu používáte Azure Container Registry, přidejte přihlašovací údaje do oddílu registryCredentials nastavení>moduleContent>edgeAgent>v deployment.template.json. Nahraďte myacr vlastním názvem registru a zadejte heslo a adresu přihlašovacího serveru. Příklad:

"registryCredentials": {
    "myacr": {
        "username": "myacr",
        "password": "<your_acr_password>",
        "address": "myacr.azurecr.io"
    }
}

Přidejte nebo nahraďte následující řetězecifikovaný obsah k hodnotě createOptions pro každý systém (edgeHub a edgeAgent) a vlastní modul (filtermodule a tempSensor). V případě potřeby změňte hodnoty.

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

Například konfigurace filtru by měla vypadat nějak takto:

"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
   "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
   "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}

Image Dockeru pro sestavení modulu

Otevřete integrovaný terminál editoru Visual Studio Code tak, že vyberete Terminál>nový terminál.

dotnet publish Pomocí příkazu sestavte image kontejneru pro architekturu Linux a amd64. Změňte adresář na adresář filtermodule v projektu a spusťte příkaz dotnet publish .

dotnet publish --os linux --arch x64 /t:PublishContainer

Šablona nástroje iotedgedev v současné době cílí na .NET 7.0. Pokud chcete cílit na jinou verzi .NET, můžete upravit soubor filtermodule.csproj a změnit hodnoty TargetFramework a PackageReference . Například pro cílení na .NET 8.0 by měl soubor filtermodule.csproj vypadat takto:

<Project Sdk="Microsoft.NET.Sdk.Worker">
    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
        <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
    </ItemGroup>
</Project>

Označte image Dockeru informacemi o registru kontejneru, verzí a architekturou. Nahraďte myacr vlastním názvem registru.

docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64

Image Dockeru modulu push

Zadejte přihlašovací údaje registru kontejneru do Dockeru, aby mohla odeslat image kontejneru do úložiště v registru.

  1. Přihlaste se k Dockeru pomocí přihlašovacích údajů služby Azure Container Registry (ACR).

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    Může se zobrazit upozornění zabezpečení, které doporučuje použití --password-stdin. I když se jedná o doporučený osvědčený postup pro produkční scénáře, je to mimo rozsah tohoto kurzu. Další informace najdete v referenčních informacích k přihlášení dockeru.

  2. Přihlaste se ke službě Azure Container Registry. Abyste mohli tento příkaz použít, musíte nainstalovat Azure CLI.az Tento příkaz požádá o uživatelské jméno a heslo, které najdete v registru kontejneru v klíčích Nastavení> Access.

    az acr login -n <ACR registry name>
    

    Tip

    Pokud se v některém okamžiku tohoto kurzu odhlásíte, opakujte kroky pro přihlášení do Dockeru a služby Azure Container Registry, abyste mohli pokračovat.

  3. 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/filtermodule:0.0.1-amd64
    
    # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name.
    
    az acr login --name myacr
    docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
    

Aktualizace šablony nasazení

Aktualizujte šablonu nasazení deployment.template.json umístěním image registru kontejneru. Pokud například používáte službu Azure Container Registry myacr.azurecr.io a vaše image je filtermodule:0.0.1-amd64, aktualizujte konfiguraci filtru na:

"filtermodule": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
}

V průzkumníku editoru Visual Studio Code klikněte pravým tlačítkem na soubor deployment.template.json a vyberte Sestavit a odeslat řešení IoT Edge.

Příkaz sestavení a nabízení spustí tři operace. Nejprve vytvoří novou složku v řešení s názvem config , která obsahuje úplný manifest nasazení, sestavený z informací v šabloně nasazení a dalších souborech řešení. Za druhé se spustí docker build sestavení image kontejneru na základě příslušného souboru Dockerfile pro vaši cílovou architekturu. Potom se spustí docker push pro nasdílení úložiště imagí do registru kontejneru.

Tento proces může trvat několik minut poprvé, ale při příštím spuštění příkazů je rychlejší.

Volitelné: Aktualizace modulu a image

Pokud provedete změny kódu modulu, musíte image modulu znovu sestavit a odeslat do registru kontejneru. Pomocí kroků v této části aktualizujte image sestavení a kontejneru. Tuto část můžete přeskočit, pokud jste neprováděli žádné změny kódu modulu.

Otevřete soubor deployment.amd64.json v nově vytvořené konfigurační složce. Název souboru odráží cílovou architekturu, takže se liší, pokud jste zvolili jinou architekturu.

Všimněte si, že dva parametry, které měly zástupné symboly, teď obsahují správné hodnoty. Oddíl registryCredentials obsahuje vaše uživatelské jméno a heslo registru načítané ze souboru .env . Modul filtermodule má celé úložiště imagí s názvem, verzí a značkou architektury ze souboru module.json .

  1. Otevřete soubor module.json ve složce filtermodule.

  2. Změňte číslo verze image modulu. Například zvýšení čísla verze opravy na "version": "0.0.2" to, jako kdybyste udělali malou opravu v kódu modulu.

    Tip

    Verze modulů umožňují správu verzí a umožňují otestovat změny na malé sadě zařízení před nasazením aktualizací do produkčního prostředí. Pokud před sestavením a nasdílením nenavýšíte verzi modulu, přepíšete úložiště v registru kontejneru.

  3. Uložte změny do souboru module.json .

Sestavte a odešlete aktualizovanou image se značkou verze 0.0.2 . Pokud chcete například sestavit a odeslat image pro místní registr nebo registr kontejneru Azure, použijte následující příkazy:


# Build the container image for Linux and amd64 architecture.

dotnet publish --os linux --arch x64

# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.

docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64

# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.

docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64

Znovu klikněte pravým tlačítkem na soubor deployment.template.json a znovu vyberte Sestavit a odeslat řešení IoT Edge.

Znovu otevřete soubor deployment.amd64.json. Všimněte si, že systém sestavení nevytvoří nový soubor, když znovu spustíte příkaz buildu a nasdílíte příkaz. Místo toho se stejný soubor aktualizuje tak, aby odrážel změny. Image filtermodule teď odkazuje na verzi kontejneru 0.0.2.

Pokud chcete dále ověřit, co příkaz build a push udělal, přejděte na web Azure Portal a přejděte do registru kontejneru.

V registru kontejneru vyberte Úložiště a pak filtermodule. Ověřte, že obě verze image nasdílí do registru.

Screenshot of where to view both image versions in your container registry.

Odstraňování potíží

Pokud při sestavování a nahrání image modulu narazíte na chyby, často se to týká konfigurace Dockeru na vývojovém počítači. Ke kontrole konfigurace použijte následující kontroly:

  • Spustili jste docker login příkaz pomocí přihlašovacích údajů, které jste zkopírovali z registru kontejneru? Tyto přihlašovací údaje se liší od přihlašovacích údajů, které používáte k přihlášení do Azure.
  • Je vaše úložiště kontejneru správné? Má správný název registru kontejneru a správný název modulu? Otevřete soubor module.json ve složce filtermodule a zkontrolujte ho. Hodnota úložiště by měla vypadat jako <název> registru.azurecr.io/filtermodule.
  • Pokud jste pro modul použili jiný název než filtermodule , je tento název v celém řešení konzistentní?
  • Používá váš počítač stejný typ kontejnerů, které vytváříte? Tento kurz je určený pro zařízení IoT Edge s Linuxem, takže Visual Studio Code by měl na bočním panelu říct amd64 nebo arm32v7 a Docker Desktop by měl používat linuxové kontejnery.

Nasazení modulů do zařízení

Ověřili jste, že v registru kontejneru jsou uložené image kontejnerů, takže je čas je nasadit do zařízení. Ujistěte se, že je vaše zařízení IoT Edge spuštěné a spuštěné.

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.template.json do ioT Hubu my-iot-hub pro zařízení IoT Edge my-device, použijte následující příkaz. Nahraďte hodnoty pro název centra, ID zařízení a přihlášení ioT Hubu připojovací řetězec vlastními.

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

Tip

IoT Hub připojovací řetězec, včetně sdíleného přístupového klíče, najdete na webu Azure Portal. Přejděte do nastavení>zabezpečení služby IoT Hub>: Zásady>sdíleného přístupu iothubowner.

  1. V Průzkumníku editoru Visual Studio Code v části Azure IoT Hub rozbalte zařízení , abyste viděli seznam zařízení IoT.

  2. Klikněte pravým tlačítkem na zařízení IoT Edge, do kterého chcete nasadit, a pak vyberte Vytvořit nasazení pro jedno zařízení.

  3. V Průzkumníku souborů přejděte do konfigurační složky a vyberte soubor deployment.amd64.json.

    Nepoužívejte soubor deployment.template.json, který neobsahuje přihlašovací údaje registru kontejneru ani hodnoty imagí modulu. Pokud cílíte na zařízení s Linuxem ARM32, název manifestu nasazení je deployment.arm32v7.json.

  4. V zařízení rozbalte moduly a zobrazte seznam nasazených a spuštěných modulů. Vyberte tlačítko aktualizovat. Měli byste vidět nové moduly tempSensor a filtermodule spuštěné na vašem zařízení.

    Spuštění modulů může trvat několik minut. Modul runtime IoT Edge potřebuje získat nový manifest nasazení, stáhnout image modulů z modulu runtime kontejneru a pak spustit každý nový modul.

Zobrazení zpráv ze zařízení

Kód ukázkového modulu přijímá zprávy prostřednictvím vstupní fronty a předává je prostřednictvím výstupní fronty. Manifest nasazení deklaroval trasy, které předávaly zprávy do modulu filtermodule z tempSensoru, a pak předávaly zprávy z modulu filtermodule do IoT Hubu. Rozšíření Azure IoT Edge a Azure IoT Hub umožňují zobrazovat zprávy při jejich příchodu do IoT Hubu z jednotlivých zařízení.

  1. V průzkumníku editoru Visual Studio Code klikněte pravým tlačítkem na zařízení IoT Edge, které chcete monitorovat, a pak vyberte Spustit monitorování integrovaného koncového bodu události.

  2. Podívejte se na okno výstupu v editoru Visual Studio Code a podívejte se na zprávy přicházející do centra IoT.

    Screenshot showing where to view incoming device to cloud messages.

Zobrazení změn na zařízení

Pokud chcete zjistit, co se děje na samotném zařízení, pomocí příkazů v této části zkontrolujte modul runtime IoT Edge a moduly spuštěné na vašem zařízení.

Příkazy v této části jsou určené pro vaše zařízení IoT Edge, ne pro váš vývojový počítač. Pokud pro zařízení IoT Edge používáte virtuální počítač, připojte se k němu. V Azure přejděte na stránku s přehledem virtuálního počítače a vyberte Připojení pro přístup k připojení k zabezpečenému prostředí.

  • Zobrazte všechny moduly nasazené do vašeho zařízení a zkontrolujte jejich stav:

    iotedge list
    

    Měly by se zobrazit čtyři moduly: dva moduly modulu runtime IoT Edge, tempSensor a filtermodule. Měly by se zobrazit všechny čtyři uvedené jako spuštěné.

  • Zkontrolujte protokoly pro konkrétní modul:

    iotedge logs <module name>
    

    Moduly IoT Edge rozlišují malá a velká písmena.

    Protokoly tempSensor a filtermodule by měly zobrazovat zprávy, které zpracovávají. Modul edgeAgent zodpovídá za spuštění ostatních modulů, takže jeho protokoly obsahují informace o implementaci manifestu nasazení. Pokud zjistíte, že modul není v seznamu nebo není spuštěný, protokoly edgeAgent pravděpodobně obsahují chyby. Modul EdgeHub zodpovídá za komunikaci mezi moduly a IoT Hubem. Pokud jsou moduly v provozu, ale zprávy nepřicházejí do vašeho centra IoT, protokoly EdgeHubu pravděpodobně obsahují chyby.

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 Visual Studio Code na vývojovém počítači a nasadíte svůj první modul IoT Edge, který obsahuje kód pro filtrování nezpracovaných dat generovaných zařízením IoT Edge.

V dalších kurzech se dozvíte, jak vám azure IoT Edge může pomoct nasadit cloudové služby Azure pro zpracování a analýzu dat na hraničních zařízeních.