使用 Cloud Scheduler 排定工作流程

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

事前準備

  1. 如果您還沒有要排程的工作流程,請建立並部署一個
  2. Enable the Cloud Scheduler API.

    Enable the 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.iam.gserviceaccount.com \
      --role roles/workflows.invoker

    更改下列內容:

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

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

    控制台

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

      前往「Workflows」頁面

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

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

    4. 在「編輯工作流程」頁面中,依序選取「新增觸發條件」>「Cloud Scheduler」

      「建立排程器工作」窗格隨即開啟。

    5. 定義時間表:

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

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

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

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

    6. 按一下「繼續」

    7. 設定執行作業:

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

      2. 在「工作流程的呼叫記錄檔層級」清單中,選取要在工作流程執行期間套用的呼叫記錄層級:

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

    8. 點選「建立」

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

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

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

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

    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.iam.gserviceaccount.com"

      更改下列內容:

      • 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

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

後續步驟