排定工作流程

本教學課程說明如何使用 Cloud Scheduler 自動執行 Workflows,以便按照特定排程執行工作流程 (在本例中為每 5 分鐘執行一次)。

目標

  1. 建立及部署可接收執行階段引數的工作流程。
  2. 建立 Cloud Scheduler 工作,每 5 分鐘觸發並執行工作流程,並以正確格式傳入 JSON 引數。

費用

在本文件中,您會使用下列 Google Cloud計費元件:

您可以使用 Pricing Calculator,根據預測用量估算費用。

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

事前準備

  1. 設定 Cloud Scheduler 的環境,包括建立 App Engine 應用程式。
  2. 啟用 Workflows API (如果尚未啟用)。

    啟用 API 所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

  3. 設定本教學課程中使用的預設位置:
      gcloud config set workflows/location REGION
    將 REGION 替換為您選擇的支援 Workflows 位置。
  4. 建立供 Workflows 使用的服務帳戶,例如 sa-name。
      gcloud iam service-accounts create sa-name
  5. 將 workflows.invoker 角色授予服務帳戶,讓帳戶有權觸發工作流程:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID." \
          --role "roles/workflows.invoker"
  6. 將 PROJECT_ID 替換為 Google Cloud 專案 ID。
  7. 將 logging.logWriter 角色授予服務帳戶。
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID." \
          --role "roles/logging.logWriter"

建立接收執行階段引數的工作流程

工作流程定義是由一系列步驟組成,這些步驟使用 Workflows 語法描述,且可採用 YAML 或 JSON 格式編寫。建立工作流程後,您需要部署工作流程,才能執行。

控制台

  1. 前往 Google Cloud 控制台的「Workflows」頁面:

    前往「Workflows」頁面

  2. 點選「建立」。

  3. 輸入 myFirstWorkflow 做為新工作流程的名稱。

  4. 在「區域」部分選取「us-east1」。

  5. 選取您先前建立的服務帳戶。

  6. 點選「下一步」。

  7. 在工作流程編輯器中,輸入下列工作流程定義。

    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」問候語。

  8. 點選「Deploy」(部署)。

gcloud

  1. 開啟終端機。
  2. 將下列工作流程定義儲存為 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」問候語。

  3. 輸入下列指令來部署工作流程:

    gcloud workflows deploy myFirstWorkflow \
        --location=us-east1 \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.

    根據先前建立的 Workflows 定義檔案格式,將 yaml_OR_json 替換為 yaml 或 json。

排定工作流程

使用先前建立的服務帳戶,建立會觸發工作流程的 Cloud Scheduler 工作。

控制台

  1. 前往 Google Cloud 控制台的「Cloud Scheduler」頁面:

    前往 Cloud Scheduler

  2. 點選「建立工作」。

  3. 將「Name」(名稱) 設為 my-workflow-job。

  4. 在「區域」部分,選取「us-east1 (南卡羅來納州)」。

  5. 在「Frequency」(頻率) 部分,輸入:

    */5 * * * *
    這項設定會每 5 分鐘執行一次工作。間隔是以 unix-cron 格式定義。

  6. 在「時區」部分,選取國家/地區和時區。

    例如,選取「United States」(美國) 和「Los Angeles」(洛杉磯) 或「Pacific Daylight Time (PDT)」(太平洋夏令時間 (PDT))。

  7. 按一下「繼續」。

  8. 在「Target type」(目標類型) 部分,選取「HTTP」。

  9. 在「URL」(網址) 部分,輸入:

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-east1/workflows/myFirstWorkflow/executions
    

  10. 將「HTTP method」(HTTP 方法) 設為預設值「POST」。

  11. 新增下列兩個 HTTP 標頭:

    • 名稱:Content-Type,值:application/octet-stream
    • 名稱:User-Agent,值:Google-Cloud-Scheduler
  12. 在「Body」部分,輸入下列內容:

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    這會傳遞工作流程引數的 JSON 編碼,在本例中為名字「Sherlock」和姓氏「Holmes」。字串中的雙引號會使用反斜線 (\) 逸出。

  13. 在「Auth header」(驗證標頭) 部分,選取「Add OAuth token」(新增 OAuth 權杖)。

  14. 輸入先前建立的服務帳戶。

    sa-name@PROJECT_ID.
    
    您不必指定「Scope」(範圍),因為系統會使用預設的 https://www.googleapis.com/auth/cloud-platform。

  15. 其餘設定均保留預設值,然後點選「建立」。

gcloud

輸入下列指令,排定名為 my-workflow-job 的工作:

gcloud scheduler jobs create http my-workflow-job \
    --location="us-east1" \
    --schedule="*/5 * * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-east1/workflows/myFirstWorkflow/executions" \
    --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
    --time-zone="America/Los_Angeles" \
    --oauth-service-account-email="sa-name@PROJECT_ID."

間隔是以 unix-cron 格式定義。

message-body 旗標用於傳遞工作流程引數的 JSON 編碼,在本例中為名字「Sherlock」和姓氏「Holmes」。字串中的雙引號會使用反斜線 (\) 逸出。

工作流程現在每 5 分鐘執行一次。

如要進一步瞭解 gcloud scheduler 旗標,以及如何套用呼叫記錄,以便記錄工作流程執行期間的每個呼叫步驟,請參閱「排定工作流程」和 gcloud 參考資料。

執行工作並驗證結果

控制台

  1. 前往 Google Cloud 控制台的「Cloud Scheduler」頁面:

    前往 Cloud Scheduler

    如果沒有看到工作,可能需要重新整理頁面。

  2. 在名為 my-workflow-job 的工作,點選「立即執行」。

    「Result」值應會更新為「Success」。

  3. 前往 Google Cloud 控制台的「Workflows」頁面:

    前往「Workflows」頁面

  4. 在工作流程清單中,按一下「myFirstWorkflow」myFirstWorkflow,開啟詳細資料頁面。

    工作流程的執行狀態應為「Succeeded」(成功)。

  5. 按一下工作流程的執行 ID,開啟詳細資料頁面,並在「Output」(輸出) 窗格中查看工作流程結果。

    輸出內容應為「Hello, Sherlock Holmes!」。

gcloud

  1. 執行 Cloud Scheduler 工作,以便執行工作流程:

    gcloud scheduler jobs run my-workflow-job --location="us-east1"
    
  2. 擷取工作流程的執行 ID:

    gcloud workflows executions list myFirstWorkflow
    

    輸出內容應如下所示,執行 ID 會以粗體顯示:

    projects/316710615161/locations/us-east1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. 擷取工作流程的執行結果:

    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-east1/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 工作,可按照特定排程自動執行工作流程。

清除所用資源

完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

刪除專案的方法如下:

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除 Cloud Scheduler 工作

  1. 前往 Google Cloud 控制台的「Cloud Scheduler」頁面。

    前往 Cloud Scheduler

  2. 勾選工作旁的核取方塊。

  3. 按一下頁面頂端的「刪除」,然後確認刪除。

刪除 Workflows 工作流程

  1. 前往 Google Cloud 控制台的「Workflows」頁面。

    前往「Workflows」頁面

  2. 選取工作流程。

  3. 按一下頁面頂端的「Delete」(刪除),輸入工作流程名稱,然後確認刪除。

停用 App Engine 應用程式

停用 App Engine 應用程式後,應用程式會停止執行執行個體和提供要求,但會保留應用程式資料和設定。

  1. 前往 Google Cloud 控制台的「Application settings」(應用程式設定) 頁面。

    前往「應用程式設定」

  2. 點按「停用應用程式」。

  3. 依照系統的提示操作。

後續步驟