Sie können Workflows verwenden, um einen Cloud Run-Job als Teil eines Workflows auszuführen, der eine komplexere Datenverarbeitung durchfü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. Das ist nicht möglich, wenn Sie die Ereignisdaten als Umgebungsvariablen an den Cloud Run-Job übergeben.
Das folgende Diagramm bietet einen groben Überblick:
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. Mit dem Skript wird auch ein Cloud Storage-Bucket erstellt. Der Cloud Run-Job liest alle Ereignisdaten, die im Cloud Storage-Bucket gespeichert sind, und gibt sie dann aus.
- Wenn Sie das Bereitstellungsskript in Cloud Shell ausführen und das Compute Engine-Standarddienstkonto nicht die Rolle „Bearbeiter“ hat, weisen Sie dem Compute Engine-Standarddienstkonto die folgenden Rollen für das Projekt zu. Andernfalls können Sie diesen Schritt überspringen und mit dem Klonen des Beispiel-App-Repositorys im nächsten Schritt fortfahren. - Weisen Sie die Rolle „Artifact Registry-Autor“ ( - roles/artifactregistry.writer) zu:- gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.writer - Ersetzen Sie - PROJECT_NUMBERdurch die Google CloudProjektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud -Konsole oder durch Ausführen des folgenden Befehls:- gcloud projects describe PROJECT_ID --format='value(projectNumber)' 
- Weisen Sie die Storage-Objekt-Nutzerrolle ( - roles/storage.objectUser) zu:- gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/storage.objectUser 
- Weisen Sie die Rolle „Logautor“ ( - roles/logging.logWriter) zu:- gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/logging.logWriter 
 
- Rufen Sie den Beispielcode ab, indem Sie das Repository der Beispiel-App auf Ihren lokalen Computer klonen: - git clone https://github.com/GoogleCloudPlatform/workflows-demos.git - Alternativ können Sie das Beispiel als ZIP-Datei herunterladen. 
- Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält: - cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job 
- 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 Sie einen Workflow, der den gerade erstellten Cloud Run-Job ausführt, und stellen Sie ihn bereit. Ein Workflow besteht aus einer Reihe von Schritten, die mit 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
- Rufen Sie in der Google Cloud Console die Seite Workflows auf: 
- Klicken Sie auf Erstellen. 
- Geben Sie einen Namen für den neuen Workflow ein, z. B. - message-payload-workflow.
- Wählen Sie eine geeignete Region aus, z. B. - us-central1.
- Wählen Sie im Feld Dienstkonto das zuvor erstellte Dienstkonto aus. - Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben: - Cloud Run Admin: zum Ausführen von Cloud Run-Jobs
- Logautor: zum Schreiben von Logeinträgen
- Storage-Objekt-Ersteller: zum Erstellen von Objekten in Cloud Storage
 
- Klicken Sie auf Weiter. 
- Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein: 
- Klicken Sie auf Bereitstellen. 
gcloud
- Erstellen Sie eine Quellcodedatei für Ihren Workflow: - touch message-payload-workflow.yaml
- Kopieren Sie die folgende Workflowdefinition in - message-payload-workflow.yaml:
- 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 IhresGoogle Cloud -Projekts
 - Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben: - roles/logging.logWriter: Logeinträge schreiben
- roles/run.admin: zum Ausführen von Cloud Run-Jobs
- roles/storage.objectCreator: zum Erstellen von Objekten in Cloud Storage
 
