Cloud Run-Job ausführen, der in Cloud Storage gespeicherte Ereignisdaten verarbeitet


Mit Workflows können Sie einen Cloud Run-Job als Teil eines Workflows ausführen, der eine komplexere Datenverarbeitung ausführt oder ein System vorhandener Jobs orchestriert.

In dieser Anleitung wird gezeigt, wie Sie mit Workflows einen Cloud Run-Job ausführen, der Ereignisdaten verarbeitet, die in einem Cloud Storage-Bucket gespeichert sind. Wenn Sie die Ereignisnutzlast in einem Cloud Storage-Bucket speichern, können Sie die Daten mit vom Kunden verwalteten Verschlüsselungsschlüsseln verschlüsseln. Dies ist nicht möglich, wenn Sie die Ereignisdaten als Umgebungsvariablen an den Cloud Run-Job übergeben.

Das folgende Diagramm bietet einen allgemeinen Überblick:

Das Pub/Sub-Ereignis wird vom Eventarc-Trigger an Workflows weitergeleitet und im Cloud Storage-Bucket gespeichert. Ein Cloud Run-Job verarbeitet Ereignisdaten, die im Bucket gespeichert sind.

Lernziele

In dieser Anleitung werden Sie:

  1. Cloud Run-Job erstellen, der Ereignisdaten verarbeitet, die in einem Cloud Storage-Bucket gespeichert sind
  2. Stellen Sie einen Workflow bereit, der folgende Aufgaben ausführt:
    1. Empfängt ein Ereignis als Argument.
    2. Schreibt die Ereignisnutzlastdaten in den Cloud Storage-Bucket.
    3. Verwendet den Cloud Run Admin API-Connector, um den Cloud Run-Job auszuführen.
  3. Erstellen Sie ein Pub/Sub-Thema, in dem Sie eine Nachricht veröffentlichen können. In dieser Anleitung wird ein Pub/Sub-Ereignis als Beispiel für die Weiterleitung von Ereignissen mithilfe von Workflows verwendet. Dabei wird das Ereignis in Cloud Storage gespeichert, damit ein Cloud Run-Job die Ereignisdaten verarbeiten kann.
  4. Erstellen Sie einen Eventarc-Trigger, der den Workflow ausführt, wenn eine Nachricht in das Pub/Sub-Thema geschrieben wird.
  5. Lösen Sie den Workflow aus, indem Sie eine Nachricht an das Pub/Sub-Thema schreiben.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln.

Bevor Sie mit dieser Anleitung beginnen, müssen Sie bestimmte APIs aktivieren und ein nutzerverwaltetes Dienstkonto erstellen. Sie müssen dem Dienstkonto die erforderlichen Rollen und Berechtigungen gewähren, damit Sie Ereignisse mit einem Eventarc-Trigger weiterleiten und einen Workflow ausführen können.

