Menjalankan alur kerja yang mengeksekusi alur kerja lain secara paralel


Tutorial ini menunjukkan cara membuat dan menjalankan alur kerja induk yang menjalankan beberapa alur kerja turunan secara paralel.

Dalam diagram berikut, empat eksekusi paralel alur kerja turunan dipanggil. Hal ini memungkinkan alur kerja induk memproses data di cabang paralel, dan mengurangi waktu eksekusi secara keseluruhan. Alur kerja induk menunggu semua eksekusi alur kerja turunan selesai sebelum menampilkan ringkasan eksekusi yang berhasil dan gagal, sehingga menyederhanakan deteksi error.

Alur kerja induk yang memanggil iterasi paralel alur kerja turunan

Tujuan

Dalam tutorial ini, Anda akan:

  1. Buat dan deploy alur kerja turunan yang menerima data dari alur kerja induk.
  2. Buat dan deploy alur kerja induk yang mengeksekusi beberapa alur kerja turunan menggunakan loop for paralel.
  3. Jalankan alur kerja induk yang memanggil eksekusi paralel alur kerja turunan.
  4. Hasil dari semua eksekusi alur kerja turunan yang berhasil dan gagal disimpan dan ditampilkan dalam peta.

Anda dapat menjalankan perintah berikut di konsol Google Cloud atau menggunakan Google Cloud CLI di terminal atau Cloud Shell.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.

Konsol

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

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

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Workflow Executions and Workflows APIs.

    Enable the APIs

  5. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

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

    4. Click Create and continue.
    5. 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.

    6. Click Continue.
    7. 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.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Enable the Workflow Executions and Workflows APIs.

    Enable the APIs

  9. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

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

    4. Click Create and continue.
    5. 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.

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

gcloud

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Workflow Executions and Workflows APIs:

    gcloud services enable workflowexecutions.googleapis.com workflows.googleapis.com
  7. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/workflows.invoker IAM role to the service account:

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

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. 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.

  11. Make sure that billing is enabled for your Google Cloud project.

  12. Enable the Workflow Executions and Workflows APIs:

    gcloud services enable workflowexecutions.googleapis.com workflows.googleapis.com
  13. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/workflows.invoker IAM role to the service account:

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

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account

Membuat dan men-deploy alur kerja turunan

Alur kerja turunan dapat menerima dan memproses data dari alur kerja induk. Alur kerja turunan menunjukkan hal ini dengan melakukan hal berikut:

  • Menerima bilangan bulat sebagai argumen
  • Tidur selama 10 detik untuk menyimulasikan beberapa pemrosesan
  • Menampilkan indikator (berdasarkan apakah bilangan bulat adalah bilangan ganjil atau genap) untuk menyimulasikan keberhasilan atau kegagalan eksekusi alur kerja

Konsol

  1. Di konsol Google Cloud, buka halaman Workflows.

    Buka Workflows

  2. Klik Buat.

  3. Masukkan nama, workflow-child, untuk alur kerja baru.

  4. Dalam daftar Region, pilih us-central1.

  5. Pilih Service account yang sebelumnya Anda buat.

  6. Klik Berikutnya.

  7. Di editor alur kerja, masukkan definisi berikut untuk alur kerja Anda:

    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. Klik Deploy.

gcloud

  1. Buat file kode sumber untuk alur kerja Anda:

    touch workflow-child.yaml
  2. Buka file kode sumber Anda di editor teks dan salin alur kerja berikut ke file.

    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. Deploy alur kerja:

    gcloud workflows deploy workflow-child \
        --source=workflow-child.yaml \
        --location=us-central1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

    Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan yang Anda buat sebelumnya.

Membuat dan men-deploy alur kerja induk

Alur kerja induk mengeksekusi beberapa cabang alur kerja turunan menggunakan loop for paralel.

  1. Salin kode sumber untuk definisi alur kerja. Dialog ini terdiri dari bagian berikut:

    1. Peta digunakan untuk menyimpan hasil eksekusi alur kerja turunan. Untuk mengetahui informasi selengkapnya, lihat 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. Loop for dijalankan secara paralel untuk memanggil alur kerja turunan. Untuk informasi selengkapnya, lihat Langkah paralel dan Iterasi.

      - execute_child_workflows:
          parallel:
            shared: [execution_results]
            for:
              value: iteration
              in: [1, 2, 3, 4]
              steps:
                  - iterate:
    3. Alur kerja turunan dipanggil menggunakan konektor. Setiap iterasi alur kerja turunan diteruskan argumen iteration. Alur kerja induk menunggu dan menyimpan hasil dari setiap eksekusi alur kerja turunan. Untuk mengetahui informasi selengkapnya, lihat Konektor Workflows Executions API dan Argumen runtime.

      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. Hasil eksekusi akan ditampilkan. Untuk mengetahui informasi selengkapnya, lihat Menyelesaikan eksekusi alur kerja.

      - return_execution_results:
          return: ${execution_results}
  2. Deploy alur kerja:

    Konsol

    1. Di konsol Google Cloud, buka halaman Workflows:

      Buka Workflows

    2. Klik Buat.

    3. Masukkan nama, workflow-parent, untuk alur kerja baru.

    4. Dalam daftar Region, pilih us-central1.

    5. Pilih Service account yang sebelumnya Anda buat.

    6. Klik Berikutnya.

    7. Di editor alur kerja, tempelkan definisi untuk alur kerja induk.

    8. Klik Deploy.

    gcloud

    1. Buat file kode sumber untuk alur kerja Anda:

      touch workflow-parent.yaml
    2. Buka file kode sumber Anda di editor teks dan tempel definisi untuk alur kerja induk.

    3. Deploy alur kerja:

      gcloud workflows deploy workflow-parent \
          --source=workflow-parent.yaml \
          --location=us-central1 \
          --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

      Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan yang Anda buat sebelumnya.

Menjalankan alur kerja induk

Jalankan alur kerja induk sehingga pemanggilan alur kerja turunan berjalan secara paralel. Eksekusi akan memerlukan waktu sekitar 10 detik untuk diselesaikan.

Konsol

  1. Di konsol Google Cloud, buka halaman Workflows:

    Buka Workflows

  2. Di halaman Alur kerja, klik alur kerja workflow-parent untuk membuka halaman detailnya.

  3. Di halaman Workflow details, klik Execute.

  4. Klik Execute lagi.

  5. Lihat hasil alur kerja di panel Output.

    Hasilnya akan mirip dengan berikut ini, yang menunjukkan error dengan iterasi 2 dan 4, serta berhasil dengan iterasi 1 dan 3.

    "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

Menjalankan alur kerja:

gcloud workflows run workflow-parent \
    --location=us-central1

Hasilnya akan mirip dengan berikut ini, yang menunjukkan error dengan iterasi 2 dan 4, serta berhasil dengan iterasi 1 dan 3.

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

Anda telah berhasil membuat dan men-deploy alur kerja yang memanggil alur kerja turunan, menjalankan empat iterasi alur kerja turunan di cabang paralel, dan menampilkan indikator keberhasilan atau kegagalan untuk setiap eksekusi alur kerja turunan.

Pembersihan

Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Menghapus resource tutorial

Menghapus alur kerja yang dibuat dalam tutorial ini:

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

Langkah selanjutnya