Menjalankan alur kerja yang menjalankan 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 untuk memproses data di cabang paralel, dan mengurangi waktu eksekusi keseluruhan. Alur kerja induk menunggu semua eksekusi alur kerja turunan selesai sebelum menampilkan ringkasan eksekusi yang berhasil dan gagal, yang menyederhanakan deteksi error.

Alur kerja induk yang memanggil iterasi paralel dari 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 menjalankan 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 akan disimpan dan ditampilkan di peta.

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

Biaya

Dalam dokumen ini, Anda 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. Login ke Akun Google Anda.

    Jika Anda belum memilikinya, Daftar untuk membuat akun baru.

  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Workflow Executions and Workflows.

    Mengaktifkan API

  5. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Sebagai contoh, Service account for quickstart.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran Workflows > Workflows Invoker ke akun layanan.

      Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih Workflows > Workflows Invoker.

    6. Klik Lanjutkan.
    7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

  6. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  7. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  8. Aktifkan API Workflow Executions and Workflows.

    Mengaktifkan API

  9. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

      Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Sebagai contoh, Service account for quickstart.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran Workflows > Workflows Invoker ke akun layanan.

      Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih Workflows > Workflows Invoker.

    6. Klik Lanjutkan.
    7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

gcloud

  1. Login ke Akun Google Anda.

    Jika Anda belum memilikinya, Daftar untuk membuat akun baru.

  2. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Aktifkan API Workflow Executions and Workflows:

    gcloud services enable workflowexecutions.googleapis.com workflows.googleapis.com
  7. Menyiapkan autentikasi:

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. Berikan peran IAM roles/workflows.invoker ke akun layanan:

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

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
  8. Menginstal Google Cloud CLI.
  9. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  10. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  11. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  12. Aktifkan API Workflow Executions and Workflows:

    gcloud services enable workflowexecutions.googleapis.com workflows.googleapis.com
  13. Menyiapkan autentikasi:

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. Berikan peran IAM roles/workflows.invoker ke akun layanan:

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

      Ganti kode berikut:

      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan

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 integer sebagai argumen
  • Tidur selama 10 detik untuk menyimulasikan beberapa pemrosesan
  • Menampilkan indikator (berdasarkan bilangan bulat apakah itu angka 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. Pada daftar Region, pilih us-central1.

  5. Pilih Akun layanan yang telah dibuat sebelumnya.

  6. Klik Next.

  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 di editor teks, lalu salin alur kerja berikut ke file tersebut.

    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.iam.gserviceaccount.com

    Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan yang Anda buat sebelumnya.

Membuat dan men-deploy alur kerja induk

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

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

    1. Peta digunakan untuk menyimpan hasil eksekusi alur kerja turunan. Untuk 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 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. Pada daftar Region, pilih us-central1.

    5. Pilih Akun layanan yang telah dibuat sebelumnya.

    6. Klik Next.

    7. Di editor alur kerja, tempel 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 di editor teks dan tempelkan 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.iam.gserviceaccount.com

      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 memerlukan waktu sekitar 10 detik hingga selesai.

Konsol

  1. Di konsol Google Cloud, buka halaman Workflows:

    Buka Workflows

  2. Di halaman Workflows, 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 serupa dengan yang berikut, 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 serupa dengan yang berikut, 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. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource tutorial

Hapus alur kerja yang dibuat dalam tutorial ini:

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

Langkah selanjutnya