Console

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs aktivieren.

    Aktivieren Sie die APIs

  5. Erstellen Sie ein Dienstkonto:

    1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.

      Zur Seite „Dienstkonto erstellen“
    2. Wählen Sie Ihr Projekt aus.
    3. Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.

      Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel: Service account for quickstart.

    4. Klicken Sie auf Erstellen und fortfahren.
    5. Weisen Sie dem Dienstkonto die folgenden Rollen zu: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.

      Wenn Sie eine Rolle zuweisen möchten, wählen Sie die Liste Rolle auswählen aus und wählen Sie die Rolle aus.

      Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.

    6. Klicken Sie auf Weiter.
    7. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

  6. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  7. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  8. Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs aktivieren.

    Aktivieren Sie die APIs

  9. Erstellen Sie ein Dienstkonto:

    1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.

      Zur Seite „Dienstkonto erstellen“
    2. Wählen Sie Ihr Projekt aus.
    3. Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.

      Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel: Service account for quickstart.

    4. Klicken Sie auf Erstellen und fortfahren.
    5. Weisen Sie dem Dienstkonto die folgenden Rollen zu: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.

      Wenn Sie eine Rolle zuweisen möchten, wählen Sie die Liste Rolle auswählen aus und wählen Sie die Rolle aus.

      Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.

    6. Klicken Sie auf Weiter.
    7. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

  10. Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, um authentifizierte Pub/Sub-Push-Anfragen zu unterstützen, weisen Sie dem Dienst-Agent die Rolle Ersteller von Dienstkonto-Tokens (roles/iam.serviceAccountTokenCreator) zu. Andernfalls wird diese Rolle standardmäßig gewährt:
    1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

      IAM aufrufen

    2. Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen.
    3. Suchen Sie in der Spalte Name das Cloud Pub/Sub-Dienstkonto und klicken Sie dann in der entsprechenden Zeile auf Hauptkonto bearbeiten.
    4. Klicken Sie entweder auf Rolle hinzufügen oder Weitere Rolle hinzufügen.
    5. Filtern Sie in der Liste Rolle auswählen nach Ersteller von Dienstkonto-Tokens und wählen Sie dann die Rolle aus.
    6. Klicken Sie auf Speichern.
  11. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  12. Cloud Shell unterstützt die Befehlszeilenschritte in dieser Anleitung.

gcloud

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs:

    gcloud services enable cloudbuild.googleapis.com run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com
  7. Richten Sie die Authentifizierung ein:

    1. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    2. Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker für jede der folgenden IAM-Rollen einmal aus:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Dabei gilt:

      • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
      • ROLE: die zu gewährende Rolle
  8. Installieren Sie die Google Cloud CLI.
  9. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  10. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  11. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  12. Aktivieren Sie die Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs:

    gcloud services enable cloudbuild.googleapis.com run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com
  13. Richten Sie die Authentifizierung ein:

    1. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    2. Weisen Sie dem Dienstkonto Rollen zu. Führen Sie den Befehl roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker für jede der folgenden IAM-Rollen einmal aus:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Dabei gilt:

      • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
      • ROLE: die zu gewährende Rolle
  14. Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, um authentifizierte Pub/Sub-Push-Anfragen zu unterstützen, weisen Sie dem Dienst-Agent die Rolle Ersteller von Dienstkonto-Tokens (roles/iam.serviceAccountTokenCreator) zu. Andernfalls wird diese Rolle standardmäßig gewährt:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  15. Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

Cloud Run-Job erstellen

In dieser Anleitung wird Beispielcode verwendet, den Sie auf GitHub finden. Das Bereitstellungsskript erstellt ein Container-Image, um einen Cloud Run-Job zu erstellen. Das Skript erstellt auch einen Cloud Storage-Bucket. Der Cloud Run-Job liest alle im Cloud Storage-Bucket gespeicherten Ereignisdaten und gibt dann die Ereignisdaten aus.

  1. Rufen Sie den Beispielcode ab, indem Sie das Repository der Beispielanwendung auf Ihren lokalen Computer klonen:

    git clone https://github.com/GoogleCloudPlatform/workflows-demos.git
    

    Alternativ können Sie das Beispiel als ZIP-Datei herunterladen.

  2. Wechseln Sie in das Verzeichnis, das den Beispielcode enthält:

    cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job
    
  3. Erstellen Sie den Cloud Run-Job, indem Sie das Bereitstellungsskript ausführen:

    ./deploy-job.sh
    

Das Skript erstellt einen Cloud Storage-Bucket mit dem Namen message-payload-PROJECT_ID, wobei PROJECT_ID die ID Ihres Google Cloud-Projekts ist. Außerdem wird ein Cloud Run-Job mit dem Namen message-payload-job erstellt.

Workflow bereitstellen, der den Cloud Run-Job ausführt

Definieren und stellen Sie einen Workflow bereit, der den soeben erstellten Cloud Run-Job ausführt. Eine Workflowdefinition besteht aus einer Reihe von Schritten, die mithilfe der Workflows-Syntax beschrieben werden.

