Mit Workflows können Sie Cloud Run-Jobs als Teil eines Workflows ausführen, um eine komplexere Datenverarbeitung durchzuführen oder ein System vorhandener Jobs zu orchestrieren.
In dieser Anleitung wird gezeigt, wie Sie mit Workflows einen Cloud Run-Job ausführen, der Daten verarbeitet, die als Umgebungsvariablen an den Job übergeben werden, wenn ein Ereignis aus Cloud Storage eintritt.
Sie können die Ereignisdaten auch in einem Cloud Storage-Bucket speichern. So können Sie die Daten mit vom Kunden verwalteten Verschlüsselungsschlüsseln verschlüsseln. Weitere Informationen finden Sie unter Cloud Run-Job ausführen, der in Cloud Storage gespeicherte Ereignisdaten verarbeitet.
Cloud Run-Job erstellen
In dieser Anleitung wird ein Beispiel für einen Cloud Run-Job von GitHub verwendet. Der Job liest Daten aus einer Eingabedatei in Cloud Storage und führt für jede Zeile in der Datei eine beliebige Verarbeitung durch.
Rufen Sie den Beispielcode ab, indem Sie das Repository der Beispiel-App auf Ihren lokalen Computer klonen:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält:
cd jobs-demos/parallel-processing
Erstellen Sie einen Cloud Storage-Bucket zum Speichern einer Eingabedatei, in die geschrieben werden kann und die ein Ereignis auslösen kann:
Console
- Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.
- Klicken Sie auf Hinzufügen Erstellen.
- Geben Sie auf der Seite Bucket erstellen einen Namen für den Bucket ein:
Ersetzen Sieinput-PROJECT_ID
PROJECT_ID
durch die ID Ihres Google Cloud -Projekts. - Behalten Sie die anderen Standardeinstellungen bei.
- Klicken Sie auf Erstellen.
gcloud
Führen Sie den Befehl
gcloud storage buckets create
aus:gcloud storage buckets create gs://input-PROJECT_ID
Wenn die Anfrage erfolgreich ist, gibt der Befehl die folgende Meldung zurück:
Creating gs://input-PROJECT_ID/...
Terraform
Verwenden Sie zum Erstellen eines Cloud Storage-Bucket die Ressource
google_storage_bucket
und ändern Sie die Dateimain.tf
wie im folgenden Beispiel gezeigt.Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. Für diese Anleitung können Sie jedoch eine bestimmte Ressource als Ziel festlegen. Beispiel:
terraform apply -target="random_id.bucket_name_suffix"
und
terraform apply -target="google_storage_bucket.default"
- Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.
Erstellen Sie ein Artifact Registry-Standard-Repository, in dem Sie Ihr Container-Image speichern können:
Console
Rufen Sie in der Google Cloud Console die Seite Repositories von Artifact Registry auf:
Klicken Sie auf
Repository erstellen.Geben Sie einen Namen für das Repository ein, z. B.
my-repo
. Repository-Namen können für jeden Repository-Speicherort in einem Projekt nur einmal vorkommen.Behalten Sie das Standardformat bei, das Docker sein sollte.
Behalten Sie den Standardmodus bei, der Standard sein sollte.
Wählen Sie als Region us-central1 (Iowa) aus.
Behalten Sie alle anderen Standardeinstellungen bei.
Klicken Sie auf Erstellen.
gcloud
Führen Sie diesen Befehl aus:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=us-central1
Ersetzen Sie
REPOSITORY
durch einen eindeutigen Namen für das Repository, z. B.my-repo
. Repository-Namen können für jeden Repository-Speicherort in einem Projekt nur einmal vorkommen.Terraform
Verwenden Sie zum Erstellen eines Artifact Registry-Repositorys die Ressource
google_artifact_registry_repository
und ändern Sie die Dateimain.tf
wie im folgenden Beispiel gezeigt.In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. Für diese Anleitung können Sie jedoch eine bestimmte Ressource als Ziel festlegen. Beispiel:
terraform apply -target="google_artifact_registry_repository.default"
Erstellen Sie das Container-Image mit einem Standard- Google Cloud Buildpack:
export SERVICE_NAME=parallel-job gcloud builds submit \ --pack image=us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
Ersetzen Sie dabei
REPOSITORY
durch den Namen Ihres Artifact Registry-Repositorys.Es kann einige Minuten dauern, bis der Build abgeschlossen ist.
Erstellen Sie einen Cloud Run-Job, der das Container-Image bereitstellt:
Console
Rufen Sie in der Google Cloud Console die Seite Cloud Run auf:
Klicken Sie auf Job erstellen, um das Formular Job erstellen aufzurufen.
- Wählen Sie im Formular
us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest
als Container-Image-URL für Artifact Registry aus. - Optional: Geben Sie für den Jobnamen
parallel-job
ein. - Optional: Wählen Sie für die Region us-central1 (Iowa) aus.
- Geben Sie für die Anzahl der Aufgaben, die im Job ausgeführt werden sollen,
10
ein. Ein Job ist erst erfolgreich, wenn alle Aufgaben erfolgreich ausgeführt werden. Die Aufgaben werden standardmäßig parallel ausgeführt.
- Wählen Sie im Formular
Maximieren Sie den Abschnitt Container, Variablen und Secrets, Verbindungen, Sicherheit und behalten Sie alle Standardeinstellungen mit Ausnahme der folgenden Einstellungen bei:
Klicken Sie auf den Tab Allgemein.
- Geben Sie als Containerbefehl
python
ein. - Geben Sie für das Containerargument
process.py
ein.
- Geben Sie als Containerbefehl
Klicken Sie auf den Tab Variablen und Secrets.
- Klicken Sie auf Variable hinzufügen und geben Sie
INPUT_BUCKET
als Namen undinput-PROJECT_ID
als Wert ein. - Klicken Sie auf Variable hinzufügen und geben Sie
INPUT_FILE
für den Namen undinput_file.txt
für den Wert ein.
- Klicken Sie auf Variable hinzufügen und geben Sie
Klicken Sie auf Erstellen, um den Job zu erstellen.
gcloud
Legen Sie die Standard-Cloud Run-Region fest:
gcloud config set run/region us-central1
Cloud Run-Job erstellen:
gcloud run jobs create parallel-job \ --image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest \ --command python \ --args process.py \ --tasks 10 \ --set-env-vars=INPUT_BUCKET=input-PROJECT_ID,INPUT_FILE=input_file.txt
Wenn Sie kein Image-Tag angeben, sucht Artifact Registry nach dem Image mit dem Standard-Tag
latest
.Eine vollständige Liste der verfügbaren Optionen beim Erstellen eines Jobs finden Sie in der Dokumentation zur Befehlszeilenschnittstelle gcloud run jobs create.
Nachdem der Job erstellt wurde, sollte eine Erfolgsmeldung angezeigt werden.
Terraform
Verwenden Sie zum Erstellen eines Cloud Run-Jobs die Ressource
google_cloud_run_v2_job
und ändern Sie die Dateimain.tf
wie im folgenden Beispiel gezeigt.In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. Für diese Anleitung können Sie jedoch eine bestimmte Ressource als Ziel festlegen. Beispiel:
terraform apply -target="google_cloud_run_v2_job.default"
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.
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.
cloud-run-job-workflow
.Wählen Sie als Region us-central1 (Iowa) aus.
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 Rolle Cloud Run-Administrator zugewiesen haben, damit der Workflow den Cloud Run-Job ausführen kann.
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 cloud-run-job-workflow.yaml
Kopieren Sie die folgende Workflow-Definition in Ihre Quellcodedatei:
Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:
gcloud workflows deploy cloud-run-job-workflow \ --location=us-central1 \ --source=cloud-run-job-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 habenPROJECT_ID
: die ID IhresGoogle Cloud -Projekts
Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die Rolle
roles/run.admin
zugewiesen haben, damit der Workflow den Cloud Run-Job ausführen kann.
Terraform
Verwenden Sie zum Erstellen eines Workflows die Ressource google_workflows_workflow
und ändern Sie die Datei main.tf
wie im folgenden Beispiel gezeigt.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. Für diese Anleitung können Sie jedoch auf eine bestimmte Ressource ausrichten. Beispiel:
terraform apply -target="google_workflows_workflow.default"
Der Workflow führt folgende Aktionen aus:
init
-Schritt: Akzeptiert ein Cloud Storage-Ereignis als Argument und legt dann die erforderlichen Variablen fest.Schritt
check_input_file
: Prüft, ob der im Ereignis angegebene Cloud Storage-Bucket der Bucket ist, der vom Cloud Run-Job verwendet wird.- Wenn ja, wird der Workflow mit dem Schritt
run_job
fortgesetzt. - Falls nicht, wird der Workflow beendet und die weitere Verarbeitung angehalten.
- Wenn ja, wird der Workflow mit dem Schritt
run_job
-Schritt: Hier wird diegoogleapis.run.v1.namespaces.jobs.run
-Methode des Cloud Run Admin API-Connectors verwendet, um den Job auszuführen. Der Cloud Storage-Bucket und die Namen der Datendateien werden als Überschreibungsvariablen vom Workflow an den Job übergeben.finish
-Schritt: Gibt Informationen zur Jobausführung als Ergebnis des Workflows zurück.
Eventarc-Trigger für den Workflow erstellen
Damit der Workflow und damit der Cloud Run-Job automatisch ausgeführt werden, wenn die Eingabedatendatei aktualisiert wird, erstellen Sie einen Eventarc-Trigger, der auf Cloud Storage-Ereignisse in dem Bucket reagiert, der die Eingabedatendatei enthält.
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf:
Klicken Sie auf den Namen Ihres Workflows, z. B.
cloud-run-job-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.
cloud-run-job-workflow-trigger
.Wählen Sie in der Liste Ereignisanbieter die Option Cloud Storage aus.
Wählen Sie in der Liste Ereignis die Option google.cloud.storage.object.v1.finalized aus.
Wählen Sie im Feld Bucket den Bucket mit der Eingabedatendatei aus. Der Bucket-Name hat das Format
input-PROJECT_ID
.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 cloud-run-job-workflow-trigger \ --location=us \ --destination-workflow=cloud-run-job-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=input-PROJECT_ID" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ersetzen Sie Folgendes:
PROJECT_ID
: die ID Ihres Google Cloud -ProjektsSERVICE_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 empfangenroles/workflows.invoker
: zum Ausführen von Workflows
Terraform
Verwenden Sie zum Erstellen eines Triggers die Ressource google_eventarc_trigger
und ändern Sie die Datei main.tf
wie im folgenden Beispiel gezeigt.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. Für diese Anleitung können Sie jedoch eine bestimmte Ressource als Ziel festlegen. Beispiel:
terraform apply -target="google_eventarc_trigger.default"
Immer wenn eine Datei in den Cloud Storage-Bucket mit der Eingabedatei hochgeladen oder überschrieben wird, wird der Workflow mit dem entsprechenden Cloud Storage-Ereignis als Argument ausgeführt.
Workflow auslösen
Testen Sie das End-to-End-System, indem Sie die Eingabedatendatei in Cloud Storage aktualisieren.
Generieren Sie neue Daten für die Eingabedatei und laden Sie sie in Cloud Storage an den Speicherort hoch, der vom Cloud Run-Job erwartet wird:
base64 /dev/urandom | head -c 100000 >input_file.txt gcloud storage cp input_file.txt gs://input-PROJECT_ID/input_file.txt
Wenn Sie einen Cloud Storage-Bucket mit Terraform erstellt haben, können Sie den Namen des Buckets mit dem folgenden Befehl abrufen:
gcloud storage buckets list gs://input*
Die Ausführung des Cloud Run-Jobs kann einige Minuten dauern.
Prüfen Sie, ob der Cloud Run-Job wie erwartet ausgeführt wurde, indem Sie die Jobausführungen ansehen:
gcloud config set run/region us-central1 gcloud run jobs executions list --job=parallel-job
In der Ausgabe sollte eine erfolgreiche Jobausführung angezeigt werden, die darauf hinweist, dass
10/10
Aufgaben abgeschlossen wurden.
Weitere Informationen zum Auslösen eines Workflows mit Ereignissen oder Pub/Sub-Nachrichten