Share via


Esercitazione: Indirizzare i messaggi MQTT in Griglia di eventi di Azure a Funzioni di Azure usando argomenti personalizzati - Interfaccia della riga di comando di Azure

Questa esercitazione illustra come instradare i messaggi MQTT ricevuti da uno spazio dei nomi Griglia di eventi di Azure a una funzione di Azure tramite un argomento personalizzato di Griglia di eventi seguendo questa procedura:

Se non si ha una sottoscrizione di Azure, è possibile iscriversi per ottenere una versione di valutazione gratuita.

Prerequisiti

Seguire le istruzioni riportate in Creare una funzione di Azure con Visual Studio Code, ma usare il trigger Griglia di eventi di Azure invece di usare il trigger HTTP. Il codice dovrebbe essere simile all'esempio seguente:

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

Questa funzione di Azure viene usata come gestore eventi per la sottoscrizione di un argomento più avanti in questa esercitazione.

Nota

  • Creare tutte le risorse nella stessa area.
  • Questa esercitazione è stata testata con una funzione di Azure che usa lo stack di runtime .NET 8.0 (isolato).

Creare un argomento di Griglia di eventi (argomento personalizzato)

In questo passaggio viene creato un argomento di Griglia di eventi.

  1. Copiare e incollare lo script in un editor.
  2. Sostituire i valori seguenti.
  3. Selezionare Apri Cloud Shell.
  4. Passare da PowerShell a Bash (nell'angolo superiore sinistro della finestra di Cloud Shell).
  5. Copiare e incollare lo script dall'editor in Cloud Shell ed eseguire lo script.

Lo script crea un gruppo di risorse di Azure e un argomento personalizzato di Griglia di eventi. Più avanti in questa esercitazione si configura il routing per uno spazio dei nomi di Griglia di eventi in modo che gli eventi o i messaggi inviati allo spazio dei nomi vengano indirizzati all'argomento personalizzato e quindi alla funzione di Azure tramite sottoscrizione all'argomento.

Segnaposto Descrizione
RESOURCEGROUPNAME Nome del gruppo di risorse da creare.
REGION Area in cui si desidera creare il gruppo di risorse e l'argomento personalizzato.
TOPICNAME Nome dell'argomento personalizzato da creare.

Lo script usa il az eventgrid topic create comando per creare un argomento di Griglia di eventi o un argomento personalizzato. Il tipo di schema viene specificato come schema di eventi 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

Nota

Usare lo schema di eventi cloud ovunque in questa esercitazione.

Aggiungere una sottoscrizione all'argomento usando la funzione

In questo passaggio si crea una sottoscrizione all'argomento personalizzato usando la funzione di Azure creata in precedenza.

Sostituire i valori seguenti ed eseguire lo script in Cloud Shell. Lo script usa il az eventgrid event-subscription create comando per creare una sottoscrizione di funzioni di Azure all'argomento personalizzato. Nel comando l'ID origine è l'ID risorsa dell'argomento e l'endpoint è l'ID risorsa della funzione. Il tipo di endpoint è impostato su Funzione di Azure e lo schema di recapito degli eventi viene specificato come schema di eventi cloud.

Segnaposto Descrizione
FUNCTIONRESOURCEGROUP Nome del gruppo di risorse con l'app Funzioni di Azure.
FUNCTIONSAPPNAME Nome dell'app Funzioni di Azure.
FUNCTIONNAME Nome della funzione di 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

Creare spazi dei nomi, client, spazi degli argomenti e associazioni di autorizzazioni

Seguire le istruzioni riportate in Avvio rapido: Pubblicare e sottoscrivere messaggi MQTT in uno spazio dei nomi di Griglia di eventi con l'interfaccia della riga di comando di Azure per:

  1. Creare uno spazio dei nomi di Griglia di eventi.
  2. Creare due client.
  3. Creare uno spazio degli argomenti.
  4. Creare associazioni di autorizzazioni per server di pubblicazione e sottoscrittore.
  5. Testare l'uso dell'app MQTTX per verificare che i client siano in grado di inviare e ricevere messaggi.

Abilitare l'identità gestita per lo spazio dei nomi

Sostituire il valore seguente ed eseguire lo script per abilitare l'identità gestita assegnata dal sistema per lo spazio dei nomi di Griglia di eventi.

Segnaposto Descrizione
EVENTGRIDNAMESPACENAME Nome dello spazio dei nomi di Griglia di eventi.

Lo script usa il az eventgrid namespace update comando con identity impostato su SystemAssigned identity.

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

Concedere quindi all'identità gestita dello spazio dei nomi l'autorizzazione di invio per l'argomento personalizzato di Griglia di eventi creato in precedenza in modo che lo spazio dei nomi possa inviare o instradare messaggi all'argomento personalizzato. A tale scopo, aggiungere l'identità gestita al ruolo Mittente dati di Griglia di eventi nell'argomento personalizzato.

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

Lo script usa il az role assignment create comando con gli ID dell'identità gestita dello spazio dei nomi e l'argomento personalizzato e assegna il ruolo Mittente dati griglia di eventi all'identità gestita dello spazio dei nomi nell'argomento personalizzato.

Configurare il routing dei messaggi alla funzione di Azure tramite un argomento personalizzato

In questo passaggio viene configurato il routing per lo spazio dei nomi di Griglia di eventi in modo che i messaggi ricevuti vengano indirizzati all'argomento personalizzato creato.

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

Lo script usa il az eventgrid namespace update comando per impostare l'argomento di routing e il tipo di identità gestita da usare per instradare gli eventi all'argomento.

Inviare messaggi MQTT di test con MQTTX

Inviare messaggi MQTT di test allo spazio dei nomi e verificare che la funzione li riceva.

Seguire le istruzioni dell'articolo Pubblicare, sottoscrivere messaggi usando l'app MQTTX per inviare alcuni messaggi di test allo spazio dei nomi di Griglia di eventi.

Ecco il flusso degli eventi o dei messaggi:

  1. MQTTX invia messaggi allo spazio degli argomenti dello spazio dei nomi di Griglia di eventi.

  2. I messaggi vengono indirizzati all'argomento personalizzato configurato.

  3. I messaggi vengono inoltrati alla sottoscrizione di eventi, ovvero la funzione di Azure.

  4. Usare la funzionalità di registrazione per verificare che la funzione abbia ricevuto l'evento.

    Screenshot che mostra la pagina Flusso di log per una funzione di Azure.

Passaggio successivo

Vedere gli esempi di codice in questo repository GitHub.