Der Workflow empfängt ein Ereignis, speichert die Ereignisdaten in einem Cloud Storage-Bucket und führt dann einen Cloud Run-Job aus, um die Ereignisdaten zu verarbeiten.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf:

    Zur Seite "Workflows"

  2. Klicken Sie auf Erstellen.

  3. Geben Sie einen Namen für den neuen Workflow ein, z. B. message-payload-workflow.

  4. Wählen Sie eine geeignete Region aus, z. B. us-central1.

  5. Wählen Sie im Feld Dienstkonto das Dienstkonto aus, das Sie zuvor erstellt haben.

    Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben:

    • Cloud Run-Administrator: zum Ausführen von Cloud Run-Jobs
    • Logautor: Zum Schreiben von Logeinträgen
    • Storage Object Creator: zum Erstellen von Objekten in Cloud Storage
  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für den Workflow ein:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: ${"message-payload-" + project_id}
                    - event_file: ${event.id + ".data.json"}
                    - job_name: message-payload-job
                    - job_location: us-central1
            - log_event:
                call: sys.log
                args:
                    data: ${event}
            - write_payload_to_gcs:
                call: http.post
                args:
                    url: ${"https://storage.googleapis.com/upload/storage/v1/b/" + event_bucket + "/o"}
                    auth:
                        type: OAuth2
                    query:
                        name: ${event_file}
                    body:
                        ${event.data}
            - run_job_to_process_payload:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    body:
                        overrides:
                            containerOverrides:
                                env:
                                    - name: INPUT_BUCKET
                                      value: ${event_bucket}
                                    - name: INPUT_FILE
                                      value: ${event_file}
                result: job_execution
            - finish:
                return: ${job_execution}
  8. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch message-payload-workflow.yaml
    
  2. Kopieren Sie die folgende Workflowdefinition in message-payload-workflow.yaml:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: ${"message-payload-" + project_id}
                    - event_file: ${event.id + ".data.json"}
                    - job_name: message-payload-job
                    - job_location: us-central1
            - log_event:
                call: sys.log
                args:
                    data: ${event}
            - write_payload_to_gcs:
                call: http.post
                args:
                    url: ${"https://storage.googleapis.com/upload/storage/v1/b/" + event_bucket + "/o"}
                    auth:
                        type: OAuth2
                    query:
                        name: ${event_file}
                    body:
                        ${event.data}
            - run_job_to_process_payload:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    body:
                        overrides:
                            containerOverrides:
                                env:
                                    - name: INPUT_BUCKET
                                      value: ${event_bucket}
                                    - name: INPUT_FILE
                                      value: ${event_file}
                result: job_execution
            - finish:
                return: ${job_execution}
  3. Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:

    gcloud workflows deploy message-payload-workflow \
        --location=us-central1 \
        --source=message-payload-workflow.yaml \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Ersetzen Sie Folgendes:

    • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos, das Sie zuvor erstellt haben
    • PROJECT_ID: die ID Ihres Google Cloud-Projekts

    Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben:

    • roles/logging.logWriter: zum Schreiben von Logeinträgen
    • roles/run.admin: zum Ausführen von Cloud Run-Jobs
    • roles/storage.objectCreator: zum Erstellen von Objekten in Cloud Storage

Der Workflow umfasst folgende Schritte:

  1. Schritt init: Akzeptiert ein Ereignis als Argument und legt die erforderlichen Variablen fest.

  2. Schritt log_event: Erstellt einen Logeintrag in Cloud Logging mit der Funktion sys.log.

  3. Schritt write_payload_to_gcs: Führt eine HTTP-POST-Anfrage aus und schreibt die Ereignisnutzlastdaten in eine Cloud Storage-Bucket-Datei.

  4. Schritt run_job_to_process_payload: Zum Ausführen des Jobs wird die Connector-Methode googleapis.run.v1.namespaces.jobs.run der Cloud Run Admin API verwendet. Der Cloud Storage-Bucket und der Name der Datendatei werden als Überschreibungsvariablen vom Workflow an den Job übergeben.

  5. Schritt finish: Gibt Informationen zur Jobausführung als Ergebnis des Workflows zurück.

Pub/Sub-Thema erstellen

Erstellen Sie ein Pub/Sub-Thema, in dem Sie eine Nachricht veröffentlichen können. Mit einem Pub/Sub-Ereignis wird gezeigt, wie ein Ereignis mithilfe von Workflows weitergeleitet und in Cloud Storage gespeichert wird, damit ein Cloud Run-Job die Ereignisdaten verarbeiten kann.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Themen auf.

    Themen aufrufen

  2. Klicken Sie auf Thema erstellen.

  3. Geben Sie im Feld Themen-ID eine ID für das Thema ein, z. B. message-payload-topic.

  4. Behalten Sie die Option Standardabo hinzufügen bei.

  5. Wählen Sie die anderen Optionen nicht aus.

  6. Klicken Sie auf Erstellen.

gcloud

Führen Sie den Befehl gcloud pubsub topics create aus, um ein Thema mit der ID message-payload-topic zu erstellen:

gcloud pubsub topics create message-payload-topic

Eventarc-Trigger erstellen, um Ereignisse an den Workflow weiterzuleiten

Zum automatischen Ausführen des Workflows und damit des Cloud Run-Jobs erstellen Sie einen Eventarc-Trigger, der auf Pub/Sub-Ereignisse reagiert und die Ereignisse an den Workflow weiterleitet. Immer wenn eine Nachricht in das Pub/Sub-Thema geschrieben wird, löst das Ereignis eine Ausführung des Workflows aus.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf:

    Zur Seite "Workflows"

  2. Klicken Sie auf den Namen des Workflows, z. B. message-payload-workflow.

  3. Klicken Sie auf der Seite Workflowdetails auf Bearbeiten.

  4. Klicken Sie auf der Seite Workflow bearbeiten im Abschnitt Trigger auf Neuen Trigger hinzufügen > Eventarc.

    Der Bereich Eventarc-Trigger wird geöffnet.

  5. Geben Sie im Feld Triggername einen Namen für den Trigger ein, z. B. message-payload-trigger.

  6. Wählen Sie aus der Liste Ereignisanbieter die Option Cloud Pub/Sub aus.

  7. Wählen Sie in der Liste Ereignis die Option google.cloud.pubsub.topic.v1.messagePublished aus.

  8. Wählen Sie aus der Liste Cloud Pub/Sub-Thema auswählen das Pub/Sub-Thema aus, das Sie zuvor erstellt haben.

  9. Wählen Sie im Feld Dienstkonto das Dienstkonto aus, das Sie zuvor erstellt haben.

    Das Dienstkonto dient als Triggeridentität. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben:

    • Eventarc-Ereignisempfänger: zum Empfangen von Ereignissen
    • Workflows Invoker: zum Ausführen von Workflows
  10. Klicken Sie auf Trigger speichern.

    Der Eventarc-Trigger wird jetzt auf der Seite Workflow bearbeiten im Bereich Trigger angezeigt.

  11. Klicken Sie auf Weiter.

  12. Klicken Sie auf Bereitstellen.

gcloud

Erstellen Sie mit dem folgenden Befehl einen Eventarc-Trigger:

gcloud eventarc triggers create message-payload-trigger \
    --location=us-central1 \
    --destination-workflow=message-payload-workflow \
    --destination-workflow-location=us-central1 \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/PROJECT_ID/topics/message-payload-topic \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos, das Sie zuvor erstellt haben.

Das Dienstkonto dient als Triggeridentität. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben:

  • roles/eventarc.eventReceiver: zum Empfangen von Ereignissen
  • roles/workflows.invoker: Ausführen von Workflows

Workflow auslösen

