Samouczek: kierowanie komunikatów MQTT w usłudze Azure Event Grid do usługi Azure Functions przy użyciu tematów niestandardowych — interfejs wiersza polecenia platformy Azure

Z tego samouczka dowiesz się, jak kierować komunikaty MQTT odbierane przez przestrzeń nazw usługi Azure Event Grid do funkcji platformy Azure za pośrednictwem tematu niestandardowego usługi Event Grid, wykonując następujące kroki:

Jeśli nie masz subskrypcji platformy Azure, możesz skorzystać z bezpłatnej wersji próbnej.

Wymagania wstępne

Postępuj zgodnie z instrukcjami z sekcji Tworzenie funkcji platformy Azure przy użyciu programu Visual Studio Code, ale użyj wyzwalacza usługi Azure Event Grid zamiast wyzwalacza HTTP. Powinien zostać wyświetlony kod podobny do poniższego przykładu:

using System;
using Azure.Messaging;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class MyEventGridTriggerFunc
    {
        private readonly ILogger<MyEventGridTriggerFunc> _logger;

        public MyEventGridTriggerFunc(ILogger<MyEventGridTriggerFunc> logger)
        {
            _logger = logger;
        }

        [Function(nameof(MyEventGridTriggerFunc))]
        public void Run([EventGridTrigger] CloudEvent cloudEvent)
        {
            _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
        }
    }
}

Ta funkcja platformy Azure jest używana jako procedura obsługi zdarzeń dla subskrypcji tematu w dalszej części tego samouczka.

Uwaga

  • Utwórz wszystkie zasoby w tym samym regionie.
  • Ten samouczek został przetestowany przy użyciu funkcji platformy Azure, która używa stosu środowiska uruchomieniowego platformy .NET 8.0 (izolowanego).

Tworzenie tematu usługi Event Grid (temat niestandardowy)

W tym kroku utworzysz temat usługi Event Grid.

  1. Skopiuj i wklej skrypt do edytora.
  2. Zastąp następujące wartości.
  3. Wybierz pozycję Otwórz usługę Cloud Shell.
  4. Przejdź z programu PowerShell do powłoki Bash (w lewym górnym rogu okna usługi Cloud Shell).
  5. Skopiuj i wklej skrypt z edytora do usługi Cloud Shell i uruchom skrypt.

Skrypt tworzy grupę zasobów platformy Azure i niestandardowy temat usługi Event Grid. W dalszej części tego samouczka skonfigurujesz routing dla przestrzeni nazw usługi Event Grid, tak aby zdarzenia lub komunikaty wysyłane do przestrzeni nazw zostały kierowane do tematu niestandardowego, a następnie do funkcji platformy Azure za pośrednictwem subskrypcji do tematu.

Symbol zastępczy opis
RESOURCEGROUPNAME Nazwa grupy zasobów do utworzenia.
REGION Region, w którym chcesz utworzyć grupę zasobów i temat niestandardowy.
TOPICNAME Nazwa tematu niestandardowego do utworzenia.

Skrypt używa polecenia do utworzenia tematu az eventgrid topic create usługi Event Grid lub tematu niestandardowego. Typ schematu jest określany jako schemat zdarzeń w chmurze.

rgName="RESOURCEGROUPNAME"
location="REGION"
topicName="TOPICNAME"

az group create -n $rgName -l $location

az eventgrid topic create --name $topicName -l $location -g $rgName --input-schema cloudeventschemav1_0

Uwaga

Użyj schematu zdarzeń w chmurze wszędzie w tym samouczku.

Dodawanie subskrypcji do tematu przy użyciu funkcji

W tym kroku utworzysz subskrypcję tematu niestandardowego przy użyciu utworzonej wcześniej funkcji platformy Azure.

Zastąp następujące wartości i uruchom skrypt w usłudze Cloud Shell. Skrypt używa az eventgrid event-subscription create polecenia , aby utworzyć subskrypcję funkcji platformy Azure w temacie niestandardowym. W poleceniu identyfikator źródła to identyfikator zasobu tematu, a punkt końcowy jest identyfikatorem zasobu funkcji. Typ punktu końcowego jest ustawiony na funkcję platformy Azure, a schemat dostarczania zdarzeń jest określany jako schemat zdarzeń w chmurze.

Symbol zastępczy opis
FUNCTIONRESOURCEGROUP Nazwa grupy zasobów, która ma aplikację usługi Azure Functions.
FUNCTIONSAPPNAME Nazwa aplikacji usługi Azure Functions.
FUNCTIONNAME Nazwa funkcji platformy Azure.
funcAppRgName="FUNCTIONRESOURCEGROUP"
funcAppName="FUNCTIONSAPPNAME"
funcName="FUNCTIONNAME"
funcResourceId=$(az functionapp function show -g $funcAppRgName -n $funcAppName --function-name $funcName --query "{I:id}" -o tsv)

topicResourceId=$(az eventgrid topic show --name $topicName -g $rgName --query id --output tsv)
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
az eventgrid event-subscription create --name $eventSubscriptionName --source-resource-id $topicResourceId  --endpoint-type azurefunction --endpoint $funcResourceId --event-delivery-schema cloudeventschemav1_0

Tworzenie przestrzeni nazw, klientów, przestrzeni tematów i powiązań uprawnień

Postępuj zgodnie z instrukcjami z przewodnika Szybki start: Publikowanie i subskrybowanie komunikatów MQTT w przestrzeni nazw usługi Event Grid przy użyciu interfejsu wiersza polecenia platformy Azure w celu:

  1. Utwórz przestrzeń nazw usługi Event Grid.
  2. Utwórz dwóch klientów.
  3. Utwórz przestrzeń tematu.
  4. Tworzenie powiązań uprawnień wydawcy i subskrybenta.
  5. Przetestuj przy użyciu aplikacji MQTTX, aby potwierdzić, że klienci mogą wysyłać i odbierać komunikaty.

Włączanie tożsamości zarządzanej dla przestrzeni nazw

Zastąp następującą wartość i uruchom skrypt, aby włączyć tożsamość zarządzaną przypisaną przez system dla przestrzeni nazw usługi Event Grid.

Symbol zastępczy opis
EVENTGRIDNAMESPACENAME Nazwa przestrzeni nazw usługi Event Grid.

Skrypt używa az eventgrid namespace update polecenia z ustawioną SystemAssigned tożsamościąidentity.

nsName="EVENTGRIDNAMESPACENAME"
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"

Następnie przyznaj tożsamość zarządzaną przestrzeni nazw uprawnienie do wysyłania w utworzonym wcześniej temacie niestandardowym usługi Event Grid, aby przestrzeń nazw mogła wysyłać lub kierować komunikaty do tematu niestandardowego. W tym celu należy dodać tożsamość zarządzaną do roli Nadawca danych usługi Event Grid w temacie niestandardowym.

egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
topicResourceId=$(az eventgrid topic show --name $topicName -g $rgName --query id --output tsv)
az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "EventGrid Data Sender" --scope $topicResourceId

Skrypt używa az role assignment create polecenia z identyfikatorami tożsamości zarządzanej przestrzeni nazw i tematu niestandardowego oraz przypisuje rolę Nadawcy danych usługi Event Grid do tożsamości zarządzanej przestrzeni nazw w temacie niestandardowym.

Konfigurowanie routingu komunikatów do funkcji platformy Azure za pomocą tematu niestandardowego

W tym kroku skonfigurujesz routing dla przestrzeni nazw usługi Event Grid, tak aby odbierane komunikaty zostały kierowane do utworzonego tematu niestandardowego.

az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$topicResourceId,'routingIdentityInfo':{type:SystemAssigned}}"

Skrypt używa az eventgrid namespace update polecenia , aby ustawić temat routingu i typ tożsamości zarządzanej do użycia do kierowania zdarzeń do tematu.

Wysyłanie testowych komunikatów MQTT przy użyciu MQTTX

Wyślij testowe komunikaty MQTT do przestrzeni nazw i upewnij się, że funkcja je odbiera.

Postępuj zgodnie z instrukcjami w artykule Publikowanie i subskrybowanie komunikatów przy użyciu aplikacji MQTTX, aby wysłać kilka komunikatów testowych do przestrzeni nazw usługi Event Grid.

Oto przepływ zdarzeń lub komunikatów:

  1. MQTTX wysyła komunikaty do przestrzeni nazw usługi Event Grid w temacie.

  2. Komunikaty są kierowane do skonfigurowanego tematu niestandardowego.

  3. Komunikaty są przekazywane do subskrypcji zdarzeń, która jest funkcją platformy Azure.

  4. Użyj funkcji rejestrowania, aby sprawdzić, czy funkcja otrzymała zdarzenie.

    Zrzut ekranu przedstawiający stronę Strumienia dziennika dla funkcji platformy Azure.

Następny krok

Zobacz przykłady kodu w tym repozytorium GitHub.