Udostępnij za pomocą


Samouczek: wdrażanie usługi Azure Functions jako modułów usługi IoT Edge

Dotyczy:Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5

Ważne

Obsługiwana wersja usługi IoT Edge 1.5 LTS. Usługa IoT Edge 1.4 LTS kończy się od 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Użyj usługi Azure Functions, aby wdrożyć kod, który uruchamia logikę biznesową bezpośrednio na urządzeniach usługi Azure IoT Edge. W tym samouczku pokazano, jak utworzyć i wdrożyć funkcję platformy Azure, która filtruje dane czujników na symulowanym urządzeniu IoT Edge. Użyj symulowanego urządzenia usługi IoT Edge utworzonego w przewodnikach Szybki start. Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Używanie programu Visual Studio Code do tworzenia funkcji platformy Azure
  • Użyj programu Visual Studio Code i Docker, aby stworzyć obraz Docker i opublikować go w rejestrze kontenerów.
  • Uruchom moduł z rejestru kontenerów na urządzeniu IoT Edge
  • Wyświetlanie przefiltrowanych danych

Diagram przedstawiający architekturę funkcji, w tym sposób przygotowania i wdrożenia modułu funkcji.

Funkcja platformy Azure utworzona w tym samouczku filtruje dane temperatury generowane przez urządzenie. Funkcja wysyła komunikaty nadrzędne do usługi Azure IoT Hub tylko wtedy, gdy temperatura przekracza określony próg.

Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Wymagania wstępne

Przed rozpoczęciem tego samouczka postępuj zgodnie z samouczkiem, aby skonfigurować środowisko projektowe na potrzeby tworzenia kontenerów systemu Linux: tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code. Po zakończeniu obowiązują następujące wymagania wstępne:

Aby utworzyć moduł usługi IoT Edge za pomocą usługi Azure Functions, zainstaluj te dodatkowe wymagania wstępne na maszynie dewelopera:

Tworzenie projektu funkcji

Usługa Azure IoT Edge dla programu Visual Studio Code zapewnia możliwości zarządzania i szablony kodu. W tej sekcji użyjesz programu Visual Studio Code do utworzenia rozwiązania usługi IoT Edge z funkcją platformy Azure.

Tworzenie nowego projektu

Wykonaj następujące kroki, aby utworzyć dostosowywalny szablon rozwiązania funkcji języka C#.

  1. Otwórz program Visual Studio Code na maszynie deweloperskiej.

  2. Otwórz paletę poleceń programu Visual Studio Code, wybierając pozycję Wyświetlpoleceń.

  3. W palecie poleceń dodaj i uruchom polecenie Azure IoT Edge: nowe rozwiązanie usługi IoT Edge. Postępuj zgodnie z następującymi monitami w palecie poleceń, aby utworzyć rozwiązanie:

    • Wybierz folder: wybierz lokalizację na komputerze deweloperskim dla programu Visual Studio Code, aby utworzyć pliki rozwiązania.
    • Podaj nazwę rozwiązania: dodaj opisową nazwę rozwiązania, taką jak FunctionSolution lub zaakceptuj wartość domyślną.|
    • Wybierz szablon modułu: wybierz pozycję Azure Functions — C#.
    • Podaj nazwę modułu | Nadaj modułowi nazwę CSharpFunction.
    • Podaj repozytorium obrazów platformy Docker dla modułu. Repozytorium obrazów zawiera nazwę rejestru kontenerów oraz nazwę obrazu kontenera. Obraz kontenera jest wstępnie wypełniony z ostatniego kroku. Zastąp wartość localhost:5000 wartością serwera logowania z rejestru kontenerów platformy Azure. Serwer logowania można pobrać ze strony Przegląd rejestru kontenerów w witrynie Azure Portal. Ostateczny ciąg będzie wyglądał następująco: <nazwa rejestru>.azurecr.io/csharpfunction.

    Zrzut ekranu przedstawiający miejsce dodawania nazwy repozytorium obrazów platformy Docker w programie Visual Studio Code.

Dodawanie poświadczeń rejestru

Plik środowiska w rozwiązaniu przechowuje poświadczenia dla rejestru kontenerów i udostępnia je środowisku uruchomieniowemu usługi IoT Edge. Środowisko uruchomieniowe wymaga tych poświadczeń, aby ściągnąć prywatne obrazy na urządzenie usługi IoT Edge.

