按计划运行服务

您可以使用 Cloud Scheduler 以安全的方式按计划触发 Cloud Run 服务。这类似于使用 Cron 作业。

可能的使用场景包括:

  • 按时间执行备份
  • 执行周期性管理任务,例如:
    • 重新生成站点地图
    • 删除旧数据、内容、配置或修订版本
    • 在数据系统之间同步内容
    • 处理每日电子邮件通知
    • 验证并报告对下游服务的访问权限
  • 生成文档,如帐单

此页面介绍如何在同一 Google Cloud 项目中以安全的方式将 Cloud Scheduler 与 Cloud Run 结合使用。

前期准备

在您使用的项目上启用 Cloud Scheduler API

创建和部署服务

如需创建和部署服务,请执行以下操作:

  1. 在您的服务中,实施要按计划运行的作业。

  2. 记下您的服务希望接收哪个请求类型的作业请求,例如 GETPOST。当您创建调用服务的预定作业时,您需要指定与此匹配的 HTTP 方法。

  3. 当您使用 Cloud Scheduler 部署要使用的服务时,请确保不允许未经身份验证的调用。

为 Cloud Scheduler 创建服务帐号

您需要创建一个服务帐号才能与 Cloud Scheduler 相关联,并授予该服务帐号调用 Cloud Run 服务的权限。您可以使用现有的服务帐号代表 Cloud Scheduler,也可以创建新的帐号。

如需创建服务帐号并向其授予调用 Cloud Run 服务的权限,请执行以下操作:

控制台

  1. 在 Cloud Console 中,转到服务帐号页面。

    转到“服务帐号”

  2. 选择一个项目。

  3. 输入 Cloud Console 中显示的服务帐号名称。

    Cloud Console 会根据此名称生成服务帐号 ID。如有必要,请修改 ID。此 ID 创建后便无法更改。

  4. 可选:输入服务帐号的说明。

  5. 点击创建

  6. 点击选择角色字段。

  7. 所有角色下,选择 Cloud Run > Cloud Run Invoker

  8. 点击完成

命令行

  1. 创建服务帐号:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
       --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"

    注意替换如下内容:

    • SERVICE_ACCOUNT_NAME 替换为 Google Cloud 项目中唯一的小写名称,例如 my-invoker-service-account-name
    • DISPLAYED_SERVICE_ACCOUNT_NAME 替换为您要在控制台等界面中为此服务帐号显示的名称,例如 My Invoker Service Account
  2. 对于 Cloud Run,请向您的服务帐号授予调用服务的权限:

    gcloud run services add-iam-policy-binding SERVICE \
       --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/run.invoker

    注意替换如下内容:

    • SERVICE 替换为您希望 Cloud Scheduler 调用的服务的名称。
    • SERVICE_ACCOUNT_NAME 替换为服务帐号的名称。
    • PROJECT_ID 替换为您的 Google Cloud 项目 ID。

创建 Cloud Scheduler 作业

您需要创建一个在指定时间调用您的服务的作业。您可以使用控制台或命令行:

如需创建作业,您可以使用控制台或 gcloud 命令行。点击相应标签页:

控制台

  1. 访问 Cloud Scheduler 控制台页面。

    转到 Cloud Scheduler

  2. 点击创建作业

    屏幕截图

  3. 为作业命名。

  4. 使用配置字符串指定作业运行的频率或作业间隔。例如,字符串 0 */3 * * * 每 3 小时运行一次作业。您在此处提供的字符串可以是任何与 Crontab 兼容的字符串。

    有关更多信息,请参阅配置作业时间表

  5. 从下拉列表中,选择要用于作业频率的时区。

  6. 指定 HTTP 作为目标:

    1. 指定服务的完全限定网址,例如 https://myservice-abcdef-uc.a.run.app。作业将向此网址发送请求。

    2. 指定 HTTP 方法:该方法必须符合先前部署的 Cloud Run 服务的预期。默认值为 POST

    3. 视需要指定要发送到目标的数据。当选择 POSTPUT HTTP 方法时,此数据将在请求正文中发送。

    4. 点击更多以显示身份验证设置。

    5. 从下拉菜单中选择添加 OIDC 令牌

    6. “服务帐号”字段中,复制您之前创建的服务帐号的电子邮件地址。

    7. 受众群体字段中,复制服务的完整网址。

  7. 点击创建以保存作业。

命令行

  1. 创建作业:

    gcloud scheduler jobs create http test-job --schedule "5 * * * *" \
       --http-method=HTTP-METHOD \
       --uri=SERVICE-URL \
       --oidc-service-account-email=SERVICE-ACCOUNT-EMAIL   \
       --oidc-token-audience=SERVICE-URL

    注意替换如下内容:

    • HTTP-METHOD 替换为 HTTP 方法,例如 GET、POST、PUT 等。
    • SERVICE-URL 替换为您的服务网址。
    • SERVICE-ACCOUNT-EMAIL 替换为您的服务帐号的电子邮件地址。

您的 Cloud Run 服务将由 Cloud Scheduler 作业请求以您定义的频率触发。您可以通过检查此服务的日志来确认和监控该行为。

后续步骤