您可以使用 Cloud Scheduler 以安全的方式按计划触发 Cloud Run 服务。这类似于使用 Cron 作业。
可能的使用场景包括:
- 按时间执行备份
- 执行周期性管理任务,例如:
- 重新生成站点地图
- 删除旧数据、内容、配置或修订版本
- 在数据系统之间同步内容
- 处理每日电子邮件通知
- 验证并报告对下游服务的访问权限
- 生成文档,如账单
此页面介绍如何在同一 Google Cloud 项目中以安全的方式将 Cloud Scheduler 与 Cloud Run 搭配使用。
前期准备
在您使用的项目上启用 Cloud Scheduler API。
创建和部署服务
如需创建和部署服务,请执行以下操作:
在您的服务中,实施要按计划运行的作业。
记下您的服务希望接收哪个请求类型的作业请求,例如
GET或POST。当您创建调用服务的预定作业时,您需要指定与此匹配的 HTTP 方法。当您使用 Cloud Scheduler 部署要使用的服务时,请确保选择 **需要进行身份验证**。不允许公开访问。
以下示例展示了如何使用 Terraform 部署 Cloud Run 服务:
将 us-docker.pkg.dev/cloudrun/container/hello 替换为对您自己的容器映像的引用。
为 Cloud Scheduler 创建服务账号
您需要创建一个服务账号才能与 Cloud Scheduler 相关联,并授予该服务账号调用 Cloud Run 服务的权限。您可以使用现有的服务账号代表 Cloud Scheduler,也可以创建新的账号。
如需创建服务账号并向其授予调用 Cloud Run 服务的权限,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往服务账号页面。
选择一个项目。
输入要在 Google Cloud 控制台中显示的服务账号名称。
Google Cloud 控制台会根据此名称生成服务账号 ID。如有必要,请修改 ID。此 ID 创建后便无法更改。
可选:输入服务账号的说明。
点击创建并继续。
可选:点击选择角色字段。
选择 Cloud Run > Cloud Run Invoker。
点击完成。
命令行
创建服务账号:
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。
- 将 SERVICE_ACCOUNT_NAME 替换为 Google Cloud 项目中唯一的小写名称,例如
对于 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。
向服务账号授予对项目的访问权限,以便其能够完成对项目中资源的特定操作:
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
您需要进行如下替换
RESOURCE_ID:您的 Google Cloud 项目 ID。
PRINCIPAL:主账号(成员)的标识符,通常具有以下格式:PRINCIPAL_TYPE:ID,例如
user:my-user@example.com。如需查看 PRINCIPAL 可以采用的值的完整列表,请参阅政策绑定参考文档。
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
要使用 Terraform 创建服务账号,请执行以下命令:
创建 Cloud Scheduler 作业
您需要创建一个在指定时间调用您的服务的作业。您可以使用控制台或命令行:
如需创建作业,您可以使用控制台或 gcloud 命令行。点击相应标签页:
控制台
访问 Cloud Scheduler 控制台页面。
点击创建作业。

为作业命名。
使用配置字符串指定作业运行的频率或作业间隔。例如,字符串
0 */3 * * *每 3 小时运行一次作业。您在此处提供的字符串可以是任何与 Crontab 兼容的字符串。有关更多信息,请参阅配置作业时间表。
从下拉列表中,选择要用于作业频率的时区。
指定
HTTP作为目标:指定服务的完全限定网址,例如
https://myservice-abcdef-uc.a.run.app。作业将向此网址发送请求。指定 HTTP 方法:该方法必须符合先前部署的 Cloud Run 服务的预期。默认值为
POST。视需要指定要发送到目标的数据。当选择
POST或PUTHTTP 方法时,此数据将在请求正文中发送。点击更多以显示身份验证设置。
从下拉菜单中选择添加 OIDC 令牌。
在“服务账号”字段中,复制您之前创建的服务账号的电子邮件地址。
在受众群体字段中,复制服务的完整网址。
点击创建以保存作业。
命令行
您需要使用 OIDC 身份验证从 Cloud Scheduler 访问经过身份验证的 Cloud Run 服务。OIDC 身份验证包括服务账号和受众群体标志。如需了解详情,请参阅对 HTTP 目标使用身份验证。
若要创建 Cloud Scheduler 作业,请执行以下操作:
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 替换为您的服务账号的电子邮件地址。
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
要为 Cloud Run 服务创建 Cloud Scheduler 作业,请执行以下命令:
您的 Cloud Run 服务将由 Cloud Scheduler 作业请求以您定义的频率触发。您可以通过检查此服务的日志来确认和监控该行为。