排定工作流程


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

目標

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

費用

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

如要根據預測用量估算費用,請使用 Pricing Calculator

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

事前準備

  1. 設定 Cloud Scheduler 環境,包括建立 App Engine 應用程式。
  2. Enable the Workflows API.

    Enable the 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.iam.gserviceaccount.com" \
          --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.iam.gserviceaccount.com" \
          --role "roles/logging.logWriter"

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

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

控制台

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

    前往「Workflows」頁面

  2. 點選「建立」

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

  4. 選取「us-central1」區域。

  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.yamlmyFirstWorkflow.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 \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    請將 yaml_OR_json 替換為 yamljson,視您先前建立的 Workflows 定義檔格式而定。

排定工作流程

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

控制台

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

    前往 Cloud Scheduler

  2. 按一下 [Create Job] (建立工作)

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

  4. 在「頻率」部分輸入:

    */5 * * * *
    這項作業每 5 分鐘執行一次。間隔是使用 unix-cron 格式定義。

  5. 針對「Timezone」(時區),選取國家/地區和時區。

    舉例來說,選取「美國」和「洛杉磯」或「太平洋夏令時間 (PDT)」

  6. 按一下「繼續」

  7. 在「目標類型」中選取「HTTP」

  8. 在「網址」中輸入:

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

  9. 將「HTTP method」保留預設的「POST」

  10. 新增下列兩個 HTTP 標頭

    • 名稱:Content-Type,值:application/octet-stream
    • 名稱:User-Agent,值:Google-Cloud-Scheduler
  11. 在「Body」中輸入:

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

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

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

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

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    您不必指定 Scope,因為系統會使用 https://www.googleapis.com/auth/cloud-platform 的預設值。

  14. 其餘設定均保留預設值,然後點按「建立」

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 參考資料

執行作業並驗證結果

控制台

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

    前往 Cloud Scheduler

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

  2. 針對名為 my-workflow-job 的工作,按一下「立即執行」

    「結果」值應會更新為「成功」

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

    前往「Workflows」頁面

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

    工作流程的執行狀態應為「已完成」

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

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

gcloud

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

    gcloud scheduler jobs run my-workflow-job
    
  2. 擷取工作流程的執行作業 ID:

    gcloud workflows executions list myFirstWorkflow
    

    輸出內容應類似以下內容,且執行 ID 會以粗體顯示:

    projects/316710615161/locations/us-central1/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-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 工作,可依特定排程自動執行工作流程。

清除所用資源

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

刪除專案

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

如要刪除專案:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

刪除 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」(應用程式設定) 頁面。

    前往「Application settings」(應用程式設定)

  2. 按一下「停用應用程式」

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

後續步驟