本教學課程說明如何建立 Cloud Tasks 佇列,以控管工作流程的執行速率。
可同時執行的有效工作流程執行作業有數量上限。配額用盡後,如果執行作業積壓功能已停用,或積壓的執行作業達到配額上限,任何新的執行作業都會失敗,並傳回 HTTP 429 Too many requests 狀態碼。啟用 Cloud Tasks 佇列,以您定義的速率執行子工作流程,即可避免 Workflows 配額相關問題,並提高執行率。
請注意,Cloud Tasks 旨在提供「至少一次」傳遞;不過,Workflows 無法確保完全只處理一次來自 Cloud Tasks 的重複要求。
在下圖中,父項工作流程會叫用受 Cloud Tasks 佇列控管的子項工作流程,而該佇列已套用調度率。
目標
教學課程內容:
- 建立 Cloud Tasks 佇列,做為父項和子項工作流程之間的中介。
- 建立及部署子工作流程,接收來自父項工作流程的資料。
- 建立及部署父項工作流程,透過 Cloud Tasks 佇列執行子項工作流程。
- 執行父項工作流程,不設調度速率限制,這會叫用子項工作流程的執行作業。
- 對 Cloud Tasks 佇列套用調度限制,並執行父項工作流程。
- 請注意,子項工作流程的執行速率是透過 Cloud Tasks 佇列定義。
您可以在 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 Cloud Tasks, Compute Engine, 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.-
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 Cloud Tasks, Compute Engine, 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.- 前往 Google Cloud 控制台的「IAM」頁面,為 Compute Engine 預設服務帳戶設定權限。
記下 Compute Engine 預設服務帳戶,因為您會將其與本教學課程中的工作流程建立關聯,以進行測試。啟用或使用採用 Compute Engine 的 Google Cloud 服務後,系統會自動建立這個服務帳戶,電子郵件地址格式如下:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
將
PROJECT_NUMBER替換為Google Cloud 專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面找到專案編號。 - 選取 Compute Engine 預設服務帳戶,然後按一下該列中的 「編輯主體」。
- 在隨即顯示的對話方塊中,按一下 「Add another role」(新增其他角色),然後新增下列角色:
- 在「Select a role」(選取角色) 清單中,依序選取「Workflows」(工作流程) >「Workflows Invoker」(工作流程呼叫者),讓帳戶有權觸發工作流程執行作業。
- 在「Select a role」(選取角色) 清單中,依序選取「Cloud Tasks」>「Cloud Tasks Enqueuer」(Cloud Tasks 佇列者),讓帳戶有權建立工作。
- 按一下 [儲存]。
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 專案名稱。
啟用 Cloud Tasks、Compute Engine 和 Workflows API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com -
安裝 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 專案名稱。
啟用 Cloud Tasks、Compute Engine 和 Workflows API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable cloudtasks.googleapis.com
compute.googleapis.com workflows.googleapis.com 記下 Compute Engine 預設服務帳戶,因為您會將其與本教學課程中的工作流程建立關聯,以進行測試。啟用或使用採用 Compute Engine 的 Google Cloud 服務後,系統會自動建立這個服務帳戶,電子郵件地址格式如下:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
將
PROJECT_NUMBER替換為Google Cloud 專案編號。您可以執行下列指令來找出專案編號:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
- 將專案的 Workflows 叫用者角色 (
roles/workflows.invoker) 授予 Compute Engine 預設服務帳戶,讓該帳戶有權觸發工作流程執行作業。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
更改下列內容:
PROJECT_ID: Google Cloud 專案 IDPROJECT_NUMBER: Google Cloud 專案編號
- 將專案的 Cloud Tasks Enqueuer 角色 (
roles/cloudtasks.enqueuer) 授予 Compute Engine 預設服務帳戶,讓該帳戶有權建立任務。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudtasks.enqueuer
建立 Cloud Tasks 佇列
建立可在父項工作流程中使用的 Cloud Tasks 佇列,並藉此控管工作流程執行頻率。
控制台
前往 Google Cloud 控制台的「Cloud Tasks」頁面:
按一下 「建立發送佇列」。
輸入「Queue name」(佇列名稱),
queue-workflow-child。在「Region」(區域) 清單中,選取「us-central1 (Iowa)」(us-central1 (愛荷華州))。
點選「建立」。
gcloud
QUEUE=queue-workflow-child LOCATION=us-central1 gcloud tasks queues create $QUEUE --location=$LOCATION
建立及部署子工作流程
子工作流程可以接收及處理來自父項工作流程的資料。建立及部署子工作流程,執行下列作業:
- 以引數形式接收
iteration - 休眠 10 秒,模擬部分處理作業
成功執行時會傳回字串
控制台
前往 Google Cloud 控制台的「Workflows」頁面。
按一下「建立」。
輸入新工作流程的名稱
workflow-child。在「Region」(區域) 清單中,選取「us-central1 (Iowa)」(us-central1 (愛荷華州))。
在「服務帳戶」清單中,選取「Compute Engine 預設服務帳戶」。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義:
點選「Deploy」(部署)。
gcloud
為工作流程建立原始碼檔案:
touch workflow-child.yaml在文字編輯器中開啟原始碼檔案,然後將下列工作流程複製到該檔案。
部署工作流程:
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER-compute@developer.gserviceaccount.com
建立及部署父項工作流程
上層工作流程會使用 for 迴圈執行子工作流程的多個分支。
複製定義父項工作流程的原始碼:
工作流程包含下列部分:
這個對應項用於指派參照子項工作流程和 Cloud Tasks 佇列名稱的常數。詳情請參閱「地圖」。
執行
for迴圈,以反覆叫用子項工作流程。詳情請參閱「疊代」。工作流程步驟:建立大量工作並新增至 Cloud Tasks 佇列,以執行子工作流程。詳情請參閱 Cloud Tasks API 連接器。
部署工作流程:
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
按一下「建立」。
輸入新工作流程的名稱
workflow-parent。在「Region」(區域) 清單中,選取「us-central1 (Iowa)」(us-central1 (愛荷華州))。
在「服務帳戶」清單中,選取「Compute Engine 預設服務帳戶」。
點選「下一步」。
在工作流程編輯器中,貼上父項工作流程的定義。
點選「Deploy」(部署)。
gcloud
為工作流程建立原始碼檔案:
touch workflow-parent.yaml在文字編輯器中開啟原始碼檔案,然後貼上父項工作流程的定義。
部署工作流程:
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=
PROJECT_NUMBER-compute@developer.gserviceaccount.com
執行沒有速率限制的上層工作流程
執行父項工作流程,透過 Cloud Tasks 佇列叫用子項工作流程。執行時間約需 10 秒。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
在「Workflows」頁面中,按一下 workflow-parent 工作流程,前往詳細資料頁面。
在「工作流程詳細資料」頁面中,按一下 play_arrow「執行」。
再次點選「執行」。
在父項工作流程執行期間,返回「Workflows」頁面,然後按一下「workflow-child」工作流程,前往詳細資料頁面。
按一下「執行」分頁標籤。
您應該會看到子工作流程的執行作業,執行時間大致相同,如下所示:

