Delen via


Zelfstudie: MQTT-berichten in Azure Event Grid routeren naar Azure Functions met behulp van aangepaste onderwerpen - Azure CLI

In deze zelfstudie leert u hoe u MQTT-berichten die zijn ontvangen door een Azure Event Grid-naamruimte routeren naar een Azure-functie via een aangepast Event Grid-onderwerp door de volgende stappen uit te voeren:

Als u nog geen Azure-abonnement hebt, kunt u zich registreren voor een gratis proefversie.

Vereisten

Volg de instructies van Een Azure-functie maken met Visual Studio Code, maar gebruik de Azure Event Grid-trigger in plaats van de HTTP-trigger. Als het goed is, ziet u code die lijkt op het volgende voorbeeld:

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);
        }
    }
}

U gebruikt deze Azure-functie als gebeurtenis-handler voor het abonnement van een onderwerp verderop in deze zelfstudie.

Notitie

  • Maak alle resources in dezelfde regio.
  • Deze zelfstudie is getest met een Azure-functie die gebruikmaakt van .NET 8.0 (geïsoleerde) runtimestack.

Een Event Grid-onderwerp maken (aangepast onderwerp)

In deze stap maakt u een Event Grid-onderwerp.

  1. Kopieer en plak het script in een editor.
  2. Vervang de volgende waarden.
  3. Selecteer Cloud Shell openen.
  4. Schakel over van PowerShell naar Bash (in de linkerbovenhoek van het Cloud Shell-venster).
  5. Kopieer en plak het script vanuit de editor in Cloud Shell en voer het script uit.

Met het script maakt u een Azure-resourcegroep en een aangepast Event Grid-onderwerp hierin. Verderop in deze zelfstudie configureert u routering voor een Event Grid-naamruimte, zodat de gebeurtenissen of berichten die naar de naamruimte worden verzonden, worden doorgestuurd naar het aangepaste onderwerp en vervolgens naar de Azure-functie via een abonnement op het onderwerp.

Plaatsaanduiding Beschrijving
RESOURCEGROUPNAME Naam van de resourcegroep die moet worden gemaakt.
REGION Regio waarin u de resourcegroep en het aangepaste onderwerp wilt maken.
TOPICNAME De naam van het aangepaste onderwerp dat moet worden gemaakt.

Het script gebruikt de az eventgrid topic create opdracht om een Event Grid-onderwerp of aangepast onderwerp te maken. Het schematype wordt opgegeven als het gebeurtenisschema van de cloud.

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

Notitie

Gebruik overal in deze zelfstudie een cloud-gebeurtenisschema .

Een abonnement toevoegen aan het onderwerp met behulp van de functie

In deze stap maakt u een abonnement op het aangepaste onderwerp met behulp van de Azure-functie die u eerder hebt gemaakt.

Vervang de volgende waarden en voer het script uit in Cloud Shell. Het script gebruikt de az eventgrid event-subscription create opdracht om een Azure-functieabonnement te maken voor het aangepaste onderwerp. In de opdracht is de bron-id van het onderwerp de resource-id en het eindpunt de resource-id van de functie. Het eindpunttype is ingesteld op de Azure-functie en het schema voor gebeurtenislevering wordt opgegeven als het cloud-gebeurtenisschema.

Plaatsaanduiding Beschrijving
FUNCTIONRESOURCEGROUP Naam van de resourcegroep met de Azure Functions-app.
FUNCTIONSAPPNAME Naam van de Azure Functions-app.
FUNCTIONNAME Naam van de Azure-functie.
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

Naamruimte, clients, onderwerpruimten en machtigingsbindingen maken

Volg de instructies uit de quickstart: Publiceer en abonneer u op MQTT-berichten in een Event Grid-naamruimte met de Azure CLI om:

  1. Maak een Event Grid-naamruimte.
  2. Maak twee clients.
  3. Maak een onderwerpruimte.
  4. Maak machtigingenbindingen voor uitgevers en abonnees.
  5. Test het gebruik van de MQTTX-app om te bevestigen dat clients berichten kunnen verzenden en ontvangen.

Beheerde identiteit inschakelen voor de naamruimte

Vervang de volgende waarde en voer het script uit om door het systeem toegewezen beheerde identiteit in te schakelen voor de Event Grid-naamruimte.

Plaatsaanduiding Beschrijving
EVENTGRIDNAMESPACENAME Naam van de Event Grid-naamruimte.

Het script gebruikt de az eventgrid namespace update opdracht die identity is ingesteld op SystemAssigned identiteit.

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

Verdeel vervolgens de beheerde identiteit van de naamruimte de machtiging verzenden voor het aangepaste Event Grid-onderwerp dat u eerder hebt gemaakt, zodat de naamruimte berichten naar het aangepaste onderwerp kan verzenden of routeren. U doet dit door de beheerde identiteit toe te voegen aan de rol Event Grid-gegevenszender in het aangepaste onderwerp.

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

Het script gebruikt de az role assignment create opdracht met de id's van de beheerde identiteit van de naamruimte en het aangepaste onderwerp en wijst de rol Event Grid-gegevenszender toe aan de beheerde identiteit van de naamruimte in het aangepaste onderwerp.

Routeringsberichten naar Azure-functie configureren via aangepast onderwerp

In deze stap configureert u routering voor de Event Grid-naamruimte, zodat de berichten die worden ontvangen, worden doorgestuurd naar het aangepaste onderwerp dat u hebt gemaakt.

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

Het script gebruikt de az eventgrid namespace update opdracht om het routeringsonderwerp en het type beheerde identiteit in te stellen dat moet worden gebruikt om gebeurtenissen naar het onderwerp te routeren.

MQTT-testberichten verzenden met MQTTX

Verzend MQTT-testberichten naar de naamruimte en controleer of de functie deze ontvangt.

Volg de instructies in het artikel Publiceren, abonneren op berichten met behulp van de MQTTX-app om enkele testberichten naar de Event Grid-naamruimte te verzenden.

Dit is de stroom van de gebeurtenissen of berichten:

  1. MQTTX verzendt berichten naar de onderwerpruimte van de Event Grid-naamruimte.

  2. De berichten worden doorgestuurd naar het aangepaste onderwerp dat u hebt geconfigureerd.

  3. De berichten worden doorgestuurd naar het gebeurtenisabonnement. Dit is de Azure-functie.

  4. Gebruik de functie voor logboekregistratie om te controleren of de functie de gebeurtenis heeft ontvangen.

    Schermopname van de pagina Logboekstream voor een Azure-functie.

Volgende stap

Bekijk codevoorbeelden in deze GitHub-opslagplaats.