Mit Workflows können Sie eine Cloud Run-Job als Teil eines Workflows die eine komplexere Datenverarbeitung durchführt oder ein System bestehenden Jobs.
In dieser Anleitung wird gezeigt, wie Sie mit Workflows eine Cloud Run-Job, der Ereignisdaten verarbeitet, die in einem Cloud Storage-Bucket. Ereignisnutzlast in Cloud Storage speichern können Sie die Daten mit vom Kunden verwaltete Verschlüsselungsschlüssel was nicht möglich ist, wenn Sie Ereignisdaten als Umgebungsvariablen übergeben auf den Cloud Run-Job.
Das folgende Diagramm bietet einen allgemeinen Überblick:
Lernziele
In dieser Anleitung werden Sie:
- Cloud Run-Job erstellen, der Ereignisdaten verarbeitet, die in Cloud Storage-Bucket
- Stellen Sie einen Workflow bereit, der Folgendes ausführt:
<ph type="x-smartling-placeholder">
- </ph>
- Empfängt ein Ereignis als Argument.
- Schreibt die Ereignisnutzlastdaten in den Cloud Storage-Bucket.
- Verwendet den Cloud Run Admin API-Connector um den Cloud Run-Job auszuführen.
- Erstellen Sie ein Pub/Sub-Thema, damit Sie eine Nachricht dazu veröffentlichen können. In dieser Anleitung wird ein Pub/Sub-Ereignis als Beispiel dafür verwendet, mit Workflows und das Ereignis Cloud Storage, damit ein Cloud Run-Job die Ereignisdaten.
- Erstellen Sie einen Eventarc-Trigger, der den Workflow ausführt, wenn ein in das Pub/Sub-Thema geschrieben.
- Workflow durch Schreiben einer Nachricht in Pub/Sub auslösen .
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.
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 eine eines vom Nutzer verwalteten Dienstkontos. Sie müssen dem Dienstkonto die Rollen und Berechtigungen erforderlich sind, damit Sie Ereignisse mithilfe eines Eventarc-Trigger auslösen und einen Workflow ausführen.
Console
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs aktivieren.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs aktivieren.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
- Wenn Sie den Cloud Pub/Sub-Dienst-Agent auf oder
vor dem 8. April 2021, um authentifizierte Pub/Sub-Push-Vorgänge zu unterstützen
anfragen, gewähren Sie dem
Service
Rolle „Kontotoken-Ersteller“ (
roles/iam.serviceAccountTokenCreator
) an den Dienst-Agent gesendet. Andernfalls wird diese Rolle standardmäßig gewährt: <ph type="x-smartling-placeholder">- </ph>
- Wechseln Sie in der Google Cloud Console zur
IAM-Seite.
- Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen.
- Suchen Sie in der Spalte Name nach der Cloud Pub/Sub-Dienstkonto Klicken Sie dann auf Bearbeiten Hauptkonto in die entsprechende Zeile ein.
- Klicken Sie entweder auf Rolle hinzufügen. oder Weitere Rolle hinzufügen
- Filtern Sie in der Liste Rolle auswählen nach Ersteller von Dienstkonto-Token und wählen Sie die Rolle aus.
- Klicken Sie auf Speichern.
- Wechseln Sie in der Google Cloud Console zur
IAM-Seite.
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
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.
Cloud Shell unterstützt die Befehlszeilenschritte in dieser Anleitung.
gcloud
- 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.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
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 -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
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 -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- 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 von Google verwalteten Dienstkonto die Rolle „Ersteller von Dienstkonto-Tokens“ (
roles/iam.serviceAccountTokenCreator
) zu. Andernfalls wird diese Rolle standardmäßig zugewiesen:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
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. Die Bereitstellung Script erstellt ein Container-Image, um einen Cloud Run-Job zu erstellen. Die erstellt das Skript auch einen Cloud Storage-Bucket. Die Der Cloud Run-Job liest alle Ereignisdaten, die im Cloud Storage-Bucket und gibt dann die Ereignisdaten aus.
Rufen Sie den Beispielcode ab, indem Sie das Repository der Beispiel-App in Ihr lokales Computer:
git clone https://github.com/GoogleCloudPlatform/workflows-demos.git
Alternativ können Sie 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
ist die ID Ihres Google Cloud-Projekts.
Außerdem wird ein Cloud Run-Job mit dem Namen message-payload-job
erstellt.
Workflow bereitstellen, der den Cloud Run-Job ausführt
Workflow definieren und bereitstellen, der den Cloud Run-Job ausführt die Sie gerade erstellt haben. Eine Workflow-Definition besteht aus einer Reihe von Schritten mit der Syntax für Workflows beschrieben wird.
Der Workflow empfängt ein Ereignis und speichert die Ereignisdaten in einem Cloud Storage-Bucket. Bucket und führt dann einen Cloud Run-Job aus, um das Ereignis zu verarbeiten. Daten.
Console
Wechseln Sie in der Google Cloud Console zur Seite Workflows:
Klicken Sie auf
Erstellen.Geben Sie einen Namen für den neuen Workflow ein, z. B.
message-payload-workflow
.Geeignete Region auswählen z. B.
us-central1
.Wählen Sie im Feld Dienstkonto das Dienstkonto aus, erstellt haben.
Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen:
- Cloud Run Admin: zum Ausführen von Cloud Run-Jobs
- Logautor: zum Schreiben von Logeinträgen
- Storage Object Creator: zum Erstellen von Objekten in Cloud Storage
Klicken Sie auf Weiter.
Geben Sie im Workflow-Editor die folgende Definition für Ihr Workflow:
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 von das zuvor erstellte DienstkontoPROJECT_ID
: die ID Ihres Google Cloud-Projekt
Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen:
roles/logging.logWriter
: zum Schreiben von Logeinträgenroles/run.admin
: zum Ausführen von Cloud Run-Jobsroles/storage.objectCreator
: zum Erstellen von Objekten in Cloud Storage
Der Workflow umfasst folgende Schritte:
Schritt
init
: Akzeptiert ein Ereignis als Argument und legt die erforderlichen Variablen fest.Schritt
log_event
: Mit dieser Funktion wird ein Logeintrag in Cloud Logging erstellt. sys.log.Schritt
write_payload_to_gcs
: Erstellt eine HTTP-POST
-Anfrage und schreibt das Ereignis Nutzlastdaten in eine Cloud Storage-Bucket-Datei hochladen.Schritt
run_job_to_process_payload
: Verwendet den Cloud Run Admin API-Connector Methodegoogleapis.run.v1.namespaces.jobs.run
um den Job auszuführen. Der Cloud Storage-Bucket und der Datendateiname sind werden als Überschreibungsvariablen vom Workflow an den Job übergeben.Schritt
finish
: Gibt Informationen zur Jobausführung als Ergebnis von für den Workflow.
Pub/Sub-Thema erstellen
Erstellen Sie ein Pub/Sub-Thema, damit Sie eine Nachricht dazu veröffentlichen können. Mit einem Pub/Sub-Ereignis wird gezeigt, wie ein Ereignis weitergeleitet wird. mit Workflows und speichern Sie das Ereignis in Cloud Storage 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 folgenden Befehl aus, um ein Thema mit der ID message-payload-topic
zu erstellen:
gcloud pubsub topics create
Befehl:
gcloud pubsub topics create message-payload-topic
Eventarc-Trigger erstellen, um Ereignisse an den Workflow weiterzuleiten
Damit der Workflow automatisch ausgeführt wird und Cloud Run einen Eventarc-Trigger erstellen, der auf Pub/Sub-Ereignissen erstellt und die Ereignisse an den Workflow weitergeleitet werden. Immer wenn eine Nachricht in das Pub/Sub-Thema geschrieben wird, löst eine Ausführung des Workflows aus.
Console
Wechseln Sie in der Google Cloud Console zur Seite Workflows:
Klicken Sie auf den Namen des Workflows, z. B.
message-payload-workflow
.Klicken Sie auf der Seite Workflowdetails auf
Bearbeiten:Gehen Sie auf der Seite Workflow bearbeiten im Bereich Trigger so vor: Klicken Sie 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 aus der Liste Ereignisanbieter die Option Cloud Pub/Sub aus.
Wählen Sie in der Liste Ereignis google.cloud.pubsub.topic.v1.messagePublished
Wählen Sie aus der Liste Cloud Pub/Sub-Thema auswählen Pub/Sub-Thema, das Sie zuvor erstellt haben.
Wählen Sie im Feld Dienstkonto das Dienstkonto aus, erstellt haben.
Das Dienstkonto dient als Identität des Triggers. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen:
- Eventarc Event Receiver (Empfänger von Eventarc-Ereignissen): zum Empfangen von Ereignissen
- Workflows-Aufrufer: zum Ausführen von Workflows
Klicken Sie auf Trigger speichern.
Der Eventarc-Trigger wird jetzt unter Trigger angezeigt. auf der Seite Workflow bearbeiten.
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
ist die ID Ihres Google Cloud-ProjektsSERVICE_ACCOUNT_NAME
: der Name des Dienstes das Sie zuvor erstellt haben.
Das Dienstkonto dient als Identität des Triggers. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen:
roles/eventarc.eventReceiver
: zum Empfangen von Ereignissenroles/workflows.invoker
: Zum Ausführen von Workflows
Workflow auslösen
End-to-End-System durch Veröffentlichen einer Nachricht in Pub/Sub testen Thema und generieren ein Ereignis. Weitere Informationen finden Sie unter Einen 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, den in den Cloud Storage-Bucket ein und führt den Cloud Run-Job zur Verarbeitung der in Cloud Storage Dies kann einen Moment dauern.
Prüfen Sie, ob der Cloud Run-Job wie erwartet ausgeführt wurde, indem Sie die Jobausführungen:
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 anzuzeigen, die durch Auslösen des Workflows erstellt wurden. folgenden Befehl:
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 überprüfen, ob die Ergebnisse Ihren Erwartungen entsprechen, indem Sie die Ereignisdaten in Das Cloud Storage-Bucket-Objekt
Rufen Sie den Bucket-Namen ab:
gsutil ls
Die Ausgabe sieht in etwa so aus:
gs://message-payload-PROJECT_ID/
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.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.Öffnen Sie die Datei
message-event.txt
in einem Texteditor. Der Ereignistext, der in sollte die Datei 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, „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:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- 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: