Kurz: Nasazení azure Functions jako modulů IoT Edge

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.

Pomocí služby Azure Functions můžete nasadit kód, který implementuje vaši obchodní logiku přímo do zařízení Azure IoT Edge. Tento kurz vás provede vytvořením a nasazením funkce Azure Functions, která filtruje data senzorů na simulovaném zařízení IoT Edge. Simulované zařízení IoT Edge, které jste vytvořili v rychlých startech. V tomto kurzu se naučíte:

  • K vytvoření funkce Azure Functions použijte Visual Studio Code.
  • Pomocí editoru Visual Studio Code a Dockeru vytvořte image Dockeru a publikujte ji do registru kontejneru.
  • Nasadit modul z registru kontejneru do zařízení IoT Edge.
  • Zobrazit filtrovaná data.

Diagram of function architecture, showing how to stage and deploy a function module.

Funkce Azure, kterou vytvoříte v tomto kurzu, filtruje teplotní data vygenerovaná vaším zařízením. Funkce odesílá zprávy do služby Azure IoT Hub pouze v případech, kdy teplota překročí zadanou prahovou hodnotu.

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure 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í tohoto kurzu byste měli mít splněné následující požadavky:

Pokud chcete vyvíjet modul IoT Edge pomocí Azure Functions, nainstalujte do vývojového počítače další požadavky:

Vytvoření projektu funkce

Azure IoT Edge pro Visual Studio Code, který jste nainstalovali v požadavcích, poskytuje možnosti správy a také některé šablony kódu. V této části pomocí editoru Visual Studio Code vytvoříte řešení IoT Edge, které obsahuje funkci Azure Functions.

Vytvoření nového projektu

Při vytváření šablony řešení funkcí jazyka C#, která je přizpůsobitelná, 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ů Zobrazit>paletu příkazů otevř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.

    Screenshot showing where to add your Docker image repository name in Visual Studio Code.

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

Soubor prostředí vašeho ř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ž v souboru nejsou vaše přihlašovací údaje. 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é jméno a heslo, které jste zkopírovali z registru kontejneru Azure. Můžete je znovu najít tak, že přejdete do registru kontejneru v Azure a podíváte se na stránku Nastavení> Access key.
  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í. Až budete připraveni na produkční scénáře, doporučujeme použít možnost ověřování s nejnižšími oprávněními, jako jsou instanční objekty. Další informace najdete v tématu Správa přístupu k registru kontejneru.

Nastavení cílové architektury na AMD64

Spouštění modulů Azure Functions ve službě IoT Edge se podporuje jenom v kontejnerech založených na Linuxu AMD64. Výchozí cílová architektura pro Visual Studio Code je Linux AMD64, ale zde ji nastavíme explicitně 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

Pojďme přidat další kód, aby modul CSharpFunction před jejich předáním do IoT Hubu zprávy zpracuje na hraničním zařízení.

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

  2. Obsah souboru CSharpFunction.cs nahraďte následujícím kódem. Tento kód přijímá telemetrii o okolní a teplotě počítače a zprávu předá 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 upravili CSharpFunction tak, aby odfiltrovaly zprávy s hlášenými teplotami počítačů pod přijatelnou prahovou hodnotou. Teď je potřeba sestavit toto řešení jako image kontejneru a odeslat ho do registru kontejneru.

  1. Výběrem možnosti Zobrazit>terminál otevřete integrovaný terminál editoru Visual Studio Code.

  2. Přihlaste se k Dockeru zadáním následujícího příkazu v terminálu. Přihlaste se pomocí uživatelského jména, hesla a přihlašovacího serveru z registru kontejneru Azure. Tyto hodnoty můžete načíst z části Přístupové klíče vašeho registru na webu Azure Portal.

    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 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 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ý 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ší.

Zobrazení image kontejneru

Po odeslání image kontejneru do registru kontejneru zobrazí Visual Studio Code zprávu o úspěchu. Pokud chcete sami ověřit úspěch operace, můžete zobrazit image v registru.

  1. Na webu Azure Portal přejděte ke svému registru kontejneru Azure.
  2. Vyberte úložiště služeb>.
  3. Na seznamu byste měli vidět úložiště csharpfunction. Výběrem tohoto úložiště zobrazíte další podrobnosti.
  4. V části Značky by se měla zobrazit značka 0.0.1-amd64. Tato značka indikuje verzi a platformu image, kterou jste sestavili. Tyto hodnoty jsou nastavené v souboru module.json ve složce CSharpFunction.

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

Modul funkcí můžete nasadit na zařízení IoT Edge, jako jste to udělali v rychlém startu, pomocí webu Azure Portal. Moduly však můžete také nasadit a monitorovat z editoru Visual Studio Code. Následující části používají 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 modul 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ů. Klikněte na tlačítko pro obnovení. Měl by se zobrazit nový CSharpFunction spuštěný společně s modulem SimulatedTemperatureSensor a $edgeAgent a $edgeHub.

    Může to chvíli trvat, než se nové moduly zobrazí. Vaše zařízení IoT Edge musí načítat nové informace o nasazení ze služby IoT Hub, spouštět nové kontejnery a poté hlásit stav zpět do IoT Hubu.

    Screenshot showing how to view deployed modules in Visual Studio Code.

Zobrazení vygenerovaných dat

Všechny zprávy, které přicházejí do centra IoT ze všech vašich zařízení, můžete zobrazit spuštěním azure IoT Hubu: Spuštění monitorování integrovaného koncového bodu událostí na paletě příkazů. Pokud chcete zastavit monitorování zpráv, spusťte příkaz Azure IoT Hub: Zastavení monitorování integrovaného koncového bodu události na paletě příkazů.

Pomocí filtru také můžete zobrazit všechny zprávy přicházející do vašeho IoT Hubu z konkrétního zařízení. Klikněte pravým tlačítkem na zařízení v části Zařízení služby Azure IoT Hub>v Průzkumníku 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, 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 místní konfigurace a prostředky Azure vytvořené v tomto článku odstranit, 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 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í.