Workflow ausführen, der andere Workflows parallel ausführt

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 untergeordneten Workflowausführungen abgeschlossen sind, bevor er eine Zusammenfassung der erfolgreichen und fehlgeschlagenen Ausführungen zurückgibt. So wird die Fehlererkennung vereinfacht.

Übergeordneter Workflow, der parallele Iterationen eines untergeordneten Workflows aufruft

Ziele

In dieser Anleitung werden Sie:

  1. Untergeordneten Workflow erstellen und bereitstellen, der Daten von einem übergeordneten Workflow empfängt.
  2. Erstellen und stellen Sie einen übergeordneten Workflow bereit, der mehrere untergeordnete Workflows mit einer parallelen for-Schleife ausführt.
  3. Führen Sie den übergeordneten Workflow aus, der parallele Ausführungen des untergeordneten Workflows aufruft.
  4. Die Ergebnisse aller erfolgreichen und fehlgeschlagenen Ausführungen von untergeordneten Workflows werden in einer Map gespeichert und zurückgegeben.

Sie können die folgenden Befehle in der Google Cloud -Konsole oder über das Google Cloud CLI entweder 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.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

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

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Workflow Executions and Workflows APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Create a service account:

    1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles.
    2. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    3. Select your project.
    4. 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.

    5. Click Create and continue.
    6. Grant the Workflows > Workflows Invoker role to the service account.

      To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.

    7. Click Continue.
    8. Click Done to finish creating the service account.

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the Workflow Executions and Workflows APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  9. Create a service account:

    1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles.
    2. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    3. Select your project.
    4. 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.

    5. Click Create and continue.
    6. Grant the Workflows > Workflows Invoker role to the service account.

      To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.

    7. Click Continue.
    8. Click Done to finish creating the service account.

gcloud

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Installieren Sie die Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud -Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud -Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  6. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  7. Aktivieren Sie die Workflow Executions API und die Workflows API:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen

    gcloud services enable workflowexecutions.googleapis.com workflows.googleapis.com
  8. Richten Sie die Authentifizierung ein:

    1. Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen
    2. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    3. Weisen Sie dem Dienstkonto die IAM-Rolle roles/workflows.invoker zu.

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker

      Dabei gilt:

      • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
  9. Installieren Sie die Google Cloud CLI.

  10. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  11. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud -Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud -Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  13. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  14. Aktivieren Sie die Workflow Executions API und die Workflows API:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen

    gcloud services enable workflowexecutions.googleapis.com workflows.googleapis.com
  15. Richten Sie die Authentifizierung ein:

    1. Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen
    2. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    3. Weisen Sie dem Dienstkonto die IAM-Rolle roles/workflows.invoker zu.

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker

      Dabei gilt:

      • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben

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
  • Schläft 10 Sekunden lang, 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

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf.

    Zur Seite "Workflows"

  2. Klicken Sie auf  Erstellen.

  3. Geben Sie den Namen workflow-child für den neuen Workflow ein.

  4. Wählen Sie in der Liste Region die Option us-central1 aus.

  5. Wählen Sie das Dienstkonto aus, das Sie zuvor erstellt haben.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein:

    main:
      params: [args]
      steps:
        - init:
            assign:
              - iteration : ${args.iteration}
        - wait:
            call: sys.sleep
            args:
                seconds: 10
        - check_iteration_even_or_odd:
            switch:
              - condition: ${iteration % 2 == 0}
                next: raise_error
        - return_message:
            return: ${"Hello world"+iteration}
        - raise_error:
            raise: ${"Error with iteration "+iteration}
  8. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch workflow-child.yaml
  2. Öffnen Sie die Quellcodedatei in einem Texteditor und kopieren Sie den folgenden Workflow in die Datei.

    main:
      params: [args]
      steps:
        - init:
            assign:
              - iteration : ${args.iteration}
        - wait:
            call: sys.sleep
            args:
                seconds: 10
        - check_iteration_even_or_odd:
            switch:
              - condition: ${iteration % 2 == 0}
                next: raise_error
        - return_message:
            return: ${"Hello world"+iteration}
        - raise_error:
            raise: ${"Error with iteration "+iteration}
  3. 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.

  1. Kopieren Sie den Quellcode für die Workflow-Definition. Sie besteht aus den folgenden Teilen:

    1. Eine Map wird verwendet, um die Ergebnisse der Ausführungen des untergeordneten Workflows zu speichern. Weitere Informationen finden Sie unter Maps.

      main:
        steps:
          - init:
              assign:
                - execution_results: {} # results from each execution
                - execution_results.success: {} # successful executions saved under 'success' key
                - execution_results.failure: {} # failed executions saved under 'failure' key
    2. Eine for-Schleife wird parallel ausgeführt, um den untergeordneten Workflow aufzurufen. Weitere Informationen finden Sie unter Parallele Schritte und Iteration.

      - execute_child_workflows:
          parallel:
            shared: [execution_results]
            for:
              value: iteration
              in: [1, 2, 3, 4]
              steps:
                  - iterate:
    3. 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.

      try:
        steps:
          - execute_child_workflow:
              call: googleapis.workflowexecutions.v1.projects.locations.workflows.executions.run
              args:
                workflow_id: workflow-child
                #location: ...
                #project_id: ...
                argument:
                  iteration: ${iteration}
              result: execution_result
          - save_successful_execution:
              assign:
                - execution_results.success[string(iteration)]: ${execution_result}
      except:
          as: e
          steps:
            - save_failed_execution:
                assign:
                  - execution_results.failure[string(iteration)]: ${e}
    4. Die Ausführungsergebnisse werden zurückgegeben. Weitere Informationen finden Sie unter Workflow-Ausführung abschließen.

      - return_execution_results:
          return: ${execution_results}
  2. Stellen Sie den Workflow bereit:

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Workflows auf:

      Zur Seite "Workflows"

    2. Klicken Sie auf  Erstellen.

    3. Geben Sie den Namen workflow-parent für den neuen Workflow ein.

    4. Wählen Sie in der Liste Region die Option us-central1 aus.

    5. Wählen Sie das Dienstkonto aus, das Sie zuvor erstellt haben.

    6. Klicken Sie auf Weiter.

    7. Fügen Sie im Workflow-Editor die Definition für den übergeordneten Workflow ein.

    8. Klicken Sie auf Bereitstellen.

    gcloud

    1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

      touch workflow-parent.yaml
    2. Öffnen Sie die Quellcodedatei in einem Texteditor und fügen Sie die Definition für den übergeordneten Workflow ein.

    3. 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

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf:

    Zur Seite "Workflows"

  2. Klicken Sie auf der Seite Workflows auf den Workflow workflow-parent, um die Detailseite aufzurufen.

  3. Klicken Sie auf der Seite Workflow-Details auf  Ausführen.

  4. Klicken Sie noch einmal auf Ausführen.

  5. 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.

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:

  1. Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. 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 in dieser Anleitung erstellten Workflows:

gcloud workflows delete workflow-child
gcloud workflows delete workflow-parent

Nächste Schritte