Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Applies to:
IoT Edge 1.5
Viktigt!
IoT Edge 1.5 LTS är den version som stöds. IoT Edge 1.4 LTS upphörde den 12 november 2024. Om du använder en tidigare version läser du Update IoT Edge.
Använd Azure Functions för att distribuera kod som kör din affärslogik direkt på dina Azure IoT Edge enheter. Den här självstudien visar hur du skapar och distribuerar en Azure-funktion som filtrerar sensordata på en simulerad IoT Edge enhet. Använd den simulerade IoT Edge enhet som du skapade i snabbstarterna. I den här handledningen lär du dig att:
- Använd Visual Studio Code för att skapa en Azure-funktion
- Använd Visual Studio Code och Docker för att skapa en Docker-avbildning och publicera den i ett containerregister
- Distribuera modulen från containerregistret till din IoT Edge enhet
- Visa filtrerade data
Den Azure funktion som du skapar i den här självstudien filtrerar temperaturdata som genereras av enheten. Funktionen skickar bara meddelanden uppströms till Azure IoT Hub när temperaturen är över ett angivet tröskelvärde.
Om du inte har ett Azure konto skapar du ett fritt konto innan du börjar.
Förutsättningar
Innan du påbörjar den här självstudien följer du självstudien för att konfigurera utvecklingsmiljön för Linux-containerutveckling: Utveckla Azure IoT Edge moduler med hjälp av Visual Studio Code. När du är klar har du följande förutsättningar:
- En kostnadsfri eller standardnivå IoT Hub i Azure.
- En AMD64-enhet som kör Azure IoT Edge med Linux-containrar. Använd snabbstarten för att konfigurera en Linux-enhet eller Windows enhet.
- Ett containerregister, till exempel Azure Container Registry.
- Visual Studio Code konfigureras med tilläggen Azure IoT Edge och Azure IoT Hub. Tillägget Azure IoT Edge för Visual Studio Code är i underhållsläge.
- Ladda ned och installera ett Docker-kompatibelt containerhanteringssystem på utvecklingsdatorn. Ange att den ska köra Linux-containrar.
Om du vill utveckla en IoT Edge modul med Azure Functions installerar du följande ytterligare krav på utvecklingsdatorn:
Skapa ett funktionsprojekt
Azure IoT Edge för Visual Studio Code ger dig hanteringsfunktioner och kodmallar. I det här avsnittet använder du Visual Studio Code för att skapa en IoT Edge lösning med en Azure funktion.
Skapa ett nytt projekt
Följ de här stegen för att skapa en anpassningsbar C#-funktionslösningsmall.
Öppna Visual Studio Code på utvecklingsdatorn.
Öppna kommandopaletten Visual Studio Code genom att välja View > Command Palette.
I kommandopaletten lägger du till och kör kommandot Azure IoT Edge: Ny IoT Edge lösning. Följ de här anvisningarna i kommandopaletten för att skapa din lösning:
- Välj en mapp: välj platsen på utvecklingsdatorn för Visual Studio Code för att skapa lösningsfilerna.
- Ange ett lösningsnamn: lägg till ett beskrivande namn för din lösning, till exempel FunctionSolution, eller acceptera standardvärdet.
- Välj en modulmall: välj Azure Functions – C#.
- Ange ett modulnamn: ge modulen namnet CSharpFunction.
- Ange en Docker-avbildningslagringsplats för modulen: en avbildningslagringsplats innehåller namnet på containerregistret och namnet på containeravbildningen. Portalen fyller i containeravbildningen i förväg från det senaste steget. Ersätt localhost:5000 med värdet Login server från ditt Azure containerregister. Du kan hämta Login-servern från sidan Overview i containerregistret i Azure-portalen. Den sista strängen ser ut som
<registry name>.azurecr.io/csharpfunction.
Lägg till autentiseringsuppgifter för registret
Miljöfilen i din lösning lagrar autentiseringsuppgifterna för containerregistret och delar dem med IoT Edge körningsmiljön. Körmiljön behöver dessa autentiseringsuppgifter för att dra dina privata avbildningar till din IoT Edge-enhet.
Det IoT Edge tillägget i Visual Studio Code försöker hämta dina autentiseringsuppgifter för containerregistret från Azure och fylla i dem i miljöfilen. Kontrollera om dina autentiseringsuppgifter redan finns i filen. Om inte lägger du till dem nu:
- I Visual Studio Code explorer öppnar du filen .env.
- Uppdatera fälten med värdena username och password som du kopierade från ditt Azure containerregister. Om du vill hitta dem igen går du till containerregistret i Azure och tittar på sidan Inställningar > Åtkomstnycklar.
- Spara den här filen.
Kommentar
I den här självstudien används autentiseringsuppgifter för administratörsinloggning för Azure Container Registry, vilket är praktiskt för utvecklings- och testscenarier. För produktion, använd ett autentiseringsalternativ med lägsta behörighet som tjänsthuvudnamn. Mer information finns i Hantera åtkomst till containerregistret.
Ange målarkitektur till AMD64
Azure Functions moduler på IoT Edge stöds endast på Linux AMD64-baserade containrar. Standardmålarkitekturen för Visual Studio Code är Linux AMD64, men du kan ange den uttryckligen till Linux AMD64 här.
- Öppna kommandopaletten och sök efter Azure IoT Edge: Ange standardmålplattform för Edge-lösning.
- I kommandopaletten väljer du AMD64-målarkitekturen i listan med alternativ.
Uppdatera modulen med anpassad kod
Lägg till kod så att modulen CSharpFunction bearbetar meddelanden vid gränsen innan de vidarebefordras till IoT Hub.
I Visual Studio Code explorer öppnar du modules > CSharpFunction > CSharpFunction.cs.
Ersätt innehållet i CSharpFunction.cs-filen med följande kod. Den här koden tar emot telemetri om omgivnings- och datortemperatur och vidarebefordrar meddelandet till IoT Hub endast om datortemperaturen ligger över ett definierat tröskelvärde.
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;} } }Spara filen.
Skapa och push-överföra din IoT Edge lösning
I föregående avsnitt skapade du en IoT Edge lösning och ändrade CSharpFunction för att filtrera bort meddelanden med rapporterade datortemperaturer under det acceptabla tröskelvärdet. Skapa nu lösningen som en containeravbildning och skicka den till containerregistret.
Öppna den Visual Studio Code integrerade terminalen. Välj Visa > terminal.
Logga in på Docker i terminalen. Använd användarnamnet, lösenordet och autentiseringsservern från ditt Azure containerregister. Hämta dessa värden från avsnittet Åtkomstnycklar i registret i Azure-portalen.
docker login -u <ACR username> -p <ACR password> <ACR login server>Du kan få en säkerhetsvarning som rekommenderar användning av
--password-stdin. Även om den bästa metoden rekommenderas för produktionsscenarier ligger den utanför omfånget för den här självstudien. Mer information finns i docker-inloggningsreferensen.Högerklicka på filen deployment.template.json i Visual Studio Code explorer och välj sedan Build och Push IoT Edge Solution.
Kommandot build och push startar tre åtgärder. Först skapar den en ny mapp i lösningen med namnet config som har det fullständiga distributionsmanifestet, som skapas från distributionsmallen och andra lösningsfiler. För det andra körs
docker buildför att skapa containerbilden baserad på lämplig Dockerfile för målarkitekturen. Sedan körsdocker pushför att överföra avbildningen till ditt containerregister.Den här processen kan ta flera minuter första gången, men det går snabbare nästa gång du kör kommandona.
Visa din containeravbildning
Visual Studio Code visar ett lyckat meddelande när du skickar din containeravbildning till containerregistret. Om du vill bekräfta åtgärden visar du avbildningen i registret.
- I Azure-portalen går du till ditt Azure containerregister.
- Välj Tjänster > Lagringsplatser.
- Du ser csharpfunction-lagringsplatsen i listan. Välj den här lagringsplatsen om du vill visa mer information.
- I avsnittet Taggar visas taggen 0.0.1-amd64 . Den här taggen visar versionen och plattformen för avbildningen som du skapade. Filen module.json i mappen CSharpFunction anger dessa värden.
Distribuera och kör lösningen
Använd Azure-portalen för att distribuera funktionsmodulen till en IoT Edge enhet som i snabbstarten. Du kan också distribuera och övervaka moduler från Visual Studio Code. I följande avsnitt används Azure IoT Edge och IoT Hub för Visual Studio Code-tillägg som anges i förhandskraven. Installera tilläggen nu om du inte redan har gjort det.
I Visual Studio Code explorer går du till avsnittet Azure IoT Hub och expanderar Enheter för att se listan över IoT-enheter.
Högerklicka på namnet på din IoT Edge enhet och välj sedan Skapa distribution för enskild enhet.
Gå till den lösningsmapp som har CSharpFunction. Öppna mappen config, välj filendeployment.amd64.json och välj sedan Välj Edge-distributionsmanifest.
Under enheten expanderar du Moduler för att se en lista över distribuerade och körande moduler. Välj uppdateringsknappen. Du kan se att den nya CSharpFunction körs tillsammans med modulen SimulatedTemperatureSensor , $edgeAgent och $edgeHub.
Det kan ta en stund innan de nya modulerna visas. Den IoT Edge enheten hämtar sin nya distributionsinformation från IoT Hub, startar de nya containrarna och rapporterar sedan statusen tillbaka till IoT Hub.
Visa genererade data
Se alla meddelanden som kommer till din IoT-hubb från dina enheter genom att köra Azure IoT Hub: Starta övervakning inbyggd händelseslutpunkt i kommandopaletten. Om du vill sluta övervaka meddelanden kör du Azure IoT Hub: Stoppa övervakning av inbyggd händelseslutpunkt i kommandopaletten.
Om du vill filtrera vyn och se meddelanden från en specifik enhet högerklickar du på enheten i avsnittet Azure IoT Hub > Devices i Visual Studio Code explorer och väljer Start Monitoring Built-in Event Endpoint.
Rensa resurser
Om du planerar att fortsätta till nästa rekommenderade artikel behåller du de resurser och konfigurationer som du skapade och återanvänder dem. Du kan också fortsätta att använda samma IoT Edge enhet som en testenhet.
Annars tar du bort den lokala konfigurationen och de Azure resurser som du skapade i den här artikeln för att undvika avgifter.
Ta bort Azure resurser
Du kan inte ångra borttagning av Azure resurser och resursgrupper. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat IoT Hub i en befintlig resursgrupp som innehåller resurser som du vill behålla tar du bara bort själva IoT Hub resursen, inte resursgruppen.
Ta bort resurser:
- Logga in på portalen Azure och välj sedan Resource-grupper.
- Välj namnet på resursgruppen som innehåller dina IoT Edge testresurser.
- Granska listan över resurser som resursgruppen innehåller. Om du vill ta bort alla kan du välja Ta bort resursgrupp. Om du bara vill ta bort några av dem väljer du varje resurs för att ta bort dem individuellt.
Nästa steg
I den här självstudien skapade du en Azure Function-modul med kod för att filtrera rådata som genereras av din IoT Edge enhet.
Fortsätt till nästa handledningar för att lära dig andra sätt på vilka Azure IoT Edge kan hjälpa dig att omvandla data till affärsinsikter i nätverkets utkant.