Megosztás a következőn keresztül:


Oktatóanyag: Az Azure Functions üzembe helyezése IoT Edge-modulokként

A következőkre vonatkozik:IoT Edge 1.5 pipa IoT Edge 1.5 IoT Edge 1.4 pipa IoT Edge 1.4

Fontos

Az IoT Edge 1.5 LTS és az IoT Edge 1.4 LTS támogatott kiadások. Az IoT Edge 1.4 LTS 2024. november 12-én megszűnik. Ha egy korábbi kiadáson dolgozik, olvassa el az IoT Edge frissítése című témakört.

Az Azure Functions használatával olyan kódot helyezhet üzembe, amely közvetlenül az Azure IoT Edge-eszközökön valósítja meg az üzleti logikát. Ez az oktatóanyag végigvezeti egy Olyan Azure-függvény létrehozásán és üzembe helyezésén, amely szűri az érzékelőadatokat a szimulált IoT Edge-eszközön. A rövid útmutatókban létrehozott szimulált IoT Edge-eszközt használja. Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Azure-függvény létrehozása a Visual Studio Code használatával.
  • A Visual Studio Code és a Docker használatával hozzon létre egy Docker-lemezképet, és tegye közzé egy tárolóregisztrációs adatbázisban.
  • A modul üzembe helyezése egy tárolóregisztrációs adatbázisból az IoT Edge-eszközön.
  • Szűrt adatok megtekintése.

Függvényarchitektúra diagramja, amely bemutatja, hogyan lehet szakaszos és üzembe helyezni egy függvénymodult.

Az oktatóanyagban létrehozott Azure-függvény szűri az eszköz által létrehozott hőmérsékleti adatokat. A függvény csak akkor küld üzeneteket az Azure IoT Hub felé, ha a hőmérséklet meghaladja a megadott küszöbértéket.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Előfeltételek

Az oktatóanyag megkezdése előtt végezze el az oktatóanyagot a Linux-tárolók fejlesztéséhez szükséges fejlesztői környezet beállításához: Azure IoT Edge-modulok fejlesztése a Visual Studio Code használatával. Az oktatóanyag elvégzése után a következő előfeltételeknek kell teljesülnie:

Ha IoT Edge-modult szeretne fejleszteni az Azure Functions használatával, telepítsen további előfeltételeket a fejlesztőgépre:

Függvényprojekt létrehozása

Az előfeltételekben telepített Azure IoT Edge for Visual Studio Code felügyeleti képességeket és néhány kódsablont is biztosít. Ebben a szakaszban a Visual Studio Code használatával hoz létre egy Azure-függvényt tartalmazó IoT Edge-megoldást.

Új projekt létrehozása

Kövesse az alábbi lépéseket egy testre szabható C#-függvénymegoldás-sablon létrehozásához.

  1. Nyissa meg a Visual Studio Code-ot a fejlesztői gépen.

  2. Nyissa meg a Visual Studio Code parancskatalógusát a Parancskatalógus megtekintése>gombra kattintva.

  3. A parancskatalógusban adja hozzá és futtassa az Azure IoT Edge: Új IoT Edge-megoldás parancsot. A megoldás létrehozásához kövesse az alábbi utasításokat a parancskatalógusban:

    • Válasszon ki egy mappát: válassza ki a Visual Studio Code fejlesztői gépének helyét a megoldásfájlok létrehozásához.
    • Adjon meg egy megoldásnevet: adjon hozzá egy leíró nevet a megoldáshoz, például a FunctionSolution nevet, vagy fogadja el az alapértelmezett értéket.|
    • Válasszon egy modulsablont: válassza az Azure Functions – C# lehetőséget.
    • Adja meg a modul nevét | Nevezze el a CSharpFunction modult.
    • Adjon meg egy Docker-rendszerképtárat a modulhoz. Egy rendszerképadattár a tárolóregisztrációs adatbázis nevét és a tárolórendszerkép nevét tartalmazza. A tárolórendszerkép az utolsó lépéstől kezdve előre ki van töltve. Cserélje le a localhost:5000 értéket az Azure-tárolóregisztrációs adatbázis bejelentkezési kiszolgálójának értékére. A bejelentkezési kiszolgáló az Azure Portal tárolóregisztrációs adatbázisának Áttekintés oldaláról kérhető le. A sztring végső változata a következőképpen néz ki: <registry name>.azurecr.io/csharpfunction.

    Képernyőkép a Docker-rendszerkép-adattár nevének a Visual Studio Code-ban való hozzáadásáról.

A regisztrációs adatbázis hitelesítő adatainak hozzáadása

A megoldás környezeti fájlja tárolja a tárolóregisztrációs adatbázis hitelesítő adatait, és megosztja őket az IoT Edge-futtatókörnyezettel. A futtatókörnyezetnek szüksége van ezekre a hitelesítő adatokra, hogy lekérje a privát rendszerképeket az IoT Edge-eszközére.

A Visual Studio Code IoT Edge-bővítménye megpróbálja lekérni a tárolóregisztrációs adatbázis hitelesítő adatait az Azure-ból, és feltölti őket a környezeti fájlban. Ellenőrizze, hogy a hitelesítő adatai már szerepelnek-e a fájlban. Ha nem, vegye fel őket most:

  1. Nyissa meg .env a fájlt a Visual Studio Code Explorerben.
  2. Adja meg az Azure Container Registryből kimásolt felhasználónevet és jelszót a megfelelő mezőkben. Az azure-beli tárolóregisztrációs adatbázisba lépve újra megtalálhatja őket, és megkeresheti a Gépház> Access kulcsok lapját.
  3. Mentse el ezt a fájlt.

Feljegyzés

Ez az oktatóanyag rendszergazdai bejelentkezési hitelesítő adatokat használ az Azure Container Registryhez, amelyek fejlesztési és tesztelési forgatókönyvek esetén kényelmesek. Ha készen áll az éles helyzetekre, javasoljuk a minimális jogosultságú hitelesítési lehetőséget, például a szolgáltatásnevek használatát. További információ: A tárolóregisztrációs adatbázishoz való hozzáférés kezelése.

Célarchitektúra beállítása AMD64-re

Az Azure Functions-modulok IoT Edge-en való futtatása csak Linux AMD64-alapú tárolókon támogatott. A Visual Studio Code alapértelmezett célarchitektúrája a Linux AMD64, de itt kifejezetten a Linux AMD64-et fogjuk beállítani.

  1. Nyissa meg a parancskatalógust, és keresse meg az Azure IoT Edge: Set Default Target Platform for Edge Solution (Alapértelmezett célplatform beállítása edge-megoldáshoz) parancskatalógust.

  2. A parancskatalógusban válassza ki az AMD64 célarchitektúrát a lehetőségek listájából.

A modul módosítása egyéni kóddal

Adjunk hozzá néhány további kódot, hogy a CSharpFunction modul feldolgozza az üzeneteket a peremhálózaton, mielőtt továbbítsa őket az IoT Hubra.

  1. A Visual Studio Code Explorerben nyissa meg a CSharpFunction>CSharpFunction.cs modulokat.>

  2. Cserélje le a CSharpFunction.cs fájl tartalmát a következő kódra. Ez a kód telemetriai adatokat kap a környezeti és a gép hőmérsékletéről, és csak akkor továbbítja az üzenetet az IoT Hubnak, ha a gép hőmérséklete meghaladja a megadott küszöbértéket.

    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. Mentse a fájlt.

Az IoT Edge-megoldás létrehozása és leküldése

Az előző szakaszban létrehozott egy IoT Edge-megoldást, és módosította a CSharpFunctiont, hogy kiszűrje az elfogadható küszöbérték alatti jelentett gépi hőmérsékletű üzeneteket. Most létre kell hoznia a megoldást tárolórendszerképként, és le kell küldenie a tárolóregisztrációs adatbázisba.

  1. Nyissa meg a Visual Studio Code integrált terminálját a Terminál megtekintése>lehetőséget választva.

  2. Jelentkezzen be a Dockerbe az alábbi parancs beírásával a terminálon. Jelentkezzen be a felhasználónévvel, jelszóval és bejelentkezési kiszolgálóval az Azure-tárolóregisztrációs adatbázisból. Ezeket az értékeket lekérheti a beállításjegyzék Access-kulcsok szakaszából az Azure Portalon.

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

    Biztonsági figyelmeztetést kaphat, amely a használatát --password-stdinjavasolja. Bár ez az ajánlott eljárás éles forgatókönyvekhez ajánlott, az oktatóanyag hatókörén kívül esik. További információkért tekintse meg a Docker bejelentkezési referenciát.

  3. A Visual Studio Code Explorerben kattintson a jobb gombbal a deployment.template.json fájlra, és válassza a Build and Push IoT Edge Solution (IoT Edge-megoldás létrehozása és leküldése) lehetőséget.

    A buildelési és leküldéses parancs három műveletet indít el. Először létrehoz egy új mappát a konfiguráció nevű megoldásban, amely tartalmazza a teljes üzembehelyezési jegyzékfájlt, amely az üzembehelyezési sablonban és más megoldásfájlokban található információkból épül fel. Másodszor, a tárolórendszerkép létrehozásához fut docker build a célarchitektúra megfelelő dockerfile-fájlja alapján. Ezután leküldi docker push a rendszerkép-adattárat a tárolóregisztrációs adatbázisba.

    Ez a folyamat első alkalommal több percet is igénybe vehet, de a parancsok legközelebbi futtatása gyorsabb lesz.

A tárolórendszerkép megtekintése

