In dieser Anleitung erfahren Sie, wie Sie eine Cloud Tasks-Warteschlange erstellen, mit der Sie die Häufigkeit der Workflowausführungen regulieren können.
Es gibt eine maximale Anzahl aktiver Workflows
Ausführungen, die gleichzeitig
ausgeführt werden können. Wenn dieses Kontingent aufgebraucht ist und das Ausführen von Aufträgen im Hintergrund deaktiviert ist oder das Kontingent für Aufträge im Hintergrund erreicht ist, schlagen alle neuen Ausführungen mit dem HTTP-Statuscode 429 Too many requests
fehl. Wenn Sie einer Cloud Tasks-Warteschlange erlauben, untergeordnete Workflows mit einer von Ihnen festgelegten Rate auszuführen, können Sie quotabedingte Probleme mit Workflows vermeiden und eine bessere Ausführungsrate erzielen.
Cloud Tasks ist darauf ausgelegt, „mindestens einmal“ zu liefern. Workflows stellt jedoch nicht sicher, dass doppelte Anfragen von Cloud Tasks genau einmal verarbeitet werden.
Im folgenden Diagramm ruft ein übergeordneter Workflow untergeordnete Workflows auf, die von einer Cloud Tasks-Warteschlange mit einer Auslieferungsrate gesteuert werden.
Lernziele
In dieser Anleitung werden Sie:
- Erstellen Sie eine Cloud Tasks-Warteschlange, die als Vermittler zwischen dem übergeordneten und dem untergeordneten Workflow dient.
- Untergeordneten Workflow erstellen und bereitstellen, der Daten vom übergeordneten Workflow empfängt zu optimieren.
- Erstellen und bereitstellen Sie den übergeordneten Workflow, der den untergeordneten Workflow über die Cloud Tasks-Warteschlange ausführt.
- Führen Sie den übergeordneten Workflow ohne Begrenzung der Auslieferungsrate aus, wodurch Ausführungen des untergeordneten Workflows aufgerufen werden.
- Wenden Sie ein Auslöselimit auf die Cloud Tasks-Warteschlange an und führen Sie den übergeordneten Workflow aus.
- Beachten Sie, dass die untergeordneten Workflows mit der durch den Cloud Tasks-Warteschlange
Sie können die folgenden Befehle in der Google Cloud Console oder über die Google Cloud CLI in Ihrem Terminal oder in Cloud Shell ausführen.
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.
Vorbereitung
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.
Console
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs.
- Rufen Sie in der Google Cloud Console die Seite IAM auf, um Berechtigungen für das Standarddienstkonto der Compute Engine festzulegen.
Notieren Sie sich das Compute Engine-Standarddienstkonto, da Sie es zu Testzwecken mit den Workflows in dieser Anleitung verknüpfen. Dieses Dienstkonto wird automatisch erstellt nach der Aktivierung oder Verwendung eines Google Cloud-Dienstes, der Compute Engine mit folgendem E-Mail-Format:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie
PROJECT_NUMBER
durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console.Für Produktionsumgebungen empfehlen wir dringend, Erstellen eines neuen Dienstkontos und ihm eine oder mehrere IAM-Rollen zuweisen, die die Erforderliche Mindestberechtigungen und folgen dem Prinzip der geringste Berechtigung:
- Wählen Sie das Compute Engine-Standarddienstkonto aus und klicken Sie in dieser Zeile auf Hauptkonto bearbeiten.
- Klicken Sie im angezeigten Dialogfeld auf
- Wählen Sie in der Liste Rolle auswählen die Option Workflows > Workflows-Aufrufer aus, damit das Konto die Berechtigung zum Auslösen der Workflowausführung hat.
- Wählen Sie in der Liste Rolle auswählen die Option Cloud Tasks > Cloud Tasks-Ersteller, damit der -Konto die Berechtigung zum Erstellen von Aufgaben hat.
Weitere Rolle hinzufügen und den
folgenden Rollen:
- Klicken Sie auf Speichern.
gcloud
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Tasks, Compute Engine, and Workflows APIs:
gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com Notieren Sie sich das Compute Engine-Standarddienstkonto, da Sie es zu Testzwecken mit den Workflows in dieser Anleitung verknüpfen. Dieses Dienstkonto wird automatisch nach der Aktivierung oder Verwendung eines Google Cloud-Dienstes, der Compute Engine verwendet, mit dem folgenden E-Mail-Format erstellt:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ersetzen Sie
PROJECT_NUMBER
durch Ihre Google Cloud-Projektnummer. Sie können die Projektnummer ermitteln. Führen Sie dazu den folgenden Befehl aus:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Für Produktionsumgebungen empfehlen wir dringend, Erstellen eines neuen Dienstkontos und ihm eine oder mehrere IAM-Rollen zuweisen, die die Erforderliche Mindestberechtigungen und folgen dem Prinzip der geringste Berechtigung:
- Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle Workflow-Aufrufer (
roles/workflows.invoker
) für das Projekt zu, damit das Konto die Berechtigung zum Auslösen Ihres Workflows hat.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
Ersetzen Sie Folgendes:
PROJECT_ID
: die Google Cloud-Projekt-IDPROJECT_NUMBER
: die Google Cloud-Projektnummer
- Weisen Sie dem Compute Engine-Standarddienstkonto die Rolle Cloud Tasks-Enqueuer (
roles/cloudtasks.enqueuer
) für das Projekt zu, damit das Konto Berechtigungen zum Erstellen von Aufgaben hat.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
Cloud Tasks-Warteschlange erstellen
Erstellen Sie eine Cloud Tasks-Warteschlange, die Sie im übergeordneten Workflow verwenden können und mit der Sie die Häufigkeit der Workflowausführungen regulieren können.
Console
Rufen Sie in der Google Cloud Console die Seite Cloud Tasks auf:
Klicken Sie auf
. Erstellen Sie eine Push-Warteschlange.Geben Sie den Namen der Warteschlange
queue-workflow-child
ein.Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.
Klicken Sie auf Erstellen.
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
Untergeordneten Workflow erstellen und bereitstellen
Ein untergeordneter Workflow kann Daten aus einem übergeordneten Workflow empfangen und verarbeiten. Erstellen und bereitstellen Sie einen untergeordneten Workflow, der Folgendes ausführt:
- Erhält ein
iteration
als Argument - 10 Sekunden inaktiv, um eine Verarbeitung zu simulieren
Gibt nach erfolgreicher Ausführung einen String zurück
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
Klicken Sie auf
Erstellen.Geben Sie den Namen
workflow-child
für den neuen Workflow ein.Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.
Wählen Sie in der Liste Dienstkonto die Option Standardmäßiges Compute Engine-Dienstkonto aus.
Klicken Sie auf Weiter.
Geben Sie im Workflow-Editor die Definition für Ihren Workflow ein:
Klicken Sie auf Bereitstellen.
gcloud
Erstellen Sie eine Quellcodedatei für Ihren Workflow:
touch workflow-child.yaml
Öffnen Sie die Quellcodedatei in einem Texteditor und kopieren Sie den folgenden Workflow in die Datei.
Stellen Sie den Workflow bereit:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Übergeordneten Workflow erstellen und bereitstellen
Der übergeordnete Workflow führt mithilfe einer for
-Schleife mehrere Äste des untergeordneten Workflows aus.
Kopieren Sie den Quellcode, in dem der übergeordnete Workflow definiert ist:
Der Workflow besteht aus den folgenden Teilen:
Zuordnung zum Zuweisen von Konstanten, die sich auf den untergeordneten Workflow beziehen und den Namen der Cloud Tasks-Warteschlange. Weitere Informationen finden Sie unter Google Maps.
Eine
for
-Schleife, die ausgeführt wird, um den untergeordneten Workflow iterativ aufzurufen. Weitere Informationen finden Sie unter Iteration.Ein Workflowschritt, bei dem eine große Anzahl von Aufgaben erstellt und zur Cloud Tasks-Warteschlange zum Ausführen des untergeordneten Workflows. Weitere Informationen finden Sie unter Cloud Tasks API-Connector.
Stellen Sie den Workflow bereit:
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf. Seite:
Klicken Sie auf
Erstellen.Geben Sie den Namen „
workflow-parent
“ für den neuen Workflow ein.Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.
Wählen Sie in der Liste Dienstkonto die Option Standardmäßiges Compute Engine-Dienstkonto aus.
Klicken Sie auf Weiter.
Fügen Sie im Workflow-Editor die Definition für den übergeordneten Workflow ein.
Klicken Sie auf Bereitstellen.
gcloud
Erstellen Sie eine Quellcodedatei für Ihren Workflow:
touch workflow-parent.yaml
Öffnen Sie Ihre Quellcodedatei in einem Texteditor und fügen Sie die Definition ein. für den übergeordneten Workflow.
Stellen Sie den Workflow bereit:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER
-compute@developer.gserviceaccount.com
Übergeordneten Workflow ohne Ratenbeschränkungen ausführen
Führen Sie den übergeordneten Workflow aus, um die untergeordneten Workflows über die Cloud Tasks-Warteschlange aufzurufen. Die Ausführungen sollten etwa 10 Sekunden bis zum Ende.
Console
Öffnen Sie in der Google Cloud Console die Seite Workflows.
Klicken Sie auf der Seite Workflows auf den Workflow workflow-parent, um die Seite mit den Details aufzurufen.
Klicken Sie auf der Seite Workflowdetails auf play_arrow Ausführen.
Klicken Sie noch einmal auf Ausführen.
Wenn der übergeordnete Workflow ausgeführt wird, kehren Sie zum Workflows und klicken Sie auf das workflow-child, um die zugehörige Detailseite aufzurufen.
Klicken Sie auf den Tab Ausführungen.
Sie sollten Ausführungen des untergeordneten Workflows sehen, ähnlich wie hier:
gcloud
Führen Sie den Workflow aus:
gcloud workflows run workflow-parent \ --location=us-central1
Um zu prüfen, ob eine Workflowausführung ausgelöst wurde, listen Sie die letzten vier Ausführungen auf:
gcloud workflows executions list workflow-child --limit=4
Da die Anzahl der Ausführungen (100) unter dem Grenzwert für die Gleichzeitigkeit von Workflows liegt, sollten die Ergebnisse in etwa so aussehen: Wenn Sie gleichzeitig Tausende von Ausführungen einreichen, können Probleme mit dem Kontingent auftreten.
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
Sie haben einen Workflow erstellt und bereitgestellt, der 100 Iterationen der untergeordneten Workflow.
Übergeordneten Workflow mit Ratenbegrenzungen ausführen
Wenden Sie ein Ratenlimit von einer Weiterleitung pro Sekunde auf Cloud Tasks an. und führen dann den übergeordneten Workflow aus.
Console
Rufen Sie in der Google Cloud Console die Seite Cloud Tasks auf. Seite:
Klicken Sie auf queue-workflow-child, die Cloud Tasks-Warteschlange, die Sie und klicken Sie auf Warteschlange bearbeiten.
Geben Sie im Abschnitt Ratenlimits für Aufgabenweiterleitungen im Feld Max. Aufgaben die Zahl 1 ein.
Klicken Sie auf Speichern.
Rufen Sie die Seite Workflows auf:
Klicken Sie auf den Workflow workflow-parent, um die zugehörige Detailseite aufzurufen.
Klicken Sie auf der Seite Workflow-Details auf play_arrow Ausführen.
Klicken Sie noch einmal auf Ausführen.
Wenn der übergeordnete Workflow ausgeführt wird, kehren Sie zum Workflows und klicken Sie auf das workflow-child, um die zugehörige Detailseite aufzurufen.
Klicken Sie auf den Tab Ausführungen.
Sie sollten Ausführungen des untergeordneten Workflows sehen, die mit einer Anfrage pro Sekunde ausgeführt werden, ähnlich wie hier:
gcloud
Aktualisieren Sie die Cloud Tasks-Warteschlange, um eine Ratenbegrenzung von einer Weiterleitung pro Sekunde anzuwenden:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
Führen Sie den Workflow aus:
gcloud workflows run workflow-parent \ --location=us-central1
Um zu prüfen, ob eine Workflowausführung ausgelöst wurde, listen Sie die letzten vier Ausführungen auf:
gcloud workflows executions list workflow-child --limit=4
Die Ergebnisse sollten in etwa wie unten dargestellt aussehen, wobei pro Workflow ein Workflow ausgeführt wird. Zweitens:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
Sie haben einen Workflow bereitgestellt, der 100 Iterationen des untergeordneten Workflows mit einer Auslieferungsrate von einer Ausführung pro Sekunde aufruft.
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Anleitungsressourcen löschen
Workflows und Cloud Tasks-Ressourcen löschen, die hier erstellt wurden Anleitung:
Console
So löschen Sie die Workflows:
Rufen Sie in der Google Cloud Console die Seite Workflows auf. Seite:
Klicken Sie in der Liste der Workflows auf einen Workflow, um die Seite Workflow-Details aufzurufen.
Klicken Sie auf
Löschen.Geben Sie den Namen des Workflows ein und klicken Sie dann auf Bestätigen.
So löschen Sie die Cloud Tasks-Warteschlange:
Rufen Sie in der Google Cloud Console die Seite Cloud Tasks auf. Seite:
Wählen Sie den Namen der Warteschlange aus, die Sie löschen möchten, und klicken Sie auf Warteschlange löschen
Bestätigen Sie die Aktion.
gcloud
Führen Sie die folgenden Befehle aus, um die Workflows zu löschen:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Führen Sie den folgenden Befehl aus, um die Cloud Tasks-Warteschlange zu löschen:
gcloud tasks queues delete queue-workflow-child
Nächste Schritte
- Weitere Informationen dazu, wie Sie mit Cloud Tasks einen Workflow in die Warteschlange stellen und asynchron ausführen, finden Sie unter Workflowausführungen mit Cloud Tasks in die Warteschlange stellen.
- Weitere Informationen zur Workflow-Syntax finden Sie in der Referenz zur Workflow-Syntax.