按计划执行作业

本页面介绍了如何使用 Cloud Scheduler 按时间表执行 Cloud Run 作业。

所需的角色

如需获得本页面中描述的操作所需的权限,请让管理员向您授予 Cloud Run 作业的 IAM 角色:

  • Cloud Scheduler Admin (roles/cloudscheduler.admin),或具有 cloudscheduler.jobs.create 权限的自定义角色
  • Cloud Run Invoker (roles/run.invoker)(用于使用 Google Cloud CLI 执行作业),或者 Cloud Run Developer (roles/run.developer)(用于使用 Google Cloud 控制台执行作业)

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 作业与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

准备工作

创建 Cloud Run 作业

将 Cloud Run 作业配置为按时间表执行

如需按计划执行 Cloud Run 作业,请执行以下操作:

控制台

  1. 转到 Cloud Run 作业

  2. 点击要按时间表执行的作业。

  3. 点击触发器标签页。

  4. 点击添加 Scheduler 触发器

  5. 如果您还没有为您的项目启用 Cloud Scheduler API,系统会提示您在最右侧面板中执行此操作:点击启用 API

  6. 填写 Cloud Scheduler 作业表单

    图片

  7. “定义时间表”(Define a schedule) 下:

    1. 为 Cloud Scheduler 作业命名。

    2. 为 Cloud Scheduler 作业选择一个区域。该区域不需要与 Cloud Run 作业使用的区域匹配。

    3. 使用 unix-cron 格式指定作业执行的频率,例如 0 12 * * *

    4. 选择您所在的时区。

  8. 点击继续

  9. 服务账号下拉菜单中,选择有权调用当前 Cloud Run 服务的服务账号。

  10. 点击创建以创建 Cloud Scheduler 作业,该作业会按指定的频率执行 Cloud Run 作业。

命令行

  1. 确保先创建 Cloud Run 作业

  2. 运行以下命令:

    gcloud scheduler jobs create http SCHEDULER_JOB_NAME \
      --location SCHEDULER_REGION \
      --schedule="SCHEDULE" \
      --uri="https://CLOUD_RUN_REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/PROJECT-ID/jobs/JOB-NAME:run" \
      --http-method POST \
      --oauth-service-account-email PROJECT-NUMBER-compute@developer.gserviceaccount.com

    替换

    • SCHEDULER_JOB_NAME 替换为您要为调度器作业指定的名称。
    • SCHEDULER_REGION 替换为 Cloud Scheduler 支持的区域,例如 europe-west2
    • CLOUD_RUN_REGION 替换为 Cloud Run 作业所在区域。 对于预览版,请使用 europe-west9
    • SCHEDULE 替换为所需的频率,例如 0 12 * * *
    • PROJECT-ID 替换为您的项目 ID。
    • PROJECT-NUMBER 替换为您的项目编号。
    • JOB-NAME 替换为您的 Cloud Run 作业。

Terraform

如需创建 Cloud Scheduler 作业来执行 Cloud Run 作业,请运行以下脚本:

resource "google_cloud_scheduler_job" "job" {
  provider         = google-beta
  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://${google_cloud_run_v2_job.default.location}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${data.google_project.project.number}/jobs/${google_cloud_run_v2_job.default.name}:run"

    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]
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

Cloud Scheduler 将按指定的频率执行 Cloud Run 作业。

后续步骤

使用此功能后,您可以执行以下操作: