按计划运行服务

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

可能的使用场景包括:

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

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

准备工作

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

创建和部署服务

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

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

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

  3. 如果您使用的是 Cloud Run for Anthos on Google Cloud,则必须验证容器中的身份。请参见演示此内容的 IAP 示例代码

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

为 Cloud Scheduler 创建服务帐号

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

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

控制台

  1. 访问 Cloud Console 中的“创建服务帐号密钥”页面。

    “创建服务帐号”页面

  2. 从“服务帐号列表”中,选择新的服务帐号

  3. 在“服务帐号名称”字段中,输入您要为该服务帐号使用的名称。

  4. 点击创建

  5. 复制服务帐号电子邮件地址以在以下步骤中使用。

  6. 如果系统提示您指定权限,请点击继续

  7. 访问 Cloud Console 中的“Cloud Run 服务”页面。

    转到“服务”页面

  8. 在显示的列表中选择您的服务。

  9. 如有必要,请点击页面最右侧的显示信息面板/隐藏信息面板切换开关以显示信息。

  10. 找到“权限”标签页,然后在该标签页中点击添加成员

  11. 将您的服务帐号电子邮件地址粘贴到新成员字段中。

  12. 从“角色”下拉菜单中,选择 Cloud Run > Cloud Run Invoker

  13. 点击保存

命令行

  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. 点击创建以保存作业。

Gcloud

  1. 创建作业:

    gcloud beta 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 作业请求以您定义的频率触发。您可以通过检查此服务的日志来确认和监控该行为。

后续步骤