本教學課程說明如何使用 Cloud Scheduler 自動執行 Workflows,以便按照特定排程執行工作流程,在本例中為每 5 分鐘執行一次。
目標
- 建立及部署可接收執行階段引數的工作流程。
- 建立 Cloud Scheduler 工作,每 5 分鐘觸發及執行一次工作流程,並傳遞格式正確的 JSON 引數。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
- 設定 Cloud Scheduler 環境,包括建立 App Engine 應用程式。
-
Enable the Workflows API.
- 設定本教學課程中使用的預設位置:
將gcloud config set workflows/location REGION
REGION
替換為您選擇的支援 Workflows 位置。 - 建立供 Workflows 使用的服務帳戶,例如
sa-name
。gcloud iam service-accounts create sa-name
- 將
workflows.invoker
角色授予服務帳戶,讓該帳戶有權觸發工作流程:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/workflows.invoker"
將 - 將
logging.logWriter
角色指派給服務帳戶。gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/logging.logWriter"
PROJECT_ID
替換為您的 Google Cloud 專案 ID。
建立接收執行階段引數的工作流程
工作流程定義是由一系列步驟組成,這些步驟使用 Workflows 語法描述,且可採用 YAML 或 JSON 格式編寫。建立工作流程後,請部署工作流程,以便執行。
控制台
前往 Google Cloud 控制台的「Workflows」頁面:
點選「建立」。
輸入
myFirstWorkflow
做為新工作流程的名稱。選取「us-central1」區域。
選取您先前建立的服務帳戶。
點選「下一步」。
在工作流程編輯器中,輸入下列工作流程定義。
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
這個工作流程會向您以執行階段引數形式傳遞名字和姓氏的人,傳回「Hello」問候語。
按一下 [Deploy] (部署)。
gcloud
- 開啟終端機。
將下列工作流程定義儲存為 YAML 或 JSON 檔案,例如 myFirstWorkflow.yaml 或 myFirstWorkflow.json。
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
這個工作流程會向您以執行階段引數形式傳遞名字和姓氏的人,傳回「Hello」問候語。
輸入下列指令來部署工作流程:
gcloud workflows deploy myFirstWorkflow \ --source=myFirstWorkflow.yaml_OR_json \ --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
請將
yaml_OR_json
替換為yaml
或json
,視您先前建立的 Workflows 定義檔格式而定。
排定工作流程
使用先前建立的服務帳戶,建立會觸發工作流程的 Cloud Scheduler 工作。
控制台
前往 Google Cloud 控制台的「Cloud Scheduler」頁面:
按一下 [Create Job] (建立工作)。
將「Name」(名稱) 設為
my-workflow-job
。在「頻率」部分輸入:
這項作業每 5 分鐘執行一次。間隔是使用 unix-cron 格式定義。*/5 * * * *
針對「Timezone」(時區),選取國家/地區和時區。
舉例來說,選取「美國」和「洛杉磯」或「太平洋夏令時間 (PDT)」。
按一下「繼續」。
在「目標類型」中選取「HTTP」。
在「網址」中輸入:
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
將「HTTP method」保留預設的「POST」。
新增下列兩個 HTTP 標頭:
- 名稱:
Content-Type
,值:application/octet-stream
- 名稱:
User-Agent
,值:Google-Cloud-Scheduler
- 名稱:
在「Body」中輸入:
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
這會傳遞工作流程引數的 JSON 編碼;在本例中,引數為名字「Sherlock」和姓氏「Holmes」。字串內的雙引號會使用反斜線 (\) 逸出。
在「Auth header」(驗證標頭) 部分,選取「Add OAuth token」(新增 OAuth 權杖)。
輸入您先前建立的服務帳戶。
您不必指定 Scope,因為系統會使用sa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform
的預設值。其餘設定均保留預設值,然後點按「建立」。
gcloud
輸入下列指令,排定名為 my-workflow-job
的工作:
gcloud scheduler jobs create http my-workflow-job \ --schedule="*/5 * * * *" \ --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \ --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \ --time-zone="America/Los_Angeles" \ --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"
間隔是使用 unix-cron 格式定義。
message-body
標記用於傳遞工作流程引數的 JSON 編碼;在本例中,引數為名字「Sherlock」和姓氏「Holmes」。字串內的雙引號會使用反斜線 (\) 逸出。
工作流程現在每 5 分鐘執行一次。
如要進一步瞭解 gcloud scheduler
標記,以及如何套用通話記錄,以便記錄工作流程執行期間的每個通話步驟,請參閱「為工作流程排程」和gcloud
參考資料。
執行作業並驗證結果
控制台
前往 Google Cloud 控制台的「Cloud Scheduler」頁面:
如果沒有顯示工作,可能需要重新整理頁面。
針對名為
my-workflow-job
的工作,按一下「立即執行」。「結果」值應會更新為「成功」。
前往 Google Cloud 控制台的「Workflows」頁面:
在工作流程清單中,按一下「myFirstWorkflow」myFirstWorkflow開啟詳細資料頁面。
工作流程的執行狀態應為「已完成」。
按一下工作流程的執行 ID 開啟詳細資料頁面,並在「Output」(輸出) 窗格中查看工作流程結果。
輸出內容應為「Hello, Sherlock Holmes!」。
gcloud
執行 Cloud Scheduler 工作,以執行工作流程:
gcloud scheduler jobs run my-workflow-job
擷取工作流程的執行作業 ID:
gcloud workflows executions list myFirstWorkflow
輸出內容應類似以下內容,且執行 ID 會以粗體顯示:
projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
擷取工作流程的執行結果:
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
將
EXECUTION_ID
替換為上一步傳回的執行作業 ID。輸出應會如下所示:
argument: '{"firstName":"Sherlock","lastName":"Holmes"}' endTime: '2021-09-09T15:15:00.869350639Z' name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320 result: '"Hello, Sherlock Holmes!"' startTime: '2021-09-09T15:15:00.839175480Z' state: SUCCEEDED workflowRevisionId: 000001-4f9
恭喜!您已成功建立 Cloud Scheduler 工作,可依特定排程自動執行工作流程。
清除所用資源
完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
如要刪除專案:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除 Cloud Scheduler 工作
前往 Google Cloud 控制台的「Cloud Scheduler」頁面。
選取工作旁的核取方塊。
按一下頁面頂端的「刪除」,並確認要刪除。
刪除 Workflows 工作流程
前往 Google Cloud 控制台的「Workflows」頁面。
選取工作流程。
按一下頁面頂端的「Delete」(刪除),然後輸入工作流程的名稱並確認刪除。
停用 App Engine 應用程式
停用 App Engine 應用程式會讓應用程式停止執行執行個體及提供要求,但會保留應用程式資料與設定。
前往 Google Cloud 控制台的「Application settings」(應用程式設定) 頁面。
按一下「停用應用程式」。
依照系統的提示操作。
後續步驟
- 進一步瞭解工作流程。