使用 Cloud Scheduler 排定工作流程

本頁面說明如何使用 Cloud Scheduler,按照特定時間表執行工作流程,例如每週一上午 9 點或每 15 分鐘。您可以在 Google Cloud 控制台或使用 Google Cloud CLI 設定排程。

事前準備

  1. 如果您尚未建立要排定的工作流程,請建立並部署工作流程。
  2. 啟用 Cloud Scheduler API (如果尚未啟用)。

    啟用 API 所需的角色

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

    啟用 API

  3. 或者,在終端機中輸入下列指令:
    gcloud services enable cloudscheduler.googleapis.com

排定工作流程

  1. 建立服務帳戶,讓 Cloud Scheduler 向 Workflows API 提出要求:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    將 SERVICE_ACCOUNT_NAME 替換為長度介於 6 到 30 個字元之間的名稱。可使用小寫英數字元和破折號。服務帳戶建立後,即無法變更名稱。

  2. 如要允許執行 Cloud Scheduler 指令的主體,以 Identity and Access Management (IAM) 服務帳戶的身分運作,請授予角色,允許主體模擬服務帳戶。

  3. 將 workflows.invoker 角色授予新的服務帳戶,讓帳戶有權觸發工作流程:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \
      --role roles/workflows.invoker

    更改下列內容:

    • PROJECT_ID: Google Cloud 專案的 ID。
    • SERVICE_ACCOUNT_NAME:先前建立的服務帳戶名稱。
  4. 建立 Cloud Scheduler 工作來觸發工作流程,並使用先前建立的服務帳戶進行驗證。

    請注意,如要套用通話記錄,必須透過Google Cloud 控制台的「Workflows」(工作流程) 頁面設定通話記錄。詳情請參閱下列步驟。

    控制台

    1. 如要排定工作流程,請前往 Google Cloud 控制台的「Workflows」(工作流程) 頁面:

      前往「Workflows」頁面

    2. 在「Workflows」頁面中,選取工作流程,前往其詳細資料頁面。

    3. 在「Workflow details」(工作流程詳細資料) 頁面中,按一下 「Edit」(編輯)。

    4. 在「Edit workflow」(編輯工作流程) 頁面中,依序選取「Add new trigger」(新增觸發條件) > 「Cloud Scheduler」。

      「Create a Scheduler job」(建立 Scheduler 工作) 窗格隨即開啟。

    5. 定義排程:

      1. 在「Name」(名稱) 欄位中,輸入 Cloud Scheduler 工作的名稱。不得與同一區域內其他工作的排程名稱重複。

      2. 在「Region」(區域) 清單中,選取適當的區域,例如 us-central1。

      3. 在「Frequency」(頻率) 欄位中,以 unix-cron 格式指定時間間隔。例如,如要排定每 5 分鐘執行一次工作流程,請輸入 */5 * * * *。

      4. 在「Timezone」(時區) 清單中,選取 Cloud Scheduler 應使用的時區,解讀您提供的排程。您可以依國家/地區搜尋。

    6. 按一下「繼續」。

    7. 設定執行作業:

      1. 在「Workflow's argument」(工作流程的引數) 欄位中,指定要在執行前傳遞至工作流程的任何執行階段引數。引數必須採用 JSON 格式。例如:{"firstName":"Sherlock", "lastName":"Holmes"}。如果工作流程不使用執行階段引數,請接受預設值 {},或將欄位留空。

      2. 在「Workflow's call log level」(工作流程的通話記錄層級) 清單中,選取要在執行工作流程時套用的通話記錄層級:

        • 未指定:未指定記錄層級。這是預設選項。 執行作業記錄檔層級的優先順序高於任何工作流程記錄檔層級,除非未指定執行作業記錄檔層級 (預設),在這種情況下,系統會套用工作流程記錄檔層級。
        • 僅限錯誤:記錄所有偵測到的例外狀況,或因例外狀況而停止呼叫時。
        • 所有呼叫:記錄對子工作流程或程式庫函式的所有呼叫及其結果。
        • 不記錄通話記錄:不記錄通話記錄。
      3. 在「Service account」(服務帳戶) 清單中,選取您先前建立的服務帳戶。

    8. 點選「建立」。

      請注意,如果您要更新現有工作流程,則「不」需要重新部署工作流程。

      Cloud Scheduler 工作現在會列在「Workflow details」(工作流程詳細資料) 頁面的「Triggers」(觸發條件) 分頁中。

    9. 如要更新或刪除工作,請編輯工作流程:

      1. 在「Workflow details」(工作流程詳細資料) 頁面中,按一下 「Edit」(編輯)。
      2. 在「Triggers」(觸發條件) 區段中,找出要更新或刪除的工作。
      3. 按一下 「Edit resource」(編輯資源) 或 「Delete resource」(刪除資源)。

    gcloud

    1. 開啟終端機,然後輸入下列指令:

      gcloud scheduler jobs create http JOB_NAME \
          --schedule="FREQUENCY" \
          --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
          --message-body="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
          --time-zone="TIME_ZONE" \
          --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_ID."

      更改下列內容:

      • JOB_NAME:Cloud Scheduler 工作的名稱。
      • FREQUENCY:使用 unix-cron 格式定義的時間間隔。例如,如要排定每 5 分鐘執行一次工作流程,請輸入 */5 * * * *。
      • PROJECT_ID: Google Cloud 專案的 ID。
      • REGION_NAME:工作流程所在的區域,例如 us-central1。
      • WORKFLOW_NAME:要排定執行時間的工作流程名稱。
      • DOUBLE_ESCAPED_JSON_STRING:您傳遞的任何引數的 JSON 編碼。引號字串內的雙引號會使用反斜線 (\) 逸出。例如:--message-body="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
      • TIME_ZONE:Cloud Scheduler 應使用的時區,用於解讀您提供的排程。例如:America/New_York。
      • SERVICE_ACCOUNT_NAME:先前建立的服務帳戶名稱。
    2. 如要列出專案中的所有工作,請執行下列操作:

      gcloud scheduler jobs list

    3. 如何刪除工作:

      gcloud scheduler jobs delete JOB_NAME

工作流程現在會按照您定義的頻率執行。

後續步驟