Anteckning
Å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.
Gäller för: IoT Edge 1.5
Viktigt!
IoT Edge 1.5 LTS är den version som stöds. IoT Edge 1.4 LTS upphör från och med den 12 november 2024. Om du har en tidigare version läser du Uppdatera 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 självstudien 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 endast meddelanden uppströms till Azure IoT Hub när temperaturen är över ett angivet tröskelvärde.
Om du inte har något Azure-konto skapar du ett kostnadsfritt 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 Visual Studio Code. När du är klar har du följande förutsättningar:
- En kostnadsfri IoT Hub eller en IoT Hub på standardnivå 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 har konfigurerats med Azure IoT Edge - och Azure IoT Hub-tilläggen . Azure IoT Edge-verktygen för Visual Studio Code-tillägget ä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
Med Azure IoT Edge för Visual Studio Code får du 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 Visual Studio Code-kommandopaletten genom att välja Visa>kommandopalett.
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 standardinställningen.|
- Välj en modulmall: välj Azure Functions – C#.
- Ange ett modulnamn | Ge modulen namnet CSharpFunction.
- Ange en Docker-avbildningslagringsplats för modulen. En bildlagringsplats innehåller namnet på containerregistret och namnet på containeravbildningen. Containeravbildningen fylls i i förväg från det sista steget. Ersätt localhost:5000 med värdet för inloggningsservern från azure-containerregistret. Du kan hämta inloggningsservern från sidan Översikt i containerregistret i Azure-portalen. Den slutliga strängen ser ut så här: <registernamn>.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örningen. Körningen behöver dessa autentiseringsuppgifter för att hämta dina privata avbildningar till din IoT Edge-enhet.
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:
- Öppna filen i Visual Studio Code-utforskaren
.env
. - Uppdatera fälten med de användarnamn och lösenordsvärden som du kopierade från azure-containerregistret. Om du vill hitta dem igen går du till containerregistret i Azure och tittar på sidanÅtkomstnycklar för>.
- Spara 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 anger 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 lite kod så att CSharpFunction-modulen bearbetar meddelanden vid gränsen innan de vidarebefordras till IoT Hub.
Öppna modulerna>CSharpFunction>CSharpFunction.cs i Visual Studio Code-utforskaren.
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 är ö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 integrerade Terminalen i Visual Studio Code. Välj Visa>terminal.
Logga in på Docker i terminalen. Använd användarnamnet, lösenordet och inloggningsservern från azure-containerregistret. 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.I Visual Studio Code-utforskaren högerklickar du på filendeployment.template.json och väljer sedan Skapa och push-överföra IoT Edge-lösning.
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 build
för att skapa containerbilden baserad på lämplig Dockerfile för målarkitekturen. Sedan körsdocker push
den för att skicka avbildningslagringsplatsen till containerregistret.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 framgångsmeddelande när din containeravbildning skickas till ditt containerregister. Om du vill bekräfta åtgärden visar du avbildningen i registret.
- Gå till azure-containerregistret i Azure-portalen.
- Välj Tjänster>Arkiv.
- 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. Dessa värden anges i filenmodule.json i mappen CSharpFunction .
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-tilläggen för Visual Studio Code, vilket anges i förhandskraven. Installera tilläggen nu om du inte redan har gjort det.
I Visual Studio Code-utforskaren under avsnittet Azure IoT Hub expanderar du 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. 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: Sluta övervaka 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> i Visual Studio Code-utforskaren och väljer Starta övervakning inbyggd händelseslutpunkt.
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 även fortsätta att använda samma IoT Edge-enhet som en testenhet.
Annars tar du bort de lokala konfigurationerna och De Azure-resurser som du skapade i den här artikeln för att undvika avgifter.
Ta bort Azure-resurser
Det går inte att ångra borttagningen 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 har resurser som du vill behålla tar du bara bort själva IoT Hub-resursen, inte resursgruppen.
Ta bort resurser:
Logga in på Azure-portalen och välj sedan Resursgrupper.
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 kan du välja varje resurs för att ta bort dem individuellt.
Nästa steg
I den här självstudien skapade du en Azure-funktionsmodul med kod för att filtrera rådata som genereras av din IoT Edge-enhet.
Fortsätt med någon av följande självstudier om du vill lära dig mer om hur Azure IoT Edge kan hjälpa dig att omvandla dina data till affärsinsikter.