Schnellstart: Weiterleiten benutzerdefinierter Ereignisse an Azure Queue Storage über Event Grid mithilfe der Azure CLI

Azure Event Grid ist ein hochgradig skalierbarer, serverloser Ereignisbroker, mit dem Sie Anwendungen mithilfe von Ereignissen integrieren können. Ereignisse werden von Azure Event Grid an unterstützte Ereignishandler übermittelt. Azure Queue Storage ist einer davon. In diesem Artikel wird die Azure CLI für folgende Schritte verwendet:

  1. Erstellt ein benutzerdefiniertes Event Grid-Thema.
  2. Erstellen eines Azure Queue-Abonnements für das benutzerdefinierte Thema
  3. Senden von Beispielereignissen an das benutzerdefinierte Thema
  4. Sicherstellen, dass diese Ereignisse an Azure Queue Storage übermittelt werden

Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.

Erstellen einer Ressourcengruppe

Event Grid-Themen sind Azure-Ressourcen und müssen in einer Azure-Ressourcengruppe platziert werden. Die Azure-Ressourcengruppe ist eine logische Sammlung, in der Azure-Ressourcen bereitgestellt und verwaltet werden.

Erstellen Sie mithilfe des Befehls az group create eine Ressourcengruppe. Das folgende Beispiel erstellt eine Ressourcengruppe namens gridResourceGroup am Standort westus2.

Hinweis

Wählen Sie neben dem CLI-Beispiel die Option Jetzt testen aus, um Cloud Shell im rechten Bereich zu starten. Wählen Sie die Schaltfläche Kopieren aus, um den Befehl zu kopieren, fügen Sie ihn in das Cloud Shell-Fenster ein, und drücken Sie anschließend die EINGABETASTE, um den Befehl auszuführen.

az group create --name gridResourceGroup --location westus2

Aktivieren des Event Grid-Ressourcenanbieters

  1. Wenn Sie zuvor in Ihrem Azure-Abonnement noch nicht Event Grid verwendet haben, sollten Sie den Event Grid-Ressourcenanbieter registrieren. Führen Sie den folgenden Befehl aus, um den Anbieter zu registrieren:

    az provider register --namespace Microsoft.EventGrid
    
  2. Es kann einen Moment dauern, bis die Registrierung abgeschlossen ist. Führen Sie den folgenden Befehl aus, um den Status zu überprüfen:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Wenn registrationStateRegistered ist, können Sie den Vorgang fortsetzen.

Erstellen eines benutzerdefinierten Themas

Ein Event Grid-Thema stellt einen benutzerdefinierten Endpunkt bereit, an dem Sie Ihre Ereignisse posten. Im folgenden Beispiel wird das benutzerdefinierte Thema in Ihrer Ressourcengruppe erstellt. Ersetzen Sie <topic_name> durch einen eindeutigen Namen für Ihr benutzerdefiniertes Thema. Der Name des Event Grid-Themas muss eindeutig sein, da er durch einen DNS-Eintrag dargestellt wird.

  1. Geben Sie einen Namen für das Thema an.

    topicname="<TOPIC NAME>"
    
  2. Führen Sie den folgenden Befehl aus, um das Thema zu erstellen.

    az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
    

Erstellen einer Queue Storage-Instanz

Vor dem Abonnieren des benutzerdefinierten Themas erstellen wir zunächst den Endpunkt für die Ereignisnachricht. Sie erstellen eine Queue Storage-Instanz zum Sammeln der Ereignisse.

  1. Geben Sie einen eindeutigen Namen für das Azure Storage-Konto an.

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. Führen Sie die folgenden Befehle aus, um ein Azure Storage-Konto und eine Warteschlange (mit dem Namen eventqueue) im Speicher zu erstellen.

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l westus2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

Abonnieren eines benutzerdefinierten Themas

Im folgenden Beispiel wird das von Ihnen erstellte benutzerdefinierte Thema abonniert. Außerdem wird die Ressourcen-ID der Queue Storage-Instanz für den Endpunkt übergeben. Mit Azure CLI übergeben Sie die Warteschlangenspeicher-ID als Endpunkt. Der Endpunkt weist folgendes Format auf:

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

Das folgende Skript ruft die Ressourcen-ID des Speicherkontos für die Warteschlange ab. Es erstellt die ID für die Queue Storage-Instanz und abonniert ein Event Grid-Thema. Es legt den Endpunkttyp auf storagequeue fest und verwendet die Queue Storage-ID für den Endpunkt.

Wichtig

Ersetzen Sie den Platzhalter für das Ablaufdatum (<yyyy-mm-dd>) durch einen tatsächlichen Wert. Beispiel: 2022-11-17 vor dem Ausführen des Befehls.

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

Das Konto, das das Ereignisabonnement erstellt, muss über Schreibzugriff auf die Queue Storage-Instanz verfügen. Beachten Sie, dass für das Abonnement ein Ablaufdatum festgelegt ist.

Wenn Sie die REST-API zum Erstellen des Abonnements verwenden, übergeben Sie die ID des Speicherkontos und den Namen der Warteschlange als separaten Parameter.

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

Senden eines Ereignisses an Ihr benutzerdefiniertes Thema

Nun wird ein Ereignis ausgelöst, um zu sehen, wie Event Grid die Nachricht an Ihren Endpunkt weiterleitet. Zunächst rufen wir die URL und den Schlüssel für das benutzerdefinierte Thema ab.

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

Zur Vereinfachung dieses Artikels verwenden Sie Beispielereignisdaten, die an das benutzerdefinierte Thema gesendet werden können. Üblicherweise werden die Ereignisdaten von einer Anwendung oder einem Azure-Dienst gesendet. CURL ist ein Hilfsprogramm zum Senden von HTTP-Anforderungen. In diesem Artikel verwenden Sie CURL, um das Ereignis an das benutzerdefinierte Thema zu senden. Das folgende Beispiel sendet drei Ereignisse an das Event Grid-Thema:

for i in 1 2 3
do
   event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
   curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

Navigieren Sie zur Queue Storage-Instanz im Portal, und beachten Sie, dass Event Grid diese drei Ereignisse an die Warteschlange gesendet hat.

Screenshot showing the list of messages in the queue that are received from Event Grid.

Bereinigen von Ressourcen

Wenn Sie dieses Ereignis weiterverwenden möchten, können Sie die Bereinigung der in diesem Artikel erstellten Ressourcen überspringen. Verwenden Sie andernfalls den folgenden Befehl, um die in diesem Artikel erstellten Ressourcen zu löschen.

az group delete --name gridResourceGroup

Nächste Schritte

Sie haben gelernt, wie Sie Themen und Ereignisabonnements erstellen. Nun können Sie sich ausführlicher darüber informieren, welche Möglichkeiten Event Grid bietet:

In den folgenden Beispielen erfahren Sie, wie Sie Ereignisse in Event Grid mithilfe verschiedener Programmiersprachen veröffentlichen und nutzen: