Kurz: Směrování zpráv MQTT ve službě Azure Event Grid do Azure Functions pomocí vlastních témat – Azure CLI

V tomto kurzu se naučíte směrovat zprávy MQTT přijaté oborem názvů Azure Event Grid do funkce Azure pomocí vlastního tématu Event Gridu pomocí následujícího postupu:

Pokud předplatné Azure nemáte, můžete si zaregistrovat bezplatnou zkušební verzi.

Požadavky

Postupujte podle pokynů k vytvoření funkce Azure pomocí editoru Visual Studio Code, ale místo použití triggeru HTTP použijte trigger Azure Event Gridu. Měl by se zobrazit kód podobný následujícímu příkladu:

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

Tuto funkci Azure použijete jako obslužnou rutinu události pro odběr tématu později v tomto kurzu.

Poznámka:

  • Vytvořte všechny prostředky ve stejné oblasti.
  • Tento kurz byl testován pomocí funkce Azure, která používá zásobník modulu runtime .NET 8.0 (izolovaný).

Vytvoření tématu Event Gridu (vlastní téma)

V tomto kroku vytvoříte téma Event Gridu.

  1. Zkopírujte a vložte skript do editoru.
  2. Nahraďte následující hodnoty.
  3. Vyberte Otevřít Cloud Shell.
  4. Přepněte z PowerShellu na Bash (v levém horním rohu okna Cloud Shellu).
  5. Zkopírujte a vložte skript z editoru do Cloud Shellu a spusťte skript.

Skript vytvoří skupinu prostředků Azure a vlastní téma Event Gridu. Později v tomto kurzu nakonfigurujete směrování pro obor názvů služby Event Grid tak, aby události nebo zprávy odeslané do oboru názvů byly směrovány do vlastního tématu a pak do funkce Azure prostřednictvím odběru tématu.

Zástupný symbol Popis
RESOURCEGROUPNAME Název skupiny prostředků, kterou chcete vytvořit.
REGION Oblast, ve které chcete vytvořit skupinu prostředků a vlastní téma.
TOPICNAME Název vlastního tématu, které se má vytvořit.

Skript pomocí az eventgrid topic create příkazu vytvoří téma Event Gridu nebo vlastní téma. Typ schématu je určen jako schéma cloudové události.

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

Poznámka:

Schéma událostí cloudu můžete používat všude v tomto kurzu.

Přidání předplatného do tématu pomocí funkce

V tomto kroku vytvoříte předplatné vlastního tématu pomocí funkce Azure, kterou jste vytvořili dříve.

Nahraďte následující hodnoty a spusťte skript v Cloud Shellu. Skript pomocí az eventgrid event-subscription create příkazu vytvoří odběr funkce Azure pro vlastní téma. V příkazu je ID zdroje ID prostředku tématu a koncový bod je ID prostředku funkce. Typ koncového bodu je nastavený na funkci Azure a schéma doručování událostí je určené jako schéma cloudové události.

Zástupný symbol Popis
FUNCTIONRESOURCEGROUP Název skupiny prostředků, která má aplikaci Azure Functions.
FUNCTIONSAPPNAME Název aplikace Azure Functions
FUNCTIONNAME Název funkce 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

Vytvoření oboru názvů, klientů, prostorů témat a vazeb oprávnění

Postupujte podle pokynů z rychlého startu: Publikování a přihlášení k odběru zpráv MQTT v oboru názvů Event Gridu pomocí Azure CLI pro:

  1. Vytvořte obor názvů Event Gridu.
  2. Vytvořte dva klienty.
  3. Vytvořte prostor tématu.
  4. Vytvořte vazby oprávnění vydavatele a odběratele.
  5. Otestujte použití aplikace MQTTX a ověřte, že klienti můžou odesílat a přijímat zprávy.

Povolení spravované identity pro obor názvů

Nahraďte následující hodnotu a spuštěním skriptu povolte spravovanou identitu přiřazenou systémem pro obor názvů Služby Event Grid.

Zástupný symbol Popis
EVENTGRIDNAMESPACENAME Název oboru názvů Event Gridu

Skript používá příkaz s nastavenou az eventgrid namespace updateidentity identitou SystemAssigned .

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

Potom udělte spravované identitě oboru názvů oprávnění k odeslání vlastního tématu Event Gridu, které jste vytvořili dříve, aby obor názvů mohl odesílat nebo směrovat zprávy do vlastního tématu. Uděláte to tak, že přidáte spravovanou identitu do role Odesílatele dat Event Gridu ve vlastním tématu.

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

Skript používá az role assignment create příkaz s ID spravované identity oboru názvů a vlastním tématem a přiřadí roli Odesílatele dat služby Event Grid spravované identitě oboru názvů ve vlastním tématu.

Konfigurace směrování zpráv do funkce Azure pomocí vlastního tématu

V tomto kroku nakonfigurujete směrování pro obor názvů služby Event Grid tak, aby se zprávy, které obdrží, směrovaly do vlastního tématu, které jste vytvořili.

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

Skript pomocí az eventgrid namespace update příkazu nastaví téma směrování a typ spravované identity pro směrování událostí do tématu.

Odeslání testovacích zpráv MQTT pomocí MQTTX

Odešlete testovací zprávy MQTT do oboru názvů a potvrďte, že je funkce přijme.

Postupujte podle pokynů v článku o publikování a přihlášení k odběru zpráv pomocí článku aplikace MQTTX a odešlete několik testovacích zpráv do oboru názvů Event Gridu.

Tady je tok událostí nebo zpráv:

  1. MQTTX odesílá zprávy do prostoru tématu oboru názvů Event Gridu.

  2. Zprávy se přesměrují na vlastní téma, které jste nakonfigurovali.

  3. Zprávy se přeposílají do odběru událostí, což je funkce Azure.

  4. Pomocí funkce protokolování ověřte, že funkce přijala událost.

    Snímek obrazovky znázorňující stránku streamu protokolu pro funkci Azure

Další krok

Podívejte se na ukázky kódu v tomto úložišti GitHubu.