Benutzerdefinierte Ereignisse empfangen

Im Folgenden wird gezeigt, wie Sie mit dem curl-Befehlszeilentool benutzerdefinierte Ereignisse generieren und diese Ereignisse dann an einen Dienst in Cloud Run for Anthos in Google Cloud senden.

Vorbereitung

Zum Ausführen dieser Aufgabe benötigen Sie einen Ereignis-Broker und Sie müssen wissen, in welchem Namespace er ausgeführt wird. Erfahren Sie mehr zum Konfigurieren von Ereignissen für Cloud Run for Anthos und zum Erstellen eines Ereignis-Brokers.

Wenn ein Ereignis-Broker ausgeführt wird, können Sie den Kubernetes-Namespace mit folgendem Befehl aufrufen:

kubectl get brokers -n NAMESPACE

Cloud Run for Anthos-Dienst in Google Cloud zum Empfangen von Ereignissen bereitstellen

Stellen Sie einen Cloud Run for Anthos-Dienst in Google Cloud bereit, der Ereignisse vom Ereignis-Broker empfängt.

So stellen Sie den Cloud Run for Anthos-Dienst in Google Cloud bereit:

  1. Klonen Sie das Repository:

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    
  2. Erstellen Sie den Container und laden Sie ihn in Cloud Build hoch:

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    
  3. Stellen Sie das Container-Image auf Cloud Run for Anthos in Google Cloud bereit:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

Wenn die URL des Dienstes angezeigt wird, wurde sie erfolgreich bereitgestellt.

Ereignisse mit cURL generieren

Sie können curl in einem Google Kubernetes Engine-Pod ausführen, um Ereignisse zu generieren:

  1. Erstellen Sie einen Google Kubernetes Engine-Pod im Namespace Ihres Ereignis-Brokers:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: curl
      name: curl
      namespace: NAMESPACE
    spec:
      containers:
      - image: radial/busyboxplus:curl
        imagePullPolicy: IfNotPresent
        name: curl
        stdin: true
        tty: true
    EOF
    

    Dabei ist NAMESPACE derselbe Namespace wie für Ihren Ereignis-Broker.

  2. Überprüfen Sie mit dem folgenden Befehl, ob der Pod ordnungsgemäß funktioniert:

    kubectl get pod curl -n NAMESPACE
    

    Dabei ist NAMESPACE derselbe Namespace wie für Ihren Ereignis-Broker.

    Es wird nun der Pod mit dem Namen „curl“ ausgeführt (Status=Wird ausgeführt).

Trigger für den Ereignis-Broker erstellen

  1. Erstellen Sie einen Trigger mit dem Filter alpha-type für Ereignisse:

    gcloud beta events triggers create TRIGGER_NAME \
        --namespace NAMESPACE \
        --target-service=CLOUD_RUN_SERVICE_NAME \
        --type=alpha-type \
        --custom-type
    

    Dabei ist NAMESPACE derselbe Namespace wie für Ihren Ereignis-Broker.

    Wenn Sie keinen Filter angeben, werden alle Ereignisse an den Cloud Run for Anthos-Dienst in Google Cloud gesendet. Beachten Sie, dass das Filtern mit exakter Übereinstimmung anhand einer beliebigen Anzahl von CloudEvents-Attributen und -Erweiterungen unterstützt wird. Wenn für Ihren Filter mehrere Attribute festgelegt sind, muss ein Ereignis mit allen Attributen übereinstimmen.

  2. Überprüfen Sie, ob der Trigger eingerichtet ist:

    gcloud beta events triggers list \
        --target-service 'CLOUD_RUN_SERVICE_NAME' \
        --namespace NAMESPACE
    

    Dabei ist NAMESPACE derselbe Namespace wie für Ihren Ereignis-Broker.

    Die Ausgabe sieht etwa so aus:

    TRIGGER                  EVENT TYPE           TARGET
    trigger-name           alpha-type           cloud-run-service
    

Sie sehen, dass der Trigger [TRIGGER-NAME] ausgeführt wird.

Erstellen von Terminen

Zum Generieren eines Ereignisses senden Sie eine HTTP-Anfrage vom Google Kubernetes Engine-Pod an den Event-Broker.

  1. Rufen Sie die URL des Ereignis-Brokers ab, an den die HTTP-Anfrage gesendet wird:

    kubectl get brokers default \
        --namespace NAMESPACE \
        --output jsonpath="{.status.address.url}"
    

    Notieren Sie sich die URL des Brokers, um damit die HTTP-Anfrage zu senden.

  2. Stellen Sie eine SSH-Verbindung zum Pod her:

    kubectl --namespace NAMESPACE attach curl -it
    
  3. Senden Sie mit curl und dem HTTP-Header Ce-Type: alpha-type eine HTTP-Anfrage, um den Filter des Triggers an den Ereignis-Broker anzupassen. In diesem Beispiel lautet die Meldung send-cloudevents-to-broker:

    curl -v "EVENT_BROKER_URL" \
        -X POST \
        -H "Ce-Id: my-id" \
        -H "Ce-Specversion: 1.0" \
        -H "Ce-Type: alpha-type" \
        -H "Ce-Subject: custom event" \
        -H "Ce-Source: my-source" \
        -H "Content-Type: application/json" \
        -d '{"msg":"send-cloudevents-to-broker"}'
    

    Dadurch wird ein Ereignis generiert und der Broker antwortet dann mit der HTTP-Antwort 202.

Ereignis aufrufen

Rufen Sie die Logs des Cloud Run for Anthos-Empfängerdienstes in Google Cloud auf, um sich das Ereignis anzusehen:

  1. Zum Aufrufen der Logs geben Sie Folgendes ein:

    gcloud logging read "resource.type=k8s_container \
        resource.labels.namespace_name=events \
        resource.labels.container_name=user-container"
    

Bereinigen

Löschen Sie die in dieser Anleitung erstellten Ressourcen, um wiederkehrende Gebühren zu vermeiden.

  1. Löschen Sie den Pod:

    kubectl delete pod curl --namespace >NAMESPACE
    
  2. Löschen Sie den Trigger:

    gcloud beta events triggers delete TRIGGER_NAME \
        --namespace >NAMESPACE