Rozszerzenie usługi IoT Edge w programie Visual Studio Code próbuje ściągnąć poświadczenia rejestru kontenerów z platformy Azure i wypełnić je w pliku środowiska. Sprawdź, czy poświadczenia znajdują się już w pliku. Jeśli nie, dodaj je teraz:

  1. W eksploratorze programu Visual Studio Code otwórz .env plik.
  2. Zaktualizuj pola przy użyciu wartości nazwy użytkownika i hasła skopiowanych z rejestru kontenerów platformy Azure. Aby je znaleźć ponownie, przejdź do rejestru kontenerów na platformie Azure i spójrz na stronę Ustawienia>Klucze dostępu .
  3. Zapisz ten plik.

Uwaga

W tym samouczku są używane poświadczenia logowania administratora dla usługi Azure Container Registry, które są wygodne w scenariuszach tworzenia i testowania. W środowisku produkcyjnym należy użyć opcji uwierzytelniania o najniższych uprawnieniach, takich jak jednostki usługi. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do rejestru kontenerów.

Ustaw architekturę docelową na AMD64

Moduły usługi Azure Functions w usłudze IoT Edge są obsługiwane tylko w kontenerach opartych na systemie Linux AMD64. Domyślną architekturą docelową programu Visual Studio Code jest linux AMD64, ale jawnie ustawiono ją na linux AMD64 tutaj.

  1. Otwórz paletę poleceń i wyszukaj usługę Azure IoT Edge: ustaw domyślną platformę docelową rozwiązania Edge.

  2. W palecie poleceń wybierz architekturę docelową AMD64 z listy opcji.

Aktualizowanie modułu przy użyciu kodu niestandardowego

Dodaj kod, aby moduł CSharpFunction przetwarzał komunikaty na krawędzi przed przekazaniem ich do usługi IoT Hub.

  1. W eksploratorze programu Visual Studio Code otwórz moduły >CSharpFunction.cs.

  2. Zastąp zawartość pliku CSharpFunction.cs następującym kodem. Ten kod odbiera dane telemetryczne dotyczące temperatury otoczenia i maszyny oraz przekazuje komunikat do usługi IoT Hub tylko wtedy, gdy temperatura maszyny przekracza zdefiniowany próg.

    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. Zapisz plik.

Kompilowanie i wypychanie rozwiązania usługi IoT Edge

W poprzedniej sekcji utworzono rozwiązanie usługi IoT Edge i zmieniono polecenie CSharpFunction , aby odfiltrować komunikaty z zgłaszanymi temperaturami maszyny poniżej akceptowalnego progu. Teraz skompiluj rozwiązanie jako obraz kontenera i wypchnij je do rejestru kontenerów.

  1. Otwórz zintegrowany terminal programu Visual Studio Code. Wybierz Wyświetl>Terminal.

  2. Zaloguj się do platformy Docker w terminalu. Użyj nazwy użytkownika, hasła i serwera logowania z rejestru kontenerów platformy Azure. Pobierz te wartości z sekcji Klucze dostępu rejestru w witrynie Azure Portal.

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

    Możesz otrzymać ostrzeżenie o zabezpieczeniach, które zaleca użycie polecenia --password-stdin. Chociaż najlepsze rozwiązanie jest zalecane w przypadku scenariuszy produkcyjnych, wykracza poza zakres tego samouczka. Aby uzyskać więcej informacji, zobacz dokumentację logowania platformy Docker.

  3. W eksploratorze programu Visual Studio Code kliknij prawym przyciskiem myszy plik deployment.template.json , a następnie wybierz pozycję Kompiluj i wypychaj rozwiązanie usługi IoT Edge.

    Polecenie kompilacji i wypychania uruchamia trzy operacje. Najpierw tworzy nowy folder w rozwiązaniu o nazwie config , który ma pełny manifest wdrożenia, który jest tworzony na podstawie szablonu wdrożenia i innych plików rozwiązania. Po drugie, uruchamia docker build w celu zbudowania obrazu kontenera na podstawie odpowiedniego pliku Dockerfile dla architektury docelowej. Następnie zostanie uruchomione polecenie docker push , aby wypchnąć repozytorium obrazów do rejestru kontenerów.

    Ten proces może potrwać kilka minut po raz pierwszy, ale jest szybszy przy następnym uruchomieniu poleceń.

Wyświetlanie obrazu kontenera

Program Visual Studio Code wyświetla powiadomienie o sukcesie po przesłaniu obrazu kontenera do rejestru kontenerów. Aby potwierdzić operację, wyświetl obraz w rejestrze.

  1. W witrynie Azure Portal przejdź do rejestru kontenerów platformy Azure.
  2. Wybierz pozycję .
  3. Na liście zostanie wyświetlone repozytorium csharpfunction . Wybierz to repozytorium, aby wyświetlić więcej szczegółów.
  4. W sekcji Tagi zostanie wyświetlony tag 0.0.1-amd64 . Ten tag przedstawia wersję i platformę utworzonego obrazu. Te wartości są ustawiane w pliku module.json w folderze CSharpFunction .

