Dela via


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.

  1. Kopiera och klistra in skriptet i en redigerare.
  2. Ersätt följande värden.
  3. Välj Öppna Cloud Shell.
  4. Växla från PowerShell till Bash (i det övre vänstra hörnet i Cloud Shell-fönstret).
  5. 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:

  1. Skapa ett Event Grid-namnområde.
  2. Skapa två klienter.
  3. Skapa ett ämnesutrymme.
  4. Skapa behörighetsbindningar för utgivare och prenumeranter.
  5. 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:

  1. MQTTX skickar meddelanden till ämnesutrymmet i Event Grid-namnområdet.

  2. Meddelandena dirigeras till det anpassade ämne som du har konfigurerat.

  3. Meddelandena vidarebefordras till händelseprenumerationen, som är Azure-funktionen.

  4. Använd loggningsfunktionen för att kontrollera att funktionen har tagit emot händelsen.

    Skärmbild som visar sidan Loggström för en Azure-funktion.

Gå vidare

Se kodexempel på den här GitHub-lagringsplatsen.