Testen Sie das End-to-End-System, indem Sie eine Nachricht im Pub/Sub-Thema veröffentlichen und ein Ereignis generieren. Weitere Informationen finden Sie unter Workflow mit Ereignissen oder Pub/Sub-Nachrichten auslösen.

  1. Senden Sie eine Nachricht an das Pub/Sub-Thema, um ein Ereignis zu generieren:

    gcloud pubsub topics publish message-payload-topic --message="Hello World"
    

    Das Ereignis wird an den Workflow weitergeleitet, der die Ereignisnachricht protokolliert, die Ereignisdaten im Cloud Storage-Bucket speichert und den Cloud Run-Job ausführt, um die in Cloud Storage gespeicherten Daten zu verarbeiten. Dies kann einen Moment dauern.

  2. Prüfen Sie, ob der Cloud Run-Job wie erwartet ausgeführt wurde. Sehen Sie sich dazu die Jobausführungen an:

    gcloud run jobs executions list --job=message-payload-job
    

    In der Ausgabe sollte eine neue Jobausführung angezeigt werden.

  3. Führen Sie den folgenden Befehl aus, um die ereignisbezogenen Logeinträge aufzurufen, die durch Auslösen des Workflows erstellt wurden:

    gcloud logging read "resource.type=cloud_run_job AND textPayload:Payload"
    
  4. Suchen Sie nach einem Logeintrag wie dem folgenden:

    textPayload: "Payload: {'message': {'data': 'SGVsbG8gV29ybGQ=', 'messageId': '8834108235224238',\
    \ 'publishTime': '2023-09-20T17:07:52.921Z'}, 'subscription': 'projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741'}"
    ...
    resource:
    labels:
      job_name: message-payload-job
      location: us-central1
      project_id: MY_PROJECT
    type: cloud_run_job
    textPayload: Processing message payload gs://message-payload-MY_PROJECT/8254002311197919.data.json
    
  5. Sie können bestätigen, dass die Ergebnisse Ihren Erwartungen entsprechen, indem Sie sich die Ereignisdaten im Cloud Storage-Bucket-Objekt ansehen.

    1. Rufen Sie den Bucket-Namen ab:

      gsutil ls

      Die Ausgabe sieht in etwa so aus:

      gs://message-payload-PROJECT_ID/

    2. Listen Sie die Objekte in Ihrem Bucket auf:

      gsutil ls -r gs://message-payload-PROJECT_ID/**

      Die Ausgabe sollte in etwa so aussehen:

      gs://message-payload-PROJECT_ID/OBJECT_ID.data.json

      Notieren Sie sich die OBJECT_ID, die Sie im nächsten Schritt benötigen.

    3. Laden Sie das Objekt in Ihrem Bucket als Datei herunter:

      gcloud storage cp gs://message-payload-PROJECT_ID/OBJECT_ID.data.json message-event.txt

      Ersetzen Sie OBJECT_ID durch die ID, die im vorherigen Schritt zurückgegeben wurde.

    4. Öffnen Sie die Datei message-event.txt in einem Texteditor. Der in die Datei geschriebene Ereignistext sollte in etwa so aussehen:

      {
        "message": {
          "data": "SGVsbG8gV29ybGQ=",
          "messageId": "8254002311197919",
          "publishTime": "2023-09-20T16:54:29.312Z"
        },
        "subscription": "projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741"
      }
      

      Wenn Sie den Datenwert von SGVsbG8gV29ybGQ= aus seinem Base64-Format decodieren, wird „Hello World“ zurückgegeben.

Bereinigen

Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Anleitungsressourcen löschen

Löschen Sie die Ressourcen, die Sie in dieser Anleitung erstellt haben:

  1. Pub/Sub-Thema löschen.

  2. Den Eventarc-Trigger löschen.

  3. Löschen Sie den Workflow für Workflows.

  4. Löschen Sie den Cloud Run-Job.

  5. Löschen Sie den Cloud Storage-Bucket.

Nächste Schritte