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.
- Skopiuj i wklej skrypt do edytora.
- Zastąp następujące wartości.
- Wybierz pozycję Otwórz usługę Cloud Shell.
- Przejdź z programu PowerShell do powłoki Bash (w lewym górnym rogu okna usługi Cloud Shell).
- 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:
- Utwórz przestrzeń nazw usługi Event Grid.
- Utwórz dwóch klientów.
- Utwórz przestrzeń tematu.
- Tworzenie powiązań uprawnień wydawcy i subskrybenta.
- 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:
MQTTX wysyła komunikaty do przestrzeni nazw usługi Event Grid w temacie.
Komunikaty są kierowane do skonfigurowanego tematu niestandardowego.
Komunikaty są przekazywane do subskrypcji zdarzeń, która jest funkcją platformy Azure.
Użyj funkcji rejestrowania, aby sprawdzić, czy funkcja otrzymała zdarzenie.
Następny krok
Zobacz przykłady kodu w tym repozytorium GitHub.