本教學課程說明如何建立及執行父項工作流程,並行執行多個子項工作流程。
在下圖中,系統會叫用四個並行執行的子工作流程。這樣一來,父項工作流程就能在平行分支中處理資料,縮短整體執行時間。父項工作流程會等待所有子項工作流程執行完畢,再傳回成功和失敗執行的摘要,簡化任何錯誤偵測。
目標
教學課程內容:
- 建立及部署子工作流程,接收來自父項工作流程的資料。
- 建立及部署上層工作流程,使用平行
for迴圈執行多個下層工作流程。 - 執行父項工作流程,並同時叫用子項工作流程。
- 所有成功和失敗的子工作流程執行結果都會儲存並以對應項目形式傳回。
您可以在 Google Cloud 控制台中執行下列指令,也可以在終端機或 Cloud Shell 中使用 Google Cloud CLI 執行指令。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。
控制台
-
登入 Google 帳戶。
如果沒有帳戶,請 申請新帳戶。
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
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. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
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. - Click Create and continue.
-
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.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
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. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
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. - Click Create and continue.
-
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.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
登入 Google 帳戶。
如果沒有帳戶,請 申請新帳戶。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
-
建立專案:如要建立專案,您需要具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用 Workflow Executions 和 Workflows API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
設定驗證方法:
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。 -
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME換成服務帳戶的名稱。 -
將
roles/workflows.invoker身分與存取權管理角色授予服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
請替換下列項目:
SERVICE_ACCOUNT_NAME:服務帳戶名稱PROJECT_ID:您建立服務帳戶的專案 ID
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
-
建立專案:如要建立專案,您需要具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用 Workflow Executions 和 Workflows API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
設定驗證方法:
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。 -
建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME換成服務帳戶的名稱。 -
將
roles/workflows.invoker身分與存取權管理角色授予服務帳戶:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
請替換下列項目:
SERVICE_ACCOUNT_NAME:服務帳戶名稱PROJECT_ID:您建立服務帳戶的專案 ID
-
確認您具備「建立服務帳戶」身分與存取權管理角色 (
建立及部署子工作流程
子工作流程可以接收及處理來自父項工作流程的資料。子工作流程會執行下列操作,示範這項功能:
- 以整數做為引數
- 休眠 10 秒,模擬部分處理作業
傳回指標 (根據整數是奇數還是偶數),模擬工作流程執行成功或失敗
控制台
前往 Google Cloud 控制台的「Workflows」頁面。
按一下「建立」。
輸入新工作流程的名稱
workflow-child。在「Region」(區域) 清單中選取「us-central1」。
選取先前建立的「服務帳戶」。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義:
點選「Deploy」(部署)。
gcloud
為工作流程建立原始碼檔案:
touch workflow-child.yaml在文字編輯器中開啟原始碼檔案,然後將下列工作流程複製到該檔案。
部署工作流程:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
將
SERVICE_ACCOUNT_NAME換成您先前建立的服務帳戶名稱。
建立及部署父項工作流程
上層工作流程會使用平行 for 迴圈,執行子工作流程的多個分支。
複製工作流程定義的原始碼。當中包含下列部分:
地圖用於儲存子工作流程的執行結果。詳情請參閱「地圖」。
子工作流程是透過連接器叫用。子工作流程的每次疊代都會傳遞
iteration引數。父項工作流程會等待並儲存每個子項工作流程的執行結果。詳情請參閱「Workflows Executions API 連接器」和「執行階段引數」。系統會傳回執行結果。詳情請參閱「完成工作流程的執行作業」。
部署工作流程:
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
按一下「建立」。
輸入新工作流程的名稱
workflow-parent。在「Region」(區域) 清單中選取「us-central1」。
選取先前建立的「服務帳戶」。
點選「下一步」。
在工作流程編輯器中,貼上父項工作流程的定義。
點選「Deploy」(部署)。
gcloud
為工作流程建立原始碼檔案:
touch workflow-parent.yaml在文字編輯器中開啟原始碼檔案,然後貼上父項工作流程的定義。
部署工作流程:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
將
SERVICE_ACCOUNT_NAME替換為先前建立的服務帳戶名稱。
執行父項工作流程
執行父項工作流程,讓子項工作流程的呼叫作業平行執行。執行作業大約需要 10 秒。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
在「Workflows」頁面中,按一下 workflow-parent 工作流程,前往詳細資料頁面。
在「工作流程詳細資料」頁面中,按一下 play_arrow「執行」。
再次點選「執行」。
在「輸出」窗格中查看工作流程結果。
結果應類似於以下內容,指出第 2 和第 4 次疊代發生錯誤,第 1 和第 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
執行工作流程:
gcloud workflows run workflow-parent \ --location=us-central1
結果應類似於以下內容,指出第 2 和第 4 次疊代發生錯誤,第 1 和第 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
您已成功建立及部署工作流程,該工作流程會叫用子工作流程、在平行分支中執行四次子工作流程,並傳回每次子工作流程執行的成功或失敗指標。
清除所用資源
如果您是為了這個教學課程建立新專案,請刪除專案。如果您已使用現有專案,並想保留專案,但不要本教學課程新增的變更,請刪除為本教學課程建立的資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
刪除專案的方法如下:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除教學課程資源
刪除在本教學課程中建立的工作流程:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
後續步驟
- 如要進一步瞭解 Workflows 語法,請參閱 Workflows 語法參考資料。
- 如要進一步瞭解 Workflows 連接器,請參閱「瞭解連接器」一文。