依排程執行工作

本頁面說明如何使用 Cloud Scheduler 依排程執行 Cloud Run 工作。

必要的角色

如要取得本頁面所述作業所需的權限,請要求管理員授予您 Cloud Run 作業的 IAM 角色:

如要查看與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 作業會與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。

事前準備

  1. 如果尚未建立 Cloud Run 工作,請建立一個。
  2. 為專案啟用 Cloud Scheduler API:

    gcloud services enable cloudscheduler.googleapis.com
    

設定 Cloud Run 工作,依排程執行

您可以使用Google Cloud 控制台、gcloud CLI 或 Terraform,設定 Cloud Run 工作依排程執行:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run jobs 頁面:

    前往 Cloud Run jobs

  2. 按一下要依排程執行的工作。

  3. 按一下「觸發條件」分頁標籤。

  4. 按一下「新增排程器觸發條件」。

  5. 在 Cloud Scheduler 工作表單中,按照下列步驟操作:

    1. 在「Name」部分,輸入 Cloud Scheduler 工作的名稱。

    2. 在「Region」(區域),選取 Cloud Scheduler 工作的區域。 不必與 Cloud Run 作業使用的區域相符。

    3. 使用 unix-cron 格式指定工作執行頻率,例如 0 12 * * *

    4. 選取時區。

    5. 按一下「繼續」。

    6. 在「設定執行作業」部分,選取有權叫用目前 Cloud Run 作業的服務帳戶。

  6. 按一下「建立」,建立 Cloud Scheduler 工作,以指定頻率執行 Cloud Run 工作。

gcloud

執行下列指令:

  gcloud scheduler jobs create http SCHEDULER_JOB_NAME \
      --location SCHEDULER_REGION \
      --schedule="SCHEDULE" \
      --uri="https://run.googleapis.com/v2/projects/PROJECT_ID/locations/CLOUD_RUN_REGION/jobs/JOB:run" \
      --http-method POST \
      --oauth-service-account-email PROJECT_NUMBER-compute@developer.gserviceaccount.com

更改下列內容:

  • SCHEDULER_JOB_NAME:排程器工作的名稱。
  • SCHEDULER_REGION:Cloud Scheduler 支援的區域,例如 europe-west2。
  • SCHEDULE:必要頻率,例如 0 12 * * *。
  • PROJECT_ID:您的專案 ID。
  • CLOUD_RUN_REGION:Cloud Run 作業的區域。例如:europe-west1。
  • JOB:Cloud Run 工作名稱。
  • PROJECT_NUMBER:您的專案編號。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定的 google_cloud_run_v2_job 資源中新增下列項目:
resource "google_cloud_scheduler_job" "job" {
  name             = "schedule-job"
  description      = "test http job"
  schedule         = "*/8 * * * *"
  attempt_deadline = "320s"
  region           = "us-central1"
  project          = data.google_project.project.project_id

  retry_config {
    retry_count = 3
  }

  http_target {
    http_method = "POST"
    uri         = "https://run.googleapis.com/v2/projects/${data.google_project.project.project_id}/locations/${google_cloud_run_v2_job.default.location}/jobs/${google_cloud_run_v2_job.default.name}:run"
    body        = base64encode("{}")

    headers = {
      "Content-Type" = "application/json"
    }

    oauth_token {
      service_account_email = google_service_account.cloud_run_invoker_sa.email
    }
  }

  depends_on = [resource.google_project_service.cloudscheduler_api, resource.google_cloud_run_v2_job.default, resource.google_cloud_run_v2_job_iam_binding.binding]
}

Cloud Scheduler 會按照指定頻率執行 Cloud Run 工作。

在 VPC Service Controls perimeter 內排定作業時間

如果您的 Google Cloud 專案位於虛擬私有雲網路的 VPC Service Controls perimeter 內,Cloud Scheduler 與 VPC Service Controls 的整合功能支援以 Cloud Run 作業做為目標,並使用下列 URI 格式:

https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs/JOB:run

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID。
  • REGION:作業的 Google Cloud 區域。
  • JOB:Cloud Run 工作名稱。

如要進一步瞭解如何為 Cloud Run 設定 VPC Service Controls,請參閱「使用 VPC Service Controls (VPC SC)」。如要進一步瞭解如何搭配使用 Cloud Scheduler 與 VPC Service Controls,請參閱「使用 VPC Service Controls 保護 Cron 工作」。

後續步驟

使用這項功能後,你可以執行下列操作: