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.
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).
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.
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
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.
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.
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.
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.
Zobacz przykłady kodu w tym repozytorium GitHub.