In dieser Anleitung erfahren Sie, wie Sie einen übergeordneten Workflow erstellen und ausführen, der mehrere untergeordnete Workflows parallel ausführt.
Im folgenden Diagramm werden vier parallele Ausführungen des untergeordneten Workflows aufgerufen. So kann der übergeordnete Workflow Daten in parallelen Zweigen verarbeiten und die Gesamtausführungszeit wird verkürzt. Der übergeordnete Workflow wartet, bis alle Ausführungen des untergeordneten Workflows abgeschlossen sind, bevor er eine Zusammenfassung der erfolgreichen und fehlgeschlagenen Ausführungen zurückgibt. So wird die Fehlererkennung vereinfacht.
Untergeordneten Workflow erstellen und bereitstellen
Ein untergeordneter Workflow kann Daten von einem übergeordneten Workflow empfangen und verarbeiten. Im untergeordneten Workflow wird dies durch Folgendes veranschaulicht:
- Empfängt eine Ganzzahl als Argument
- Wartet 10 Sekunden, um eine Verarbeitung zu simulieren
Gibt einen Indikator zurück, der auf der Grundlage dessen, ob die Ganzzahl eine ungerade oder gerade Zahl ist, den Erfolg oder Misserfolg der Workflowausführung simuliert.
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf.
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 aus.
Wählen Sie das Dienstkonto aus, das Sie zuvor erstellt haben.
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 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=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ersetzen Sie
SERVICE_ACCOUNT_NAME
durch den Namen des Dienstkontos, das Sie zuvor erstellt haben.
Übergeordneten Workflow erstellen und bereitstellen
Im übergeordneten Workflow werden mehrere Zweige des untergeordneten Workflows mit einer parallelen for
-Schleife ausgeführt.
Kopieren Sie den Quellcode für die Workflow-Definition. Sie besteht aus den folgenden Teilen:
Eine Map wird verwendet, um die Ergebnisse der Ausführungen des untergeordneten Workflows zu speichern. Weitere Informationen finden Sie unter Maps.
Eine
for
-Schleife wird parallel ausgeführt, um den untergeordneten Workflow aufzurufen. Weitere Informationen finden Sie unter Parallele Schritte und Iteration.Der untergeordnete Workflow wird über einen Connector aufgerufen. An jede Iteration des untergeordneten Workflows wird das Argument
iteration
übergeben. Der übergeordnete Workflow wartet auf das Ergebnis jeder untergeordneten Workflowausführung und speichert es. Weitere Informationen finden Sie unter Workflows Executions API-Connector und Laufzeitargumente.Die Ausführungsergebnisse werden zurückgegeben. Weitere Informationen finden Sie unter Workflow-Ausführung abschließen.
Stellen Sie den Workflow bereit:
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf:
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 aus.
Wählen Sie das Dienstkonto aus, das Sie zuvor erstellt haben.
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 die Quellcodedatei in einem Texteditor und fügen Sie die Definition für den übergeordneten Workflow ein.
Stellen Sie den Workflow bereit:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ersetzen Sie
SERVICE_ACCOUNT_NAME
durch den Namen des Dienstkontos, das Sie zuvor erstellt haben.
Übergeordneten Workflow ausführen
Führen Sie den übergeordneten Workflow aus, damit Aufrufe des untergeordneten Workflows parallel ausgeführt werden. Die Ausführungen sollten etwa 10 Sekunden dauern.
Console
Rufen Sie in der Google Cloud Console die Seite Workflows auf:
Klicken Sie auf der Seite Workflows auf den Workflow workflow-parent, um die Detailseite aufzurufen.
Klicken Sie auf der Seite Workflow-Details auf play_arrow Ausführen.
Klicken Sie noch einmal auf Ausführen.
Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.
Die Ergebnisse sollten in etwa so aussehen. Sie weisen auf Fehler bei den Iterationen 2 und 4 und auf erfolgreiche Ausführungen bei den Iterationen 1 und 3 hin.
"failure": { "2": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":2}", "duration": "10.157992541s", "endTime": "2023-07-11T13:13:13.028424329Z", "error": { "context": "RuntimeError: \"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 2\"", ... "4": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":4}", "duration": "10.157929734s", "endTime": "2023-07-11T13:13:13.061289142Z", "error": { "context": "RuntimeError: \"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 4\"", ... "success": { "1": "Hello world1", "3": "Hello world3"
gcloud
Führen Sie den Workflow aus:
gcloud workflows run workflow-parent \ --location=us-central1
Die Ergebnisse sollten in etwa so aussehen. Sie weisen auf Fehler bei den Iterationen 2 und 4 und auf erfolgreiche Ausführungen bei den Iterationen 1 und 3 hin.
Waiting for execution [06c753e4-6947-4c62-ac0b-2a9d53fb1b8f] to complete...done. argument: 'null' duration: 14.065415004s endTime: '2023-07-11T12:50:43.929023883Z' name: projects/386837416586/locations/us-central1/workflows/workflow-parent/executions/06c753e4-6947-4c62-ac0b-2a9d53fb1b8f result: '{"failure":{"2":{"message":"Execution failed or cancelled.","operation":{"argument":"{\"iteration\":2}","duration":"10.143718070s","endTime":"2023-07-11T12:50:40.673209821Z","error":{"context":"RuntimeError: ... "Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "success":{"1":"Hello world1","3":"Hello world3"}}' startTime: '2023-07-11T12:50:29.863608879Z' state: SUCCEEDED
Sie haben einen Workflow erstellt und bereitgestellt, der einen untergeordneten Workflow aufruft, vier Iterationen des untergeordneten Workflows in parallelen Zweigen ausführt und für jede Ausführung des untergeordneten Workflows einen Indikator für Erfolg oder Fehler zurückgibt.