Schnellstart: Weiterleiten von benutzerdefinierten Ereignissen an eine Azure-Funktion mit Event Grid

Azure Event Grid ist ein Ereignisdienst für die Cloud. Azure Functions ist einer der unterstützten Ereignishandler. In diesem Artikel erstellen Sie über das Azure-Portal ein benutzerdefiniertes Thema, abonnieren dieses benutzerdefinierte Thema und lösen das Ereignis zum Anzeigen des Ergebnisses aus. Sie senden Ereignisse an eine Azure-Funktion.

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

Erstellen einer Azure-Funktions-App

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im linken Navigationsmenü die Option Alle Dienste aus.

  3. Wählen Sie in der Liste der Kategorien die Option Compute aus.

  4. Zeigen Sie mit dem Mauszeiger auf Funktions-App (nicht darauf klicken), und wählen Sie + aus.

    Screenshot der Auswahl von „Link erstellen“ für eine Funktions-App

  5. Führen Sie auf der Seite Grundlagen des Assistenten für Funktions-App erstellen die folgenden Schritte aus:

    1. Wählen Sie das Azure-Abonnement aus, in dem Sie die Funktions-App erstellen möchten.

    2. Erstellen Sie eine neue Ressourcengruppe, oder wählen Sie eine vorhandene Ressourcengruppe aus.

    3. Geben Sie einen Namen für die Funktions-App an.

    4. Wählen Sie .NET für den Runtimestapel aus.

    5. Wählen Sie für Version6 (LTS), In-Process-Modell aus.

    6. Wählen Sie die Ihnen am nächsten gelegene Region aus.

    7. Wählen Sie Weiter: Storage am unteren Rand der Seite.

      Screenshot der Registerkarte „Grundlagen“ der Seite „Funktions-App erstellen“

  6. Erstellen Sie auf der Seite Storage ein neues Speicherkonto, oder wählen Sie ein vorhandenes Speicherkonto aus, das der Funktions-App zugeordnet werden soll. Wählen Sie dann unten auf der Seite Überprüfen + erstellen aus.

    Screenshot der Registerkarte „Storage“ der Seite „Funktions-App erstellen“

  7. Überprüfen Sie auf der Seite Überprüfen + erstellen die Einstellungen, und wählen Sie unten auf der Seite Erstellen aus, um die Funktions-App zu erstellen.

  8. Wenn die Bereitstellung erfolgreich war, wählen Sie Zu Ressource wechseln aus, um zur Startseite der Funktions-App zu navigieren.

Erstellen einer Funktion

Vor dem Abonnieren des benutzerdefinierten Themas erstellen wir zunächst eine Funktion zur Verarbeitung der Ereignisse.

  1. Wählen Sie auf der Seite Funktions-App im Abschnitt Erstellen im Azure-Portal den Link Funktion erstellen im rechten Bereich aus.

    Screenshot vom Auswählen des Links „Funktion erstellen“

  2. Führen Sie auf der Seite Funktion erstellen die folgenden Schritte aus:

    1. Geben Sie im Abschnitt Vorlage auswählen im Filter- oder Suchfeld Azure Event Grid-Trigger ein.

    2. Wählen Sie in der Vorlagenliste die Vorlage Azure Event Grid-Trigger aus.

    3. Wählen Sie unten auf der Seite die Option Weiter aus.

      Screenshot: Auswählen des Event Grid-Triggers.

    4. Geben Sie auf der Seite Vorlagendetails einen Namen für die Funktion ein. In diesem Beispiel ist dies HandleEventsFunc.

    5. Klicken Sie auf Erstellen.

      Screenshot der Seite „Vorlagendetails“.

  3. Wählen Sie auf der Seite Funktion für HandleEventsFunc im linken Navigationsmenü Code+ Testen aus, ersetzen Sie den Code durch den folgenden Code, und wählen Sie dann Speichern auf der Befehlsleiste aus.

    #r "Azure.Messaging.EventGrid"
    #r "System.Memory.Data"
    
    using Azure.Messaging.EventGrid;
    using System;
    
    public static void Run(EventGridEvent eventGridEvent, ILogger log)
    {
        log.LogInformation(eventGridEvent.Data.ToString());
    }        
    

    Abbildung: Auswahl des Menüs „Code und testen“ für eine Azure-Funktion

  4. Wählen Sie im linken Menü Überwachen aus, und wechseln Sie zur Registerkarte Protokolle. Lassen Sie dieses Fenster oder die Registerkarte des Browsers geöffnet, damit Sie die empfangenen Ereignisinformationen sehen können.

    Screenshot der Ansicht „Überwachen“ der Azure-Funktion

Erstellen eines benutzerdefinierten Themas

