Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Použitelné pro:
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.
V tomto kurzu se dozvíte, jak vyvíjet a nasazovat kód do IoT Edge zařízení. Azure IoT Edge moduly umožňují nasadit kód, který spouští obchodní logiku přímo na IoT Edge zařízení. V rychlém startu nasazení kódu na zařízení s Linuxem jste nastavili zařízení IoT Edge a nasadili modul z obchodu Azure Marketplace.
Tento článek popisuje kroky dvou IoT Edge vývojových nástrojů:
- Vývojářský nástroj Azure IoT Edge příkazového řádku (CLI), který je upřednostňován pro vývoj.
- nástroje Azure IoT Edge pro rozšíření Visual Studio Code, které je v režimu maintenance.
Pomocí tlačítka selektoru nástrojů na začátku tohoto článku vyberte nástroj.
V tomto kurzu se naučíte:
- Nastavení vývojového počítače
- Vytvoření nového projektu pomocí nástrojů IoT Edge
- Sestavte projekt jako kontejner Docker a uložte ho do registru kontejneru Azure
- Nasazení kódu do zařízení IoT Edge
Modul IoT Edge, který v tomto kurzu vytvoříte, filtruje data o teplotě, která vaše zařízení generuje. Odesílá zprávy proti proudu pouze v případě, že teplota je nad nastavenou prahovou hodnotou. Tento druh analýzy na periferních zařízeních pomáhá snížit množství dat odesílaných i uložených v cloudu.
Požadavky
Vývojový počítač:
- Použijte vlastní počítač nebo virtuální počítač.
- Ujistěte se, že váš vývojový počítač podporuje vnořenou virtualizaci pro spuštění modulu kontejneru.
- K vývoji modulů IoT Edge pro zařízení s Linuxem můžete použít většinu operačních systémů, na kterých běží modul kontejneru. Tento kurz používá Windows počítač, ale také upozorňuje na známé rozdíly v systému macOS nebo Linux.
- Instalace Visual Studio Code
- Nainstalujte Azure CLI.
Zařízení Azure IoT Edge:
- Spusťte IoT Edge na samostatném zařízení. Udržování vývojového počítače a IoT Edge zařízení odděleně simuluje skutečný scénář nasazení a pomáhá udržet si přehled o konceptech. Pomocí článku rychlého startu Nasazení kódu na zařízení s Linuxem vytvořte zařízení IoT Edge v Azure nebo pomocí šablony Azure Resource Manager nasaďte virtuální počítač s podporou IoT Edge.
Cloudové prostředky:
- Použijte bezplatnou nebo standardní úroveň Azure IoT Hub.
Pokud účet Azure nemáte, vytvořte si účet free než začnete.
Návod
Pokyny k interaktivnímu ladění ve Visual Studio Code nebo ve Visual Studio 2022:
- Ladění modulů Azure IoT Edge pomocí Visual Studio Code
- Užívá Visual Studio 2022 k vývoji a ladění modulů pro Azure IoT Edge
Tento kurz popisuje 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. Do IoT Edge zařízení můžete nasadit jeden nebo více modulů. Moduly dělají konkrétní úlohy, jako je ingestování dat ze senzorů, čištění a analýza dat nebo odesílání zpráv do IoT Hub. Další informace najdete v tématu Podstatné moduly Azure IoT Edge.
Při vývoji modulů IoT Edge byste měli porozumět rozdílu mezi vývojovými počítači a cílovým IoT Edge zařízením, 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 vývoj modulu na počítači Windows, který cílí 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.
Návod
Pokud používáte IoT Edge pro Linux na Windows, cílové zařízení ve vašem scénáři je virtuální počítač s Linuxem, nikoli hostitel Windows.
Tento kurz cílí na zařízení běžícími IoT Edge s linuxovými kontejnery. Používejte upřednostňovaný operační systém, pokud váš vývojový počítač spouští kontejnery Linuxu. Visual Studio Code se doporučuje pro vývoj s kontejnery Linuxu, takže ho tento kurz používá. Můžete také použít Visual Studio, 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 kontejnery Linuxu v Visual Studio Code a 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 jazyk C# |
| Více informací | Azure IoT Edge pro Visual Studio Code |
Azure IoT Edge nástroje pro Visual Studio 2019 Azure IoT Edge nástroje pro Visual Studio 2022 |
Instalace modulu kontejneru
IoT Edge moduly jsou zabalené jako kontejnery, takže potřebujete systém pro správu kontejnerů kompatibilní s Docker na vývojovém počítači, abyste je mohli sestavovat a spravovat. Docker Desktop je oblíbenou volbou pro vývoj, protože má silnou podporu funkcí. Docker Desktop na Windows umožňuje přepínat mezi kontejnery Linuxu a kontejnery Windows, takže můžete vyvíjet moduly pro různé typy zařízení IoT Edge.
K instalaci Dockeru na vývojovém počítači použijte dokumentaci k Dockeru:
Install Docker Desktop for Windows. Při instalaci Docker Desktopu pro Windows se zobrazí dotaz, jestli chcete používat kontejnery Linux nebo Windows. Toto nastavení můžete kdykoli změnit. Tento kurz používá kontejnery Linuxu, protože moduly cílí na zařízení s Linuxem. Další informace najdete v tématu Switch between Windows and Linux containers.
Přečtěte si O Dockeru CE pro informace o instalaci na několika linuxových platformách. Pro Windows Subsystem for Linux (WSL) nainstalujte Docker Desktop pro Windows.
Nastavení nástrojů
Nainstalujte Python Azure IoT Edge Nástroj pro vývoj a vytvořte řešení IoT Edge. Máte dvě možnosti:
- Použijte preferovaný předpřipravený IoT Edge vývojový kontejner.
- Nainstalujte nástroj pomocí instalačního programu iotedgedev.
Důležité
Nástroje Azure IoT Edge pro rozšíření Visual Studio Code jsou v režimu maintenance. Upřednostňovaným vývojovým nástrojem je příkazový řádek (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 IoT Edge zařízení. V této části nainstalujete Visual Studio Code a rozšíření IoT a pak nastavíte účet Azure pro správu IoT Hub prostředků z Visual Studio Code.
- Nainstalujte rozšíření Azure IoT Edge.
- Nainstalujte rozšíření Azure IoT Hub.
- Po instalaci rozšíření otevřete paletu příkazů výběrem Zobrazit paletu příkazů>.
- Na paletě příkazů vyhledejte a vyberte Azure IoT Hub: Vyberte IoT Hub. Podle pokynů vyberte své předplatné Azure a IoT Hub.
- Otevřete oddíl průzkumníka Visual Studio Code tak, že vyberete ikonu na panelu aktivit nebo vyberete View > Explorer.
- V dolní části sekce Průzkumníka rozbalte sbalenou nabídku Azure IoT Hub / Zařízení. Zobrazí se zařízení a IoT Edge zařízení přidružená k IoT Hub, které 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ů. Pak tuto image nasdílíte do registru, který ukládá a spravuje vaše image. Nakonec nasadíte image z registru, aby mohla běžet na IoT Edge zařízení.
Důležité
Rozšíření Azure IoT Edge Visual Studio Code je v režimu údržby.
K uložení imagí kontejneru můžete použít libovolný registr kompatibilní s Dockerem. Dvě oblíbené služby registru Dockeru jsou Azure Container Registry a Docker Hub. Tento kurz používá Azure Container Registry.
Pokud ještě nemáte registr kontejneru, vytvořte nový v Azure následujícím postupem:
Na portálu Azure vyberte Vytvořit prostředek>Containers>Container Registry.
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 Základní. Vyberte Zkontrolovat a vytvořit a pak Vytvořit.
Vyberte svůj nový registr kontejneru v části Resources na domovské stránce portálu Azure a otevřete jej.
V levém podokně registru kontejneru vyberte z nabídky v části Nastavenípřístupové klíče.
Povolte uživatele správce pomocí přepínacího tlačítka a zobrazte uživatelské jméno a heslo pro registr kontejneru.
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 Visual Studio Code. Tyto šablony zahrnují všechny soubory a kód, které potřebujete k nasazení pracovního modulu k otestování IoT Edge, nebo vám poskytne výchozí bod pro přizpůsobení šablony vlastní obchodní logikou.
Vytvoření šablony projektu
Nástroj pro vývoj IoT Edge zjednodušuje vývoj Azure IoT Edge s příkazy řízenými proměnnými prostředí. Pomůže vám začít s vývojem IoT Edge pomocí IoT Edge Dev Containery a základní struktury IoT Edge řešení, která zahrnuje výchozí modul a všechny požadované konfigurační soubory.
Vytvořte adresář pro své řešení na požadované cestě. Přejděte do adresáře
iotedgesolution.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolutionPomocí příkazu
iotedgedev solution initvytvořte řešení a nastavte Azure IoT Hub ve zvoleném vývojovém jazyce:
Příkazový iotedgedev solution init řádek vás vyzve k provedení několika kroků, mezi které patří:
- Ověření v Azure
- Volba předplatného Azure
- Vyberte nebo vytvořte skupinu prostředků
- Vyberte nebo vytvořte Azure IoT Hub
- Volba nebo vytvoření Azure IoT Edge zařízení
Použijte Visual Studio Code a rozšíření Azure IoT Edge. Začněte vytvořením řešení a pak vygenerujte první modul v řešení. Každé řešení může obsahovat více modulů.
- Vyberte Zobrazit paletu příkazů>.
- Na paletě příkazů zadejte a spusťte příkaz Azure IoT Edge: Nové řešení IoT Edge.
- Přejděte do složky, do které chcete vytvořit nové řešení, a pak vyberte Vybrat složku.
- Zadejte název řešení.
- Vyberte šablonu modulu pro preferovaný vývojový jazyk, který bude prvním modulem v řešení.
- Zadejte název modulu. Zvolte název, který je v registru kontejneru jedinečný.
- Zadejte název úložiště imagí modulu. Visual Studio Code 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 server Login 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ázev vašeho modulu>.
Visual Studio Code vezme informace, které jste zadali, vytvoří IoT Edge řešení 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ů obsahuje podsložky pro každý modul. V každé podsložce module.json soubor řídí, 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í modulů, deployment.template.json a deployment.debug.template.json, uveďte moduly, 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 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.5. Nastavte systémové moduly na verzi 1.5.
V Visual Studio Code otevřete soubor manifestu nasazení deployment.template.json. Manifest deployment je dokument JSON popisující moduly, které se mají nakonfigurovat na cílovém zařízení IoT Edge.
Změňte verzi runtime pro obrazy systémového runtime modulu
edgeAgentaedgeHub. 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",
Zadejte přihlašovací údaje registru agentu IoT Edge.
Soubor prostředí ukládá přihlašovací údaje pro registr kontejneru a sdílí je s modulem IoT Edge runtime. Modul runtime tyto přihlašovací údaje potřebuje k načtení imagí kontejneru do IoT Edge zařízení.
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ď:
Pokud je Azure Container Registry vaším registrem, nastavte uživatelské jméno a heslo pro Azure Container Registry. Tyto hodnoty získáte z nabídky Nastavení>Přístupové klíče na portálu Azure.
Otevřete soubor .env v řešení modulu.
Přidejte hodnoty username a password, 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>"Uložte změny do souboru .env .
Poznámka:
Tento kurz 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 nejméně privilegovaného ověřování, jako jsou služební principály nebo tokeny omezené na úložiště. Další informace najdete v tématu Správa přístupu k registru kontejneru.
Cílová architektura
Vyberte 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žijte virtuální počítač s Ubuntu jako zařízení IoT Edge a ponechte výchozí amd64.
Pokud potřebujete změnit cílovou architekturu vašeho řešení, postupujte podle těchto kroků.
- Otevřete paletu příkazů a vyhledejte Azure IoT Edge: Nastavení výchozí cílové platformy pro Edge řešení nebo vyberte ikonu na bočním panelu v dolní části okna.
- 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 ukázkový kód, který přijímá simulovaná data snímačů z modulu SimulatedTemperatureSensor a směruje je do IoT Hub. 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: jak mezi sebou moduly 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 na vstup jednoho nebo více modulů. Specifický kód pro deklarování vstupů a výstupů se liší mezi jazyky, ale koncept je stejný pro všechny moduly. 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.
V Průzkumníku Visual Studio Code otevřete modules > filtermodule > ModuleBackgroundService.cs.
Před
filtermodulenamespace přidejte třiusingpříkazy 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 JsonConvertPřidejte proměnnou
temperatureThresholddoModuleBackgroundServicetřídy. Tato proměnná nastaví hodnotu, kterou musí naměřená teplota překročit, aby se data odesílala do IoT Hub.static int temperatureThreshold { get; set; } = 25;Přidejte
MessageBody,MachineaAmbienttřídy. 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;} }Najděte funkci
ExecuteAsync. Tato funkce vytvoří a nakonfiguruje objektModuleClient, který umožňuje modulu připojit se k místnímu modulu Azure IoT Edge runtime pro odesílání a přijímání zpráv. Po vytvořeníModuleClientkódu přečtetemperatureThresholdhodnotu 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ázveminput1.Nahraďte volání
ProcessMessageAsyncmetody novým, který aktualizuje název koncového bodu a metodu, která se volá při přijetí vstupu. Přidejte také metoduSetDesiredPropertyUpdateCallbackAsyncpro aktualizace požadovaných vlastností. Pokud chcete tuto změnu provést, nahraďte poslední řádekExecuteAsyncmetody 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);Přidejte metodu
OnDesiredPropertiesUpdateModuleBackgroundServicedo třídy. Tato metoda přijímá aktualizace požadovaných vlastností z dvojčete modulu a aktualizuje proměnnoutemperatureThresholdtak, aby odpovídala. 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; }Přidejte metodu
FilterMessages. Tato metoda se volá vždy, když modul obdrží zprávu z centra IoT Edge. Odfiltruje zprávy, které hlásí nižší teploty, než je prahová hodnota nastavená ve dvojčeti modulu. Přidá takéMessageTypevlastnost do zprávy s hodnotou nastavenou naAlert: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; } }Uložte soubor ModuleBackgroundService.cs .
V průzkumníku Visual Studio Code otevřete soubor deployment.template.json v pracovním prostoru řešení IoT Edge.
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 sekci
routesv dvojčeti modulu $edgeHub. Aktualizujte trasusensorTofiltermoduletak, abyinput1bylo nahrazenoinputFromSensor:"sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"Přidejte dvojče modulu filtermodule do manifestu nasazení. Do dolní části sekce
modulesContentvložte následující obsah JSON za dvojče modulu $edgeHub:"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }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 Visual Studio Code otevřete soubor manifestu nasazení deployment.template.json. Manifest deployment 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 Azure Container Registry a image modulů se správnými hodnotami createOptions. Další informace o hodnotách createOptions najdete v tématu Jak konfigurovat možnosti vytváření kontejnerů pro moduly IoT Edge.
Pokud k uložení image modulu použijete Azure Container Registry, přidejte přihlašovací údaje do oddílu modulesContent > edgeAgent > settings > registryCredentials 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ězcový obsah k createOptions hodnotě 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\"}]}}}"
filtermodule Například konfigurace 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 Visual Studio Code výběrem Terminal > 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 dotnet publish příkaz.
dotnet publish --os linux --arch x64 /t:PublishContainer
V současné době šablona nástroje iotedgedev cílí na .NET 7.0, která dosáhla konce podpory v květnu 2024. Aktualizujte projekt tak, aby cílil na .NET 8.0 (LTS, podporovaný do listopadu 2026), úpravou souboru filtermodule.csproj a změnou hodnot TargetFramework a PackageReference. Soubor filtermodule.csproj by měl 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.
Přihlaste se k Dockeru pomocí přihlašovacích údajů 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. Pro ověřování registru produkčního kontejneru místo přihlašovacích údajů správce použijte servisní identitu nebo tokeny s rozsahem úložiště. Další informace najdete v tématu Správa přístupu k registru kontejneru a referenční informace k přihlášení dockeru .Přihlaste se k Azure Container Registry. Pokud chcete použít příkaz , musíte
az. Tento příkaz požádá o uživatelské jméno a heslo, které najdete v registru kontejneru v přístupových klíčích Nastavení>:az acr login -n <ACR registry name>Návod
Pokud jste v libovolném okamžiku v tomto kurzu odhlášeni, opakujte kroky pro přihlášení do Dockeru a Azure Container Registry, abyste mohli pokračovat.
Odešlete obraz 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/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 zadáním umístění image v registru kontejneru. Pokud například používáte Azure Container Registry myacr.azurecr.io a image je filtermodule:0.0.0.1-amd64, aktualizujte konfiguraci filtermodule 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 Visual Studio Code klikněte pravým tlačítkem na soubor deployment.template.json a vyberte Build and Push IoT Edge Solution.
Příkaz sestavení a nahrání 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, aby sestavil image kontejneru na základě příslušného dockerfile pro vaši cílovou architekturu. Potom se spustí docker push pro nahrání úložiště obrazů do registru kontejneru.
První spuštění tohoto procesu může trvat několik minut, ale při příštím spuštění příkazů je to 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 uživatelské jméno a heslo vašeho registru, které jste získali ze souboru .env .
filtermodule má celé úložiště obrazů s názvem, verzí a značkou architektury ze souboru module.json.
Otevřete soubor module.json ve složce filtermodule .
Změňte číslo verze image modulu. Například zvyšte číslo verze opravy na
"version": "0.0.2", jako byste udělali malou opravu v kódu modulu.Návod
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.
Uložte změny do souborumodule.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 Build and Push IoT Edge Solution.
Znovu otevřete soubordeployment.amd64.json . Všimněte si, že systém sestavení nevytvoří nový soubor, když znovu spustíte příkaz "build and push". 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 portál Azure a přejděte do registru kontejneru. V registru kontejneru vyberte Úložiště a pak filtermodule. Ověřte, že obě verze obrazu byly odeslány do úložiště.
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 loginpří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í k Azure. - Je váš repozitář kontejneru v pořádku? 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 být podobná <názvu> 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í s Linuxem IoT Edge, takže Visual Studio Code by mělo uvádět amd64 nebo arm32v7 na bočním panelu a na Docker Desktopu by měly být spuštěné 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é.
Pomocí příkazu IoT Edge Azure CLI set-modules nasaďte moduly do Azure IoT Hub. Pokud chcete například nasadit moduly definované v souboru deployment.template.json do souboru IoT Hub my-iot-hub pro IoT Edge zařízení my-device, použijte následující příkaz. Nahraďte hodnoty hub-name, device-id a login IoT Hub connection string vlastními hodnotami.
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>"
Návod
Najděte řetězec připojení IoT Hub, včetně sdíleného přístupového klíče, na portálu Azure. Přejděte na svůj IoT Hub a vyberte Nastavení zabezpečení > zásady sdíleného přístupu > iothubowner.
V průzkumníku Visual Studio Code v části Azure IoT Hub rozbalte Zařízení, abyste viděli seznam svých IoT zařízení.
Klikněte pravým tlačítkem myši na zařízení IoT Edge, do kterého chcete nasadit, a vyberte Vytvořit nasazení pro jedno zařízení.
V Průzkumníku souborů přejděte do konfigurační složky a vyberte deployment.amd64.json soubor.
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.
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, které běží na vašem zařízení.
Spuštění modulů může trvat několik minut. Runtime IoT Edge obdrží nový manifest nasazení, stáhne obrazy modulů z runtime kontejneru a pak spustí každý nový modul.
Zobrazení zpráv ze zařízení
Kód ukázkového modulu získává zprávy prostřednictvím vstupní fronty a odesílá je prostřednictvím výstupní fronty. Manifest nasazení nastaví trasy, které odesílají zprávy do filtermodule z tempSensor a potom přeposílají zprávy z filtermodule do IoT Hub. Rozšíření Azure IoT Edge a Azure IoT Hub umožňují zobrazovat zprávy při jejich doručení na IoT Hub ze zařízení.
V průzkumníku Visual Studio Code vyberte zařízení IoT Edge, které chcete monitorovat, a pak zvolte Spustit monitorování vestavěného koncového bodu události.
Podívejte se na okno výstupu v Visual Studio Code a podívejte se na zprávy doručené na IoT Hub.
Zobrazení změn na zařízení
Pokud chcete zjistit, co se na vašem zařízení děje, pomocí příkazů v této části zkontrolujte moduly runtime IoT Edge a moduly spuštěné na vašem zařízení.
Tyto příkazy jsou určené pro vaše zařízení IoT Edge, ne pro 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 Pojení 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 listZobrazí se čtyři moduly: dva moduly modulu runtime IoT Edge, tempSensor a filtermodule. Všechny čtyři by měly být uvedené jako spuštěné.
Zkontrolujte protokoly pro konkrétní modul:
iotedge logs <module name>V názvech modulů se rozlišují malá a velká písmena.
Protokoly tempSensor a filtermodule ukazují zprávy, které zpracovávají. Modul edgeAgent spustí ostatní moduly, takže jeho protokoly obsahují informace o manifestu nasazení. Pokud modul není uvedený nebo není spuštěný, zkontrolujte chyby v protokolech edgeAgent. Modul edgeHub spravuje komunikaci mezi moduly a IoT Hub. Pokud jsou moduly spuštěné, ale zprávy nepřicházejí na váš IoT Hub, zkontrolujte chyby v protokolech edgeHub.
Vyčištění prostředků
Pokud chcete pokračovat k dalšímu doporučenému článku, ponechte prostředky a konfigurace, které jste vytvořili, a znovu je použijte. Můžete také dál používat stejné IoT Edge zařízení jako testovací zařízení. Abyste se vyhnuli poplatkům, odstraňte místní konfiguraci a prostředky Azure, které jste použili v tomto článku.
Odstraňte prostředky Azure
Odstranění prostředků a skupin prostředků v Azure nelze vrátit zpět. Dávejte pozor, abyste omylem nesmazali nesprávnou skupinu prostředků nebo zdroje. 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:
- Přihlaste se k portálu Azure a vyberte Sourcové skupiny.
- Vyberte název skupiny prostředků, která obsahuje vaše IoT Edge testovací prostředky.
- 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ší 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 s kódem, který filtruje nezpracovaná data vygenerovaná vaším zařízením IoT Edge.
Pokračujte v dalším tutoriálu, kde se dozvíte, jak Azure IoT Edge umožňuje nasazení služeb Azure cloud, aby zpracovávaly a analyzovaly data na okraji.