Der Workflow führt folgende Aktionen aus:
- init-Schritt: Akzeptiert ein Ereignis als Argument und legt die erforderlichen Variablen fest.
- log_event-Schritt: Erstellt mit der Funktion sys.log einen Logeintrag in Cloud Logging.
- write_payload_to_gcs-Schritt: Stellt eine HTTP-- POST-Anfrage und schreibt die Nutzlastdaten des Ereignisses in eine Cloud Storage-Bucket-Datei.
- Im - run_job_to_process_payload-Schritt wird die Methode- googleapis.run.v1.namespaces.jobs.rundes Cloud Run Admin API-Connectors verwendet, um den Job auszuführen. Der Cloud Storage-Bucket und der Dateiname werden als Überschreibungsvariablen vom Workflow an den Job übergeben.
- finish-Schritt: Gibt Informationen zur Jobausführung als Ergebnis des Workflows zurück.
Pub/Sub-Thema erstellen
Erstellen Sie ein Pub/Sub-Thema, damit Sie eine Nachricht darin veröffentlichen können. Ein Pub/Sub-Ereignis wird verwendet, um zu demonstrieren, wie ein Ereignis mit Workflows weitergeleitet und in Cloud Storage gespeichert wird, damit ein Cloud Run-Job die Ereignisdaten verarbeiten kann.
Console
- Rufen Sie in der Google Cloud Console die Seite Themen auf. 
- Klicken Sie auf Thema erstellen. 
- Geben Sie im Feld Themen-ID eine ID für das Thema ein, z. B. - message-payload-topic.
- Behalten Sie die Option Standardabo hinzufügen bei. 
- Wählen Sie die anderen Optionen nicht aus. 
- 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
Wenn Sie den Workflow und damit den Cloud Run-Job automatisch ausführen möchten, 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 die Ausführung des Workflows aus.
Console
- Rufen Sie in der Google Cloud Console die Seite Workflows auf: 
- Klicken Sie auf den Namen Ihres Workflows, z. B. - message-payload-workflow.
- Klicken Sie auf der Seite Workflow-Details auf Bearbeiten. 
- Klicken Sie auf der Seite Workflow bearbeiten im Bereich Trigger auf Neuen Trigger hinzufügen > Eventarc. - Der Bereich Eventarc-Trigger wird geöffnet. 
- Geben Sie im Feld Triggername einen Namen für den Trigger ein, z. B. - message-payload-trigger.
- Wählen Sie in der Liste Ereignisanbieter die Option Cloud Pub/Sub aus. 
- Wählen Sie in der Liste Ereignis die Option google.cloud.pubsub.topic.v1.messagePublished aus. 
- Wählen Sie in der Liste Cloud Pub/Sub-Thema auswählen das Pub/Sub-Thema aus, das Sie zuvor erstellt haben. 
- Wählen Sie im Feld Dienstkonto das zuvor erstellte Dienstkonto aus. - Das Dienstkonto dient als Identität des Triggers. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben: - Eventarc-Ereignisempfänger: zum Empfangen von Ereignissen
- Workflow-Aufrufer: zum Ausführen von Workflows
 
- Klicken Sie auf Trigger speichern. - Der Eventarc-Trigger wird jetzt im Abschnitt Trigger auf der Seite Workflow bearbeiten angezeigt. 
- Klicken Sie auf Weiter. 
- Klicken Sie auf Bereitstellen. 
gcloud
Erstellen Sie einen Eventarc-Trigger mit dem folgenden Befehl:
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: die ID Ihres Google Cloud -Projekts
- SERVICE_ACCOUNT_NAME: Der Name des zuvor erstellten Dienstkontos.
Das Dienstkonto dient als Identität des Triggers. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen haben:
- roles/eventarc.eventReceiver: Ereignisse empfangen
- roles/workflows.invoker: zum 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.
- 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. Das kann einen Moment dauern. 
- Prüfen Sie, ob der Cloud Run-Job wie erwartet ausgeführt wurde, indem Sie die Jobausführungen ansehen: - gcloud run jobs executions list --job=message-payload-job - In der Ausgabe sollte eine neue Jobausführung angezeigt werden. 
- Führen Sie den folgenden Befehl aus, um die ereignisbezogenen Logeinträge aufzurufen, die durch das Auslösen des Workflows erstellt wurden: - gcloud logging read "resource.type=cloud_run_job AND textPayload:Payload" 
- 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
- Sie können prüfen, ob die Ergebnisse wie erwartet sind, indem Sie sich die Ereignisdaten im Cloud Storage-Bucket-Objekt ansehen. - Rufen Sie den Namen Ihres Buckets ab: - gcloud storage ls - Die Ausgabe sieht etwa so aus: - gs://message-payload-PROJECT_ID/ 
- Objekte in Ihrem Bucket auflisten: - gcloud storage ls gs://message-payload-PROJECT_ID/** --recursive - 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.
- So 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_IDdurch die im vorherigen Schritt zurückgegebene ID.
- Öffnen Sie die Datei - message-event.txtin 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" }- Beachten Sie, dass wenn Sie den Datenwert von - SGVsbG8gV29ybGQ=aus seinem Base64-Format decodieren, „Hello World“ zurückgegeben wird.