Självstudie: Dirigera MQTT-meddelanden i Azure Event Grid till Azure Functions med hjälp av anpassade ämnen – Azure CLI
I den här självstudien får du lära dig hur du dirigerar MQTT-meddelanden som tas emot av ett Azure Event Grid-namnområde till en Azure-funktion via ett anpassat Event Grid-ämne genom att följa dessa steg:
Om du inte har en Azure-prenumeration kan du registrera dig för en kostnadsfri utvärdering.
Förutsättningar
Följ anvisningarna från Skapa en Azure-funktion med Visual Studio Code, men använd Azure Event Grid-utlösaren i stället för att använda HTTP-utlösaren. Du bör se kod som liknar följande exempel:
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);
}
}
}
Du använder den här Azure-funktionen som händelsehanterare för ett ämnesprenumeration senare i den här självstudien.
Kommentar
- Skapa alla resurser i samma region.
- Den här självstudien har testats med en Azure-funktion som använder .NET 8.0 (isolerad) körningsstack.
Skapa ett Event Grid-ämne (anpassat ämne)
I det här steget skapar du ett Event Grid-ämne.
- Kopiera och klistra in skriptet i en redigerare.
- Ersätt följande värden.
- Välj Öppna Cloud Shell.
- Växla från PowerShell till Bash (i det övre vänstra hörnet i Cloud Shell-fönstret).
- Kopiera och klistra in skriptet från redigeraren till Cloud Shell och kör skriptet.
Skriptet skapar en Azure-resursgrupp och ett anpassat Event Grid-ämne i den. Senare i den här självstudien konfigurerar du routning för ett Event Grid-namnområde så att händelser eller meddelanden som skickas till namnområdet dirigeras till det anpassade ämnet och sedan till Azure-funktionen via prenumeration på ämnet.
Platshållare | beskrivning |
---|---|
RESOURCEGROUPNAME |
Namnet på den resursgrupp som ska skapas. |
REGION |
Region där du vill skapa resursgruppen och det anpassade ämnet. |
TOPICNAME |
Namnet på det anpassade ämne som ska skapas. |
Skriptet az eventgrid topic create
använder kommandot för att skapa ett Event Grid-ämne eller ett anpassat ämne. Schematypen anges som molnhändelseschema.
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
Kommentar
Använd molnhändelseschemat överallt i den här självstudien.
Lägga till en prenumeration i ämnet med hjälp av funktionen
I det här steget skapar du en prenumeration på det anpassade ämnet med hjälp av den Azure-funktion som du skapade tidigare.
Ersätt följande värden och kör skriptet i Cloud Shell. Skriptet az eventgrid event-subscription create
använder kommandot för att skapa en Azure-funktionsprenumeration till det anpassade ämnet. I kommandot är käll-ID ämnets resurs-ID och slutpunkten är funktionens resurs-ID. Slutpunktstypen är inställd på Azure-funktionen och händelseleveransschemat anges som molnhändelseschema.
Platshållare | beskrivning |
---|---|
FUNCTIONRESOURCEGROUP |
Namnet på resursgruppen som har Azure Functions-appen. |
FUNCTIONSAPPNAME |
Namnet på Azure Functions-appen. |
FUNCTIONNAME |
Namnet på Azure-funktionen. |
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
Skapa namnområde, klienter, ämnesutrymmen och behörighetsbindningar
Följ anvisningarna i snabbstarten: Publicera och prenumerera på MQTT-meddelanden i ett Event Grid-namnområde med Azure CLI för att:
- Skapa ett Event Grid-namnområde.
- Skapa två klienter.
- Skapa ett ämnesutrymme.
- Skapa behörighetsbindningar för utgivare och prenumeranter.
- Testa med MQTTX-appen för att bekräfta att klienter kan skicka och ta emot meddelanden.
Aktivera hanterad identitet för namnområdet
Ersätt följande värde och kör skriptet för att aktivera systemtilldelad hanterad identitet för Event Grid-namnområdet.
Platshållare | beskrivning |
---|---|
EVENTGRIDNAMESPACENAME |
Namn på Event Grid-namnområdet. |
Skriptet az eventgrid namespace update
använder kommandot med identity
inställt på SystemAssigned
identitet.
nsName="EVENTGRIDNAMESPACENAME"
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
Bevilja sedan namnområdets hanterade identitet sändningsbehörighet för det anpassade Event Grid-ämnet som du skapade tidigare så att namnområdet kan skicka eller dirigera meddelanden till det anpassade ämnet. Det gör du genom att lägga till den hanterade identiteten i rollen Event Grid Data Sender i det anpassade ämnet.
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
Skriptet az role assignment create
använder kommandot med ID:t för namnområdets hanterade identitet och det anpassade ämnet, och tilldelar rollen Event Grid Data Sender till namnområdets hanterade identitet i det anpassade ämnet.
Konfigurera routningsmeddelanden till Azure-funktionen via anpassat ämne
I det här steget konfigurerar du routning för Event Grid-namnområdet så att de meddelanden som tas emot dirigeras till det anpassade ämne som du skapade.
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$topicResourceId,'routingIdentityInfo':{type:SystemAssigned}}"
Skriptet az eventgrid namespace update
använder kommandot för att ange routningsavsnittet och vilken typ av hanterad identitet som ska användas för att dirigera händelser till ämnet.
Skicka MQTT-testmeddelanden med MQTTX
Skicka MQTT-testmeddelanden till namnområdet och bekräfta att funktionen tar emot dem.
Följ anvisningarna i artikeln Publicera, prenumerera på meddelanden med hjälp av MQTTX-appen för att skicka några testmeddelanden till Event Grid-namnområdet.
Här är flödet av händelser eller meddelanden:
MQTTX skickar meddelanden till ämnesutrymmet i Event Grid-namnområdet.
Meddelandena dirigeras till det anpassade ämne som du har konfigurerat.
Meddelandena vidarebefordras till händelseprenumerationen, som är Azure-funktionen.
Använd loggningsfunktionen för att kontrollera att funktionen har tagit emot händelsen.
Gå vidare
Se kodexempel på den här GitHub-lagringsplatsen.