Wdrażanie i uruchamianie rozwiązania

Użyj portalu Azure, aby wdrożyć moduł funkcji na urządzeniu IoT Edge, tak jak w przewodniku szybki start. Moduły można również wdrażać i monitorować z poziomu programu Visual Studio Code. W poniższych sekcjach są używane rozszerzenia usługi Azure IoT Edge i IoT Hub dla programu Visual Studio Code wymienione w wymaganiach wstępnych. Zainstaluj rozszerzenia teraz, jeśli jeszcze tego nie zrobiono.

  1. W eksploratorze programu Visual Studio Code w sekcji Azure IoT Hub rozwiń Urządzenia, aby wyświetlić listę urządzeń IoT.

  2. Kliknij prawym przyciskiem myszy nazwę urządzenia usługi IoT Edge, a następnie wybierz pozycję Utwórz wdrożenie dla pojedynczego urządzenia.

  3. Przejdź do katalogu rozwiązania zawierającego CSharpFunction. Otwórz folder config, wybierz plik deployment.amd64.json , a następnie wybierz pozycję Wybierz manifest wdrożenia usługi Edge.

  4. W obszarze urządzenia rozwiń węzeł Moduły , aby wyświetlić listę wdrożonych i uruchomionych modułów. Wybierz przycisk odświeżenia. Możesz zobaczyć, jak nowa CSharpFunction działa razem z modułem SimulatedTemperatureSensor, $edgeAgent i $edgeHub.

    Wyświetlenie nowych modułów może potrwać kilka minut. Urządzenie usługi IoT Edge pobiera nowe informacje o wdrożeniu z usługi IoT Hub, uruchamia nowe kontenery, a następnie zgłasza stan z powrotem do usługi IoT Hub.

    Zrzut ekranu przedstawiający sposób wyświetlania wdrożonych modułów w programie Visual Studio Code.

Wyświetlanie wygenerowanych danych

Zobacz wszystkie komunikaty, które docierają do centrum IoT z urządzeń, uruchamiając usługę Azure IoT Hub: Rozpocznij monitorowanie wbudowanego punktu końcowego zdarzeń w palecie poleceń. Aby zatrzymać monitorowanie komunikatów, uruchom usługę Azure IoT Hub: zatrzymaj monitorowanie wbudowanego punktu końcowego zdarzeń w palecie poleceń.

Aby filtrować widok i wyświetlać komunikaty z określonego urządzenia, kliknij prawym przyciskiem myszy urządzenie w sekcjiUrządzenia> w Eksploratorze programu Visual Studio Code, a następnie wybierz pozycję Rozpocznij monitorowanie wbudowanego punktu końcowego zdarzeń.

Czyszczenie zasobów

Jeśli planujesz przejść do następnego zalecanego artykułu, zachowaj utworzone zasoby i konfiguracje i użyj ich ponownie. Możesz także nadal używać tego samego urządzenia usługi IoT Edge jako urządzenia testowego.

W przeciwnym razie usuń konfiguracje lokalne i zasoby platformy Azure utworzone w tym artykule, aby uniknąć naliczania opłat.

Usuwanie zasobów platformy Azure

Usuwanie zasobów i grup zasobów platformy Azure jest nieodwracalne. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub niewłaściwej grupy zasobów. Jeśli centrum IoT Hub zostało utworzone w istniejącej grupie zasobów zawierającej zasoby, które chcesz zachować, usuń tylko sam zasób usługi IoT Hub, a nie grupę zasobów.

Aby usunąć zasoby:

  1. Zaloguj się do witryny Azure Portal, a następnie wybierz pozycję Grupy zasobów.
  2. Wybierz nazwę grupy zasobów, która zawiera zasoby testowe usługi IoT Edge.
  3. Przejrzyj listę zasobów, które zawiera grupa zasobów. Jeśli chcesz usunąć je wszystkie, możesz wybrać pozycję Usuń grupę zasobów. Jeśli chcesz usunąć tylko niektóre z nich, możesz wybrać każdy zasób, aby usunąć je indywidualnie.

Następne kroki

W tym samouczku utworzono moduł funkcji platformy Azure z kodem umożliwiającym filtrowanie nieprzetworzonych danych generowanych przez urządzenie usługi IoT Edge.

Kontynuuj pracę z kolejnymi samouczkami, aby dowiedzieć się o innych metodach, za pomocą których usługa Azure IoT Edge może ułatwiać przekształcanie danych w analizy biznesowe na brzegu sieci.