gcloud
執行工作流程:
gcloud workflows run workflow-parent \ --location=us-central1
如要確認是否已觸發工作流程執行作業,請列出最近四次的執行作業:
gcloud workflows executions list workflow-child --limit=4
由於執行次數 (100 次) 低於工作流程並行上限,結果應與下列內容類似。如果同時提交數千項執行作業,可能會發生配額問題。
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/1570d06e-d133-4536-a859-b7b6a1a85524 STATE: ACTIVE START_TIME: 2023-07-27T00:56:15.093934448Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/82724960-7d92-4961-aa2c-a0f0be46212c STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.903007626Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/598126fb-37f9-45bc-91d8-aea7d795d702 STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.698260524Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/d2e9960b-f93f-4df4-a594-3e7e5c2be53f STATE: ACTIVE START_TIME: 2023-07-27T00:56:14.503818840Z END_TIME:
您已建立並部署工作流程,該工作流程會呼叫子工作流程的 100 次疊代。
執行設有頻率限制的上層工作流程
對 Cloud Tasks 佇列套用每秒一次的調度頻率限制,然後執行父項工作流程。
控制台
前往 Google Cloud 控制台的「Cloud Tasks」頁面:
按一下您建立的 Cloud Tasks 佇列「queue-workflow-child」,然後按一下「編輯佇列」。
在「工作調度的頻率限制」部分的「Max dispatches」(調度次數上限) 欄位中,輸入 1。
按一下 [儲存]。
前往「Workflows」頁面:
按一下「workflow-parent」工作流程,前往詳細資料頁面。
在「工作流程詳細資料」頁面中,按一下 play_arrow「執行」。
再次點選「執行」。
在父項工作流程執行期間,返回「Workflows」頁面,然後按一下「workflow-child」工作流程,前往詳細資料頁面。
按一下「執行」分頁標籤。
您應該會看到子工作流程的執行作業,每秒執行一個要求,類似於下列內容:

