本教程介绍了如何使用 Cloud Scheduler 并通过指定 Pub/Sub 主题来触发事件驱动型 Cloud Run 函数。如果函数应直接触发以响应 Google Cloud 项目中的事件(例如 Pub/Sub 主题中收到消息或 Cloud Storage 存储桶发生更改),可使用事件驱动型函数。
请注意,您还可以通过指定函数的 HTTP 端点来安排 HTTP 函数的运行时间。如果您需要函数具有网址端点并响应 HTTP 请求(例如针对 webhook),可使用 HTTP 函数。如需了解详情,请参阅 Cloud Run 函数的类型。
Cloud Scheduler 的常见用例之一是安排 Cloud Run 函数的执行。在此教程中,您将学习以下操作:
- 创建一个订阅 Pub/Sub 主题的简单 Cloud Run 函数。
- 创建一个 Cloud Scheduler 作业,用于将消息发布到 Pub/Sub 主题。
- 运行 Cloud Scheduler 作业。
- 验证 Cloud Run 函数是否已由 Cloud Scheduler 作业触发。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Cloud Functions, Cloud Run Admin, Cloud Scheduler, Eventarc APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Cloud Run > Cloud Run Invoker role to the service account.
To grant the role, find the Select a role list, then select Cloud Run > Cloud Run Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Cloud Functions, Cloud Run Admin, Cloud Scheduler, Eventarc APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Cloud Run > Cloud Run Invoker role to the service account.
To grant the role, find the Select a role list, then select Cloud Run > Cloud Run Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
- 默认情况下,Cloud Run 函数使用自动创建的默认 Compute Engine 服务账号作为其运行时服务账号。您可以使用此服务账号来试用本教程。不过,根据您的组织政策配置,默认服务账号可能不会自动获得项目的 Editor 角色。如果是这种情况,您必须向该服务账号授予以下角色:
- Artifact Registry Writer (
roles/artifactregistry.writer
) - Logs Writer (
roles/logging.logWriter
) - Storage Object Viewer (
roles/storage.objectViewer
)
- Artifact Registry Writer (
请注意,您必须授予 Cloud Run Invoker 角色,因为在 Cloud Run functions(第 2 代)中,您可以通过管理底层 Cloud Run 服务来获取调用权限。
创建事件驱动型 Cloud Run 函数
创建一个事件驱动型函数,该函数会直接触发以响应 Google Cloud 项目中的事件;在本例中,该事件是指发布到 Pub/Sub 主题的消息。
在 Google Cloud 控制台中,前往 Cloud Run 函数页面。
点击
创建函数。在基本信息部分中,执行以下操作:
- 在环境列表中,选择第 2 代。
- 为函数输入一个名称。
- 在区域列表中,选择一个区域。
在触发器部分中,执行以下操作:
- 在触发器类型列表中,选择 Cloud Pub/Sub。
- 在 Cloud Pub/Sub 主题列表中,选择现有主题;如需创建新主题,请点击创建主题。记下主题的名称,因为您会在后续步骤中用到它。
点击更多选项。
系统会打开 Eventarc 触发器面板。
在 Eventarc 触发器面板中,执行以下操作:
- 如果系统提示您允许 Pub/Sub 服务创建调用函数所需的身份令牌,请点击授予。
- 在服务账号列表中,选择您之前创建的服务账号。
- 接受其他默认设置。
点击保存触发器。
Eventarc 触发器面板随即会关闭。
接受其他默认值,然后点击下一步。
请勿修改默认运行时语言和示例代码。该代码不使用任何云服务,也不需要启用其他权限。点击部署。
创建 Cloud Scheduler 作业
创建具有 Pub/Sub 目标的 Cloud Scheduler 作业。
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面。
点击
创建作业。输入作业的名称。
在区域列表中,选择一个区域。
使用 unix-cron 格式指定作业的频率:
30 16 * * 7
如需了解详情,请参阅 Cron 作业格式和时区。
在时区列表中,选择一个时区。
点击继续。
在目标类型列表中,选择 Pub/Sub。
选择您之前创建的 Pub/Sub 主题。
在消息正文字段中,输入一条要发送到您的 Pub/Sub 目标主题的字符串,例如:“Hello world!”
点击创建。
您已创建了一个 cron 作业,该作业会在周日 16:30 向您的 Pub/Sub 主题发送一条消息。您的 Cloud Run 函数已订阅该主题。
运行 Cloud Scheduler 作业
现在,您可以运行创建的作业了。
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面。
选中您创建的作业对应的复选框,然后点击强制运行。
首次调用时,在项目中创建的第一个作业可能需要几分钟才能完成配置并运行。
作业运行后,上次执行的状态应显示为
Success
。
验证 Cloud Run functions 中的结果
您可以验证 Cloud Run 函数是否已成功被 cron 作业触发并执行。
在 Google Cloud 控制台中,前往 Cloud Run 函数页面。
点击函数名称。
函数详细信息页面随即打开,每秒调用次数图表会显示函数的首次调用。
点击日志标签页。
您应该会看到类似
Hello, YOUR_STRING!
的日志条目
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除教程资源
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面。
选择作业旁边的复选框。
点击
删除并确认您要删除此存储分区。在 Google Cloud 控制台中,前往 Pub/Sub 页面。
选中主题旁边的复选框。
点击
删除并确认您要删除此存储分区。在 Google Cloud 控制台中,前往 Cloud Run 函数页面。
选中函数旁边的复选框。
点击
删除并确认您要删除此存储分区。在 Google Cloud 控制台中,前往服务账号页面。
选中您创建的服务账号旁边的复选框。
点击
删除并确认您要删除此存储分区。