A Visual Studio Code sikert jelző üzenetet küld, miután leküldte a tárolórendszerképet a tárolóregisztrációs adatbázisba. Ha személyesen is ellenőrizni szeretné a műveletet, keresse meg a rendszerképet az adatbázisban.

  1. Az Azure Portalon tallózzon az Azure Container Registry-adatbázisra.
  2. Válassza ki a Services-adattárakat>.
  3. Ekkor a csharpfunction adattár jelenik meg a listában. Válassza ki az adattárat a további részletek megtekintéséhez.
  4. A Címkék szakaszban megjelenik a 0.0.1-amd64 címke. Ez a címke jelzi a létrehozott rendszerkép verziószámát és platformját. Ezek az értékek a CSharpFunction mappa module.json fájljában találhatók meg.

A megoldás üzembe helyezése és futtatása

Az Azure Portal használatával üzembe helyezheti a függvénymodult egy IoT Edge-eszközön, mint a rövid útmutatóban. A modulokat emellett a Visual Studio Code használatával is üzembe helyezheti és monitorozhatja. A következő szakaszok az előfeltételek között felsorolt Visual Studio Code-hoz készült Azure IoT Edge-et és IoT Hubot használják. Ha még nem tette meg, telepítse a bővítményeket.

  1. A Visual Studio Code Explorer Azure IoT Hub szakaszában bontsa ki az Eszközök elemet az IoT-eszközök listájának megtekintéséhez.

  2. Kattintson a jobb gombbal az IoT Edge-eszköz nevére, majd válassza az Üzembe helyezés létrehozása önálló eszközhöz lehetőséget.

  3. Navigáljon a CSharpFunction függvényt tartalmazó megoldásmappához. Nyissa meg a konfigurációs mappát, jelölje ki a deployment.amd64.json fájlt, majd válassza az Edge központi telepítési jegyzékfájljának kiválasztása lehetőséget.

  4. Az eszköz alatt bontsa ki a Modulok elemet az üzembe helyezett és a futó modulok listájának megtekintéséhez. Kattintson a frissítés gombra. Az új CSharpFunction a SimulatedTemperatureSensor modullal, valamint a $edgeAgent és $edgeHub együtt fut.

    Eltarthat néhány percig, mire az új modulok megjelennek. Az IoT Edge-eszköznek le kell kérnie az új üzembehelyezési adatait az IoT Hubról, el kell indítania az új tárolókat, majd jelentenie kell az állapotot az IoT Hubnak.

    Képernyőkép az üzembe helyezett modulok Visual Studio Code-ban való megtekintéséről.

A létrejött adatok megtekintése

A parancskatalógusban az összes eszközről érkező összes üzenet megjelenik az IoT Hubra az Azure IoT Hub: Beépített eseményvégpont figyelése indítása parancskatalógusban való futtatásával. Az üzenetek monitorozásának leállításához futtassa az Azure IoT Hub: A beépített eseményvégpont figyelésének leállítása parancskatalógusban parancsot.

A nézetet szűrheti is, hogy csak a megjelölt eszközről az IoT Hub-központra érkező üzenetek jelenjenek meg. Kattintson a jobb gombbal az eszközre a Visual Studio Code Explorer Azure IoT Hub-eszközök> szakaszában, és válassza a Beépített eseményvégpont monitorozásának indítása lehetőséget.

Az erőforrások eltávolítása

Ha azt tervezi, hogy a következő ajánlott cikkel folytatja, megtarthatja és újból felhasználhatja a létrehozott erőforrásokat és konfigurációkat. Azt is megteheti, hogy ugyanezt az IoT Edge-eszközt használja teszteszközként.

Ellenkező esetben a díjak elkerülése érdekében törölheti a jelen cikkben létrehozott helyi konfigurációkat és Azure-erőforrásokat.

Azure-erőforrások törlése

Az Azure-erőforrások és -erőforráscsoportok törlése visszafordíthatatlan. Figyeljen, nehogy véletlenül rossz erőforráscsoportot vagy erőforrásokat töröljön. Ha egy meglévő erőforráscsoporton belül hozta létre az IoT Hubot, amelynek erőforrásait meg szeretné tartani, csak magát az IoT Hub-erőforrást törölje, nem pedig az erőforráscsoportot.

Az erőforrások törlése:

  1. Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.

  2. Válassza ki az IoT Edge teszterőforrásokat tartalmazó erőforráscsoport nevét.

  3. Tekintse át az erőforráscsoportban található erőforrások listáját. Ha mindet törölni szeretné, válassza az Erőforráscsoport törlése lehetőséget. Ha csak bizonyos elemeket szeretne törölni, az egyes erőforrásokra kattintva külön törölheti őket.

Következő lépések

Ebben az oktatóanyagban létrehozott egy Azure-függvénymodult kóddal az IoT Edge-eszköz által létrehozott nyers adatok szűréséhez.

Továbbléphet a következő oktatóanyagokra, és megtudhatja, milyen más módokon alakíthatja üzleti megállapításokká ezeket az adatokat a peremhálózaton az Azure IoT Edge segítségével.