gcloud
更新 Cloud Tasks 佇列,套用每秒一次的調度速率限制:
gcloud tasks queues update $QUEUE \ --max-dispatches-per-second=1 \ --location=us-central1
執行工作流程:
gcloud workflows run workflow-parent \ --location=us-central1
如要確認是否已觸發工作流程執行作業,請列出最近四次的執行作業:
gcloud workflows executions list workflow-child --limit=4
結果應如下所示,每秒執行一個工作流程:
NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/becf4957-9fb2-40d9-835d-0ff2dd0c1249 STATE: ACTIVE START_TIME: 2023-07-27T01:07:24.446361457Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/6c1e7c4b-7ac6-4121-b351-1e2d56d10903 STATE: ACTIVE START_TIME: 2023-07-27T01:07:23.448213989Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/f2ba5027-af40-4cd3-8cd0-b8033bcc6211 STATE: ACTIVE START_TIME: 2023-07-27T01:07:22.431485914Z END_TIME: NAME: projects/620278351741/locations/us-central1/workflows/workflow-child/executions/ecc61ee5-fe87-49eb-8803-89dba929f6c8 STATE: ACTIVE START_TIME: 2023-07-27T01:07:21.443466369Z END_TIME:
您已成功部署工作流程,以每秒一次的調度率,呼叫子工作流程的 100 次疊代。
清除所用資源
如果您是為了這個教學課程建立新專案,請刪除專案。如果您已使用現有專案,並想保留專案,但不要本教學課程新增的變更,請刪除為本教學課程建立的資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
刪除專案的方法如下:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除教學課程資源
刪除在本教學課程中建立的工作流程和 Cloud Tasks 資源:
控制台
如要刪除工作流程,請按照下列步驟操作:
前往 Google Cloud 控制台的「Workflows」頁面:
在工作流程清單中,按一下工作流程即可前往「Workflow details」(工作流程詳細資料) 頁面。
按一下 「Delete」(刪除)。
輸入工作流程名稱,然後按一下「確認」。
如要刪除 Cloud Tasks 佇列,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Tasks」頁面:
選取要刪除的佇列名稱,然後按一下「Delete queue」(刪除佇列)。
確認上述動作。
gcloud
如要刪除工作流程,請執行下列指令:
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
如要刪除 Cloud Tasks 佇列,請執行下列指令:
gcloud tasks queues delete queue-workflow-child
後續步驟
- 如要進一步瞭解如何使用 Cloud Tasks 將工作流程加入佇列,並以非同步方式執行,請參閱「使用 Cloud Tasks 將工作流程執行作業加入佇列」。
- 如要進一步瞭解 Workflows 語法,請參閱 Workflows 語法參考資料。