Sdílet prostřednictvím


Kurz: Nasazení azure Functions jako modulů IoT Edge

Platí pro:IoT Edge 1.5 - zaškrtnuto IoT Edge 1.5

Důležité

Podporovanou verzí je IoT Edge 1.5 LTS. IoT Edge 1.4 LTS je konec životnosti od 12. listopadu 2024. Pokud používáte starší verzi, podívejte se na článek Aktualizace IoT Edge.

Azure Functions můžete použít k nasazení kódu, který spouští obchodní logiku přímo na zařízeních Azure IoT Edge. V tomto kurzu se dozvíte, jak vytvořit a nasadit funkci Azure Functions, která filtruje data senzorů na simulovaném zařízení IoT Edge. Použijte simulované zařízení IoT Edge, které jste vytvořili v rychlých startech. V tomto kurzu se naučíte:

  • Použití Visual Studio Code k vytvoření funkce Azure
  • Použití editoru Visual Studio Code a Dockeru k vytvoření image Dockeru a jejímu publikování do registru kontejneru
  • Nasazení modulu z registru kontejneru do zařízení IoT Edge
  • Zobrazení filtrovaných dat

Diagram znázorňující architekturu funkcí, včetně postupu fáze a nasazení modulu funkcí

Funkce Azure, kterou vytvoříte v tomto kurzu, filtruje data o teplotě vygenerovaná vaším zařízením. Funkce odesílá zprávy do azure IoT Hubu pouze v případech, kdy teplota překročí zadanou prahovou hodnotu.

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

Požadavky

Než začnete s tímto kurzem, nastavte vývojové prostředí pro vývoj kontejnerů s Linuxem: Vývoj modulů Azure IoT Edge pomocí editoru Visual Studio Code. Po dokončení máte splněné následující požadavky:

Pokud chcete vyvíjet modul IoT Edge pomocí Azure Functions, nainstalujte na svůj vývojový počítač tyto další požadavky:

Vytvoření projektu funkce

Azure IoT Edge pro Visual Studio Code poskytuje možnosti správy a šablony kódu. V této části pomocí editoru Visual Studio Code vytvoříte řešení IoT Edge pomocí funkce Azure Functions.

Vytvoření nového projektu

Při vytváření přizpůsobitelné šablony řešení funkcí jazyka C# postupujte podle těchto kroků.

  1. Na vývojovém počítači otevřete Visual Studio Code.

  2. Výběrem palety příkazů Zobrazitotevřete editor Visual Studio Code.

  3. Na paletě příkazů přidejte a spusťte příkaz Azure IoT Edge: Nové řešení IoT Edge. Při vytváření řešení postupujte podle těchto výzev na paletě příkazů:

    • Vyberte složku: Zvolte umístění na vývojovém počítači pro Visual Studio Code a vytvořte soubory řešení.
    • Zadejte název řešení: přidejte popisný název řešení, například FunctionSolution, nebo přijměte výchozí hodnotu.|
    • Vyberte šablonu modulu: zvolte Azure Functions – C#.
    • Zadejte název modulu | Pojmenujte modul CSharpFunction.
    • Zadejte úložiště imagí Dockeru pro modul. Úložiště imagí zahrnuje název registru kontejneru a název image kontejneru. Image kontejneru se předvyplní z posledního kroku. Nahraďte localhost:5000 hodnotou přihlašovacího serveru z registru kontejneru Azure. Přihlašovací server můžete načíst ze stránky Přehled registru kontejneru na webu Azure Portal. Konečný řetězec vypadá takto: <název_registru>.azurecr.io/csharpfunction.

    Snímek obrazovky znázorňující, kam přidat název úložiště imagí Dockeru v editoru Visual Studio Code

Přidání přihlašovacích údajů registru

Soubor prostředí ve vašem řešení ukládá přihlašovací údaje pro registr kontejneru a sdílí je s modulem runtime IoT Edge. Modul runtime tyto přihlašovací údaje potřebuje k načtení privátních imagí do zařízení IoT Edge.

Rozšíření IoT Edge v editoru Visual Studio Code se pokusí načíst přihlašovací údaje registru kontejneru z Azure a naplnit je v souboru prostředí. Zkontrolujte, jestli už jsou vaše přihlašovací údaje v souboru. Pokud ne, přidejte je teď:

  1. V průzkumníku editoru Visual Studio Code otevřete .env soubor.
  2. Aktualizujte pole hodnotami uživatelského jména a hesla , které jste zkopírovali z registru kontejneru Azure. Pokud je chcete znovu najít, přejděte do registru kontejneru v Azure a podívejte se na stránku Nastavení>Přístupové klíče.
  3. Soubor uložte.

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í. V produkčním prostředí použijte možnost ověřování s nejnižšími oprávněními, jako jsou služební principály. Další informace najdete v tématu Správa přístupu k registru kontejneru.

Nastavení cílové architektury na AMD64

Moduly Azure Functions v IoT Edge se podporují jenom v kontejnerech založených na Linuxu AMD64. Výchozí cílová architektura pro Visual Studio Code je Linux AMD64, ale tady ji explicitně nastavíte na Linux AMD64.

  1. Otevřete paletu příkazů a vyhledejte Azure IoT Edge: Nastavte výchozí cílovou platformu pro řešení Edge.

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

Aktualizace modulu pomocí vlastního kódu

Přidejte kód, aby modul CSharpFunction zpracoval zprávy na hraně před jejich předáním do IoT Hubu.

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

  2. Obsah souboru CSharpFunction.cs nahraďte následujícím kódem. Tento kód přijímá telemetrii o teplotě okolního prostředí a počítače a předává zprávu službě IoT Hub pouze v případě, že teplota počítače překročí definovanou prahovou hodnotu.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.EdgeHub;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    
    namespace Functions.Samples
    {
        public static class CSharpFunction
        {
            [FunctionName("CSharpFunction")]
            public static async Task FilterMessageAndSendMessage(
                [EdgeHubTrigger("input1")] Message messageReceived,
                [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output,
                ILogger logger)
            {
                const int temperatureThreshold = 20;
                byte[] messageBytes = messageReceived.GetBytes();
                var messageString = System.Text.Encoding.UTF8.GetString(messageBytes);
    
                if (!string.IsNullOrEmpty(messageString))
                {
                    logger.LogInformation("Info: Received one non-empty message");
                    // Get the body of the message and deserialize it.
                    var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString);
    
                    if (messageBody != null && messageBody.machine.temperature > temperatureThreshold)
                    {
                        // Send the message to the output as the temperature value is greater than the threshold.
                        using (var filteredMessage = new Message(messageBytes))
                        {
                             // Copy the properties of the original message into the new Message object.
                             foreach (KeyValuePair<string, string> prop in messageReceived.Properties)
                             {filteredMessage.Properties.Add(prop.Key, prop.Value);}
                             // Add a new property to the message to indicate it is an alert.
                             filteredMessage.Properties.Add("MessageType", "Alert");
                             // Send the message.
                             await output.AddAsync(filteredMessage);
                             logger.LogInformation("Info: Received and transferred a message with temperature above the threshold");
                        }
                    }
                }
            }
        }
        //Define the expected schema for the body of incoming messages.
        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;}
        }
    }
    
  3. Uložte soubor.

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

V předchozí části jste vytvořili řešení IoT Edge a změnili CSharpFunction tak, aby odfiltrovály zprávy s hlášenými teplotami počítače pod přijatelnou prahovou hodnotou. Teď vytvořte řešení jako image kontejneru a nasdílejte ho do registru kontejneru.

  1. Otevřete integrovaný terminál editoru Visual Studio Code. Vyberte Zobrazit>Terminál.

  2. Přihlaste se k Dockeru v terminálu. Použijte uživatelské jméno, heslo a přihlašovací server z registru kontejneru Azure. Tyto hodnoty získáte v části Přístupové klíče vašeho registru na webu Azure Portal.

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

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

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

    Příkaz sestavení a nabízení spustí tři operace. Nejprve vytvoří v řešení novou složku s názvem config , která obsahuje úplný manifest nasazení, který je sestavený ze šablony nasazení a dalších souborů řešení. Za druhé, se spustí docker build, aby se image kontejneru sestavila na základě příslušného 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ší.

Zobrazení image kontejneru

Visual Studio Code zobrazí zprávu o úspěšném odeslání image kontejneru do registru kontejneru. Pokud chcete operaci potvrdit, zobrazte image v registru.

  1. Na webu Azure Portal přejděte do registru kontejneru Azure.
  2. Vyberte >.
  3. V seznamu se zobrazí úložiště csharpfunction . Výběrem tohoto úložiště zobrazíte další podrobnosti.
  4. V části Značky se zobrazí značka 0.0.1-amd64 . Tato značka zobrazuje verzi a platformu image, kterou jste vytvořili. Tyto hodnoty jsou nastaveny v souborumodule.json ve složce CSharpFunction .

Nasazení a spuštění řešení

Pomocí Azure Portal nasaďte modul funkcí do zařízení IoT Edge, stejně jako v rychlém startu. Moduly můžete také nasadit a monitorovat z editoru Visual Studio Code. Následující části používají rozšíření Azure IoT Edge a IoT Hub pro Visual Studio Code uvedená v požadavcích. Pokud jste to ještě neudělali, nainstalujte rozšíření.

  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 název zařízení IoT Edge a pak vyberte Vytvořit nasazení pro jedno zařízení.

  3. Přejděte do složky řešení, která obsahuje CSharpFunction. Otevřete konfigurační složku, vyberte soubor deployment.amd64.json a pak zvolte Vybrat manifest nasazení Edge.

  4. V zařízení rozbalte moduly a zobrazte seznam nasazených a spuštěných modulů. Vyberte tlačítko aktualizovat. Nový CSharpFunction můžete zobrazit společně s modulem SimulatedTemperatureSensor , $edgeAgent a $edgeHub.

    Zobrazení nových modulů může chvíli trvat. Zařízení IoT Edge načte nové informace o nasazení ze služby IoT Hub, spustí nové kontejnery a poté hlásí stav zpět do IoT Hubu.

    Snímek obrazovky znázorňující, jak zobrazit nasazené moduly v editoru Visual Studio Code

Zobrazení vygenerovaných dat

Pro zobrazení všech zpráv, které dorazí do centra IoT hubu od vašich zařízení, spusťte v paletě příkazů příkaz Azure IoT Hub: Start Monitoring Built-in Event Endpoint. Pokud chcete zastavit monitorování zpráv, spusťte Azure IoT Hub: Zastavení monitorování integrovaného koncového bodu události na paletě příkazů.

Pokud chcete vyfiltrovat zobrazení a zobrazit zprávy z konkrétního zařízení, klikněte pravým tlačítkem na zařízení v částiZařízení> v Průzkumníku editoru Visual Studio Code a vyberte Spustit monitorování integrovaného koncového bodu události.

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

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

Jinak odstraňte místní konfigurace a prostředky Azure, které jste vytvoř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 službu IoT Hub vytvořili v existují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ů, 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, můžete vybrat jednotlivé prostředky, které chcete odstranit jednotlivě.

Další kroky

V tomto kurzu jste vytvořili modul Azure Functions s kódem pro filtrování nezpracovaných dat generovaných zařízením IoT Edge.

Pokračujte dalšími kurzy, ve kterých se seznámíte s jinými způsoby, jak vám může Azure IoT Edge pomoct přeměnit data na obchodní informace na hraničním zařízení.