Ein Event Grid-Thema stellt einen benutzerdefinierten Endpunkt bereit, an dem Sie Ihre Ereignisse posten.

  1. Melden Sie sich auf einer neuen Registerkarte des Webbrowserfensters beim Azure-Portal an.

  2. Suchen Sie in der Suchleiste des Artikels nach Event Grid-Themen, und wählen Sie Event Grid-Themen aus.

    Abbildung des Auswählens von „Event Grid-Themen“

  3. Wählen Sie auf der Symbolleiste der Seite Event Grid-Themen die Option + Erstellen aus.

    Screenshot der Schaltfläche „Erstellen“ zum Erstellen eines Event Grid-Themas

  4. Gehen Sie auf der Seite Thema erstellen wie folgt vor:

    1. Wählen Sie Ihr Azure-Abonnement aus.

    2. Wählen Sie dieselbe Ressourcengruppe wie in den vorherigen Schritten aus.

    3. Geben Sie unter Name einen eindeutigen Namen für das benutzerdefinierte Thema an. Der Name des Themas muss eindeutig sein, da er durch einen DNS-Eintrag dargestellt wird. Verwenden Sie nicht den Namen, der in der Abbildung zu sehen ist. Erstellen Sie stattdessen einen eigenen Namen. Dieser muss zwischen drei und 50 Zeichen lang sein und darf nur folgende Zeichen enthalten: a–z, A–Z, 0–9 und Bindestriche (-).

    4. Wählen Sie einen Speicherort für das Event Grid-Thema aus.

    5. Klicken Sie auf Überprüfen + erstellen.

      Screenshot: die Seite „Thema erstellen“.

    6. Überprüfen Sie die Einstellungen auf der Seite Überprüfen und erstellen, und wählen Sie Erstellen aus.

  5. Wählen Sie nach dem Erstellen des benutzerdefinierten Themas den Link Zu Ressource wechseln aus, um für das von Ihnen erstellte Thema die folgende Seite „Event Grid-Thema“ anzuzeigen.

    Abbildung: Startseite für Ihr benutzerdefiniertes Event Grid-Thema

Abonnieren eines benutzerdefinierten Themas

Sie abonnieren ein Event Grid-Thema, um Event Grid mitzuteilen, welche Ereignisse Sie nachverfolgen möchten und wohin diese gesendet werden sollen.

  1. Wählen Sie nun auf der Symbolleiste der Seite Event Grid-Thema für Ihr benutzerdefiniertes Thema die Option + Ereignisabonnement aus.

    Abbildung: Auswahl von „Ereignisabonnement hinzufügen“ in der Symbolleiste

  2. Gehen Sie auf der Seite Ereignisabonnement erstellen wie folgt vor:

    1. Geben Sie unter Name einen Namen für das Ereignisabonnement an.

    2. Wählen Sie Azure-Funktion als Endpunkttyp aus.

    3. Wählen Sie Endpunkt konfigurieren aus.

      Abbildung: Werte für Ereignisabonnement

    4. Wählen Sie als Endpunkt der Funktion das Azure-Abonnement und die Ressourcengruppe aus, in der sich Ihre Funktions-App befindet, und wählen Sie dann die zuvor erstellte Funktions-App und Funktion aus. Klicken Sie auf Auswahl bestätigen.

      Abbildung: Seite „Azure-Funktion auswählen“ mit Auswahl der von Ihnen erstellten Funktion

    5. Dieser Schritt ist optional, wird aber für Produktionsszenarien empfohlen. Navigieren Sie auf der Seite Ereignisabonnement erstellen zur Registerkarte Erweiterte Funktionen, und legen Sie Werte für Max. Anzahl von Ereignissen pro Batch und Bevorzugte Batchgröße in KB fest.

      Durch die Batchverarbeitung kann ein hoher Durchsatz erreicht werden. Legen Sie für Max. Anzahl von Ereignissen pro Batch die maximale Anzahl von Ereignissen fest, die ein Abonnement in einen Batch einschließen soll. „Bevorzugte Batchgröße“ legt die bevorzugte Obergrenze der Batchgröße in KB fest, kann jedoch überschritten werden, wenn ein einzelnes Ereignis größer als dieser Schwellenwert ist.

      Abbildung: Batcheinstellungen für ein Ereignisabonnement

    6. Wählen Sie auf der Seite Ereignisabonnement erstellen die Option Erstellen aus.

Senden eines Ereignisses an Ihr Thema

Als Nächstes lösen wir ein Ereignis aus, um zu sehen, wie Event Grid die Nachricht an Ihren Endpunkt weiterleitet. Verwenden Sie die Azure-Befehlszeilenschnittstelle oder PowerShell, um ein Testereignis an Ihr benutzerdefiniertes Thema zu senden. Üblicherweise werden die Ereignisdaten von einer Anwendung oder einem Azure-Dienst gesendet.

Im ersten Beispiel wird die Azure-Befehlszeilenschnittstelle verwendet. Es ruft die URL und den Schlüssel für das benutzerdefinierte Thema sowie Beispielereignisdaten ab. Verwenden Sie für <topic name> den Namen Ihres benutzerdefinierten Themas. Es werden Beispielereignisdaten erstellt. Bei dem data-Element des JSON-Codes handelt es sich um die Nutzlast Ihres Ereignisses. Für dieses Feld kann ein beliebiger wohlgeformter JSON-Code verwendet werden. Sie können auch das Betrefffeld zur erweiterten Weiterleitung und Filterung verwenden. CURL ist ein Hilfsprogramm zum Senden von HTTP-Anforderungen.

Azure CLI

  1. Wählen Sie im Azure-Portal die Option Cloud Shell aus. Wählen Sie links oben im Cloud Shell-Fenster die Option Bash aus.

    Abbildung: Cloud Shell – Bash-Fenster

  2. Legen Sie die Variablen topicname und resourcegroupname fest, die in den Befehlen verwendet werden.

    Ersetzen Sie TOPICNAME durch den Namen Ihres Event Grid-Themas.

    topicname="TOPICNAME"
    

    Ersetzen Sie RESOURCEGROUPNAME durch den Namen der Azure-Ressourcengruppe, die das Event Grid-Thema enthält.

    resourcegroupname="RESOURCEGROUPNAME"
    
  3. Führen Sie den folgenden Befehl aus, um den Endpunkt für das Thema abzurufen: Aktualisieren Sie nach dem Kopieren und Einfügen des Befehls den Namen des Themas (topic name) und den Namen der Ressourcengruppe (resource group name), bevor Sie den Befehl ausführen.

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  4. Führen Sie den folgenden Befehl aus, um den Schlüssel für das benutzerdefinierte Thema abzurufen: Aktualisieren Sie nach dem Kopieren und Einfügen des Befehls den Namen des Themas (topic name) und den Namen der Ressourcengruppe (resource group name), bevor Sie den Befehl ausführen.

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. Kopieren Sie die folgende Anweisung mit der Ereignisdefinition, und drücken Sie die EINGABETASTE.

    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"} ]'
    
  6. Führen Sie den folgenden Curl-Befehl aus, um das Ereignis zu veröffentlichen:

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    

Azure PowerShell

Im zweiten Beispiel werden ähnliche Schritte mit PowerShell ausgeführt.

  1. Wählen Sie im Azure-Portal die Option Cloud Shell aus (navigieren Sie alternativ zu https://shell.azure.com/). Wählen Sie links oben im Cloud Shell-Fenster die Option PowerShell aus. Eine Beispielabbildung des Fensters Cloud Shell finden Sie im Abschnitt für die Azure-Befehlszeilenschnittstelle.

  2. Legen Sie die folgenden Variablen fest. Aktualisieren Sie nach dem Kopieren und Einfügen der einzelnen Befehle den Namen des Themas (topic name) und den Namen der Ressourcengruppe (resource group name), bevor Sie den Befehl ausführen:

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  3. Führen Sie die folgenden Befehle aus, um den Endpunkt und die Schlüssel für das Thema abzurufen:

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  4. Bereiten Sie das Ereignis vor. Kopieren Sie die Anweisungen, und führen Sie sie im Cloud Shell-Fenster aus.

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert event body from Hashtable to JSON Object
    #Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  5. Verwenden Sie das Cmdlet Invoke-WebRequest, um das Ereignis zu senden.

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    

Überprüfen, ob die Funktion das Ereignis empfangen hat

Sie haben das Ereignis ausgelöst, und Event Grid hat die Nachricht an den Endpunkt gesendet, den Sie beim Abonnieren konfiguriert haben.

  1. Auf der Seite Überwachen für Ihre Azure-Funktion wird ein Aufruf angezeigt.

    Screenshot der Registerkarte

  2. Wählen Sie den Aufruf aus, um die Details anzuzeigen.

    Screenshot mit den Details zum Aufrufen.

  3. Sie können auch die Registerkarte Protokolle im rechten Bereich verwenden, um die protokollierten Nachrichten anzuzeigen, wenn Sie Ereignisse an den Endpunkt des Themas posten.

    Abbildung: Ansicht „Überwachung“ der Azure-Funktion mit einem Protokoll

Bereinigen von Ressourcen

Wenn Sie dieses Ereignis weiterverwenden möchten, können Sie die Bereinigung der in diesem Artikel erstellten Ressourcen überspringen. Löschen Sie andernfalls die Ressourcen, die Sie in diesem Artikel erstellt haben.

  1. Wählen Sie im linken Menü die Option Ressourcengruppen aus. Sollte die Option nicht angezeigt werden, wählen Sie im linken Menü die Option Alle Dienste und anschließend Ressourcengruppen aus.

  2. Wählen Sie die Ressourcengruppe aus, um die Seite Ressourcengruppe zu öffnen.

  3. Wählen Sie auf der Symbolleiste die Option Ressourcengruppe löschen aus.

  4. Bestätigen Sie den Löschvorgang, indem Sie den Namen der Ressourcengruppe eingeben und Löschen auswählen.

    Ressourcengruppen

    Die andere Ressourcengruppe, die auf der Abbildung zu sehen ist, wurde vom Cloud Shell-Fensters erstellt und verwendet. Löschen Sie sie, falls Sie das Cloud Shell-Fenster nicht mehr benötigen.

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: