Weiterleiten von Cloudereignissen an Webhooks mit Azure Event Grid auf Kubernetes

In diesem Schnellstart erstellen Sie ein Thema im Event Grid auf Kubernetes, ein Abonnement für das Thema und senden dann ein Beispielereignis an das Thema, um das Szenario zu testen.

Wichtig

Event Grid in Kubernetes mit Azure Arc befindet sich derzeit in der öffentlichen Vorschau. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Voraussetzungen

  1. Verbinden Sie Ihren Kubernetes-Cluster mit Azure Arc.
  2. Installieren der Azure Event-Grid-Erweiterung auf dem Kubernetes-Cluster. Diese Erweiterung stellt Event Grid in einem Kubernetes-Cluster bereit.

Erstellen eines benutzerdefinierten Standorts

Als Azure-Standorterweiterung können Sie mit einem benutzerdefinierten Standort Ihren Kubernetes-Cluster mit Azure Arc-Unterstützung als Zielstandort für die Bereitstellung von Ressourcen wie Event Grid-Themen verwenden. Ein benutzerdefinierter Speicherort stellt einen Namespace im Cluster dar und ist die Stelle, an der Themen und Ereignisabonnements bereitgestellt werden. In diesem Abschnitt erstellen Sie einen benutzerdefinierten Speicherort.

  1. Deklarieren Sie die folgenden Variablen für die Namenswerte des Azure Arc-Clusters, der Ressourcengruppe und des benutzerdefinierten Standorts. Kopieren Sie diese Anweisungen in einen Editor, ersetzen Sie die Werte, kopieren Sie die Inhalte, und fügen Sie diese in das Bash-Fenster ein.

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. Rufen Sie die Ressourcen-ID des mit Azure Arc verbundenen Clusters ab. Aktualisieren Sie die Werte für den Azure Arc-Clusternamen und Ressourcengruppenparameter, bevor Sie den Befehl ausführen.

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. Rufen Sie die Event Grid-Erweiterungsressourcen-ID ab. In diesem Schritt wird davon ausgegangen, dass Sie der Event Grid-Erweiterung den Namen eventgrid-ext zugewiesen haben. Aktualisieren Sie die Namen des Azure Arc-Clusters und der Ressourcengruppen, bevor Sie den Befehl ausführen.

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. Erstellen Sie einen benutzerdefinierten Speicherort mit den beiden Werten aus dem vorherigen Schritt. Aktualisieren Sie die Namen des benutzerdefinierten Standorts und der Ressourcengruppen, bevor Sie den Befehl ausführen.

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. Rufen Sie die Ressourcen-ID des benutzerdefinierten Standorts ab. Aktualisieren Sie den Namen des benutzerdefinierten Standorts, bevor Sie den Befehl ausführen.

    customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)    
    

    Weitere Informationen zum Erstellen von benutzerdefinierten Standorten finden Sie unter Erstellen und Verwalten von benutzerdefinierten Standorten in Kubernetes-Clustern mit Azure Arc-Unterstützung.

Erstellen eines Themas

In diesem Abschnitt erstellen Sie ein Thema im benutzerdefinierten Speicherort, den Sie im vorherigen Schritt erstellt haben. Aktualisieren Sie die Namen der Ressourcengruppen und der Event Grid-Themen, bevor Sie den Befehl ausführen. Aktualisieren Sie den Speicherort, wenn Sie einen anderen Speicherort als „USA, Osten“ verwenden.

  1. Deklarieren Sie eine Variable für den Namen des Themas.

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

    az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region    
    

    Weitere Informationen zum CL-Befehl finden Sie unter az eventgrid topic create.

Erstellen eines Nachrichtenendpunkts

Erstellen Sie zunächst einen Endpunkt für die Ereignisnachricht, bevor Sie ein Abonnement für das benutzerdefinierte Thema erstellen. Der Endpunkt führt in der Regel Aktionen auf der Grundlage der Ereignisdaten aus. Um diesen Schnellstart zu vereinfachen stellen Sie eine vorab erstellte Web-App bereit, welche die Ereignisnachrichten anzeigt. Die bereitgestellte Lösung umfasst einen App Service-Plan, eine App Service-Web-App und Quellcode von GitHub.

  1. Wählen Sie auf der Artikelseite Deploy to Azure (In Azure bereitstellen) aus, um die Lösung für Ihr Abonnement bereitzustellen. Geben Sie im Azure-Portal Werte für die Parameter an.

    Button to deploy the Resource Manager template to Azure.

  2. Die Bereitstellung kann einige Minuten dauern. Nach erfolgreichem Abschluss der Bereitstellung können Sie Ihre Web-App anzeigen und sich vergewissern, dass sie ausgeführt wird. Navigieren Sie hierzu in einem Webbrowser zu https://<your-site-name>.azurewebsites.net.

    Wenn die Bereitstellung fehlschlägt, überprüfen Sie die Fehlermeldung. Möglicherweise ist der Name der Website bereits vergeben. Stellen Sie die Vorlage noch mal bereit, und wählen Sie einen anderen Namen für die Site aus.

  3. Die Website wird angezeigt, aber es wurden noch keine Ereignisse bereitgestellt.

    View new site

Erstellen eines Abonnements

Abonnenten können sich für Ereignisse registrieren, die in einem Thema veröffentlicht werden. Zum Empfangen von Ereignissen müssen Sie ein Event Grid-Abonnement für ein Thema von Interesse erstellen. Ein Event-Abonnement definiert das Ziel, an das diese Ereignisse gesendet werden. Informationen zu allen unterstützten Zielen oder Handlern finden Sie unter Ereignishandler.

Geben Sie zum Erstellen eines Ereignisabonnements mit einem Webhook-Ziel (HTTPS-Endpunkt) einen Namen für das Ereignisabonnement ein, aktualisieren Sie den Namen der Website, und führen Sie den folgenden Befehl aus.

topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates

Weitere Informationen zum CL-Befehl finden Sie unter az eventgrid event-subscription create.

Ereignisse an das Thema senden

  1. 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. Sie veröffentlichen Beispielereignisse an diesen Themenendpunkt.

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. 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. Das ist der Primärschlüssel des Themas. Um diesen Schlüssel aus dem Azure-Portal abzurufen, wechseln Sie zur Registerkarte Zugriffsschlüssel der Seite Event Grid-Thema. Um ein Ereignis in einem benutzerdefinierten Thema bereitstellen zu können, benötigen Sie den Zugriffsschlüssel.

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. Führen Sie den folgenden Curl-Befehl aus, um das Ereignis zu posten. Geben Sie die Endpunkt-URL und den Schlüssel aus Schritt 1 und 2 an, bevor Sie den Befehl ausführen.

    curl  -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \
    -d  '[{ 
          "specversion": "1.0",
          "type" : "orderCreated",
          "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName",
          "id" : "eventId-n",
          "time" : "2020-12-25T20:54:07+00:00",
          "subject" : "account/acct-123224/order/o-123456",
          "dataSchema" : "1.0",
          "data" : {
             "orderId" : "123",
             "orderType" : "PO",
             "reference" : "https://www.myCompanyName.com/orders/123"
          }
    }]'
    

    Wenn die Themenendpunkt-URL aus Schritt 1 eine private IP-Adresse ist, z. B. bei Verwendung des Diensttyps „ClusterIP“ für den Event Grid-Broker, können Sie Curl aus einem anderen Pod im Cluster ausführen, damit Zugriff auf diese IP-Adresse besteht. Sie können beispielsweise die folgenden Schritte ausführen:

    1. Erstellen Sie eine Manifestdatei mit der folgenden Konfiguration. Es kann ratsam sein, dnsPolicy gemäß Ihren Anforderungen anzupassen. Weitere Informationen finden Sie unter DNS für Dienste und Pods.

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. Erstellen Sie den Pod.

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. Vergewissern Sie sich, dass der Pod ausgeführt wird.

          kubectl get pod test-pod
      
    4. Starten einer Shellsitzung über den Container

          kubectl exec --stdin --tty test-pod -- /bin/bash
      

    An diesem Punkt verfügen Sie über eine Shellsitzung aus einem ausgeführten Container im Cluster, über die Sie den cURL-Befehl ausführen können, der in einem der vorherigen Schritte beschrieben wurde.

    Hinweis

    Um zu erfahren, wie Sie Cloudereignisse mithilfe von Programmiersprachen senden können, sehen Sie sich die folgenden Beispiele an:

Überprüfen im Event Grid-Viewer

Sie haben das Ereignis ausgelöst, und Event Grid hat die Nachricht an den Endpunkt gesendet, den Sie beim Abonnieren konfiguriert haben. Zeigen Sie Ihre Web-App an, um das soeben gesendete Ereignis anzuzeigen.

View received event in Event Grid Viewer

Nächste Schritte

Weitere Informationen finden Sie in folgenden Artikeln:

  • Ereignishandler und -Ziele: stellt Informationen über alle Ereignishandler und Ziele bereit, die Event Grid auf Kubernetes unterstützt.
  • Ereignisfilterung: stellt Informationen bezüglich des Filterns von Ereignissen in Ereignisabonnements bereit.