使用 Pub/Sub 安排 Cloud Functions 函数

本教程介绍如何使用 Cloud Scheduler 和 Pub/Sub 触发 Cloud Functions 函数。Cloud Scheduler 的常见用例之一是能够安排 Cloud Function 的执行。 您将学习以下内容:

  • 创建一个订阅 Pub/Sub 主题的简单 Cloud Functions 函数。
  • 创建 Pub/Sub 主题以触发该函数。
  • 创建一个 Cloud Scheduler 作业,以调用 Pub/Sub 触发器。
  • 运行 Cloud Scheduler 作业。
  • 验证运行是否成功。

准备工作

本教程假设您已经完成了 Cloud Scheduler 快速入门。因此,您可以使用以下工具和资源:

  • 启用了结算功能的 Google Cloud 项目。

  • 项目上已启用的 Cloud Scheduler API 和 Pub/Sub API。您在学习本教程的过程需要启用 Cloud Functions API。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • Cloud Functions
  • Pub/Sub
  • Cloud Scheduler

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

创建带有触发器的 Cloud Function

  1. 在 Google Cloud 控制台中,转到 Cloud Functions 页面。

    转到 Cloud Functions

  2. 如果出现提示,请点击启用 API

  3. 点击创建函数。如果系统显示提示启用 API 的消息,请点击启用将其激活。

  4. 基本设置部分,选择第 2 代环境,输入函数名称,然后选择一个区域。

  5. 触发器部分中,选择需要身份验证。点击添加触发器,然后选择 Pub/Sub 触发器。此时会打开 Eventarc 触发器面板。如果系统提示您启用所需的 API,请点击启用

  6. Eventarc 触发器面板中,确保按如下方式填写前几个字段,或根据需要填写这些字段:

    • 触发器类型:Google 来源
    • 事件提供方:Cloud Pub/Sub
    • 事件google.cloud.pubsub.topic.v1.messagePublished
  7. 选择 Cloud Pub/Sub 主题字段中,选择一个现有主题,或点击创建新主题来创建新主题。您的函数会订阅此主题。记下主题的名称,稍后您将会用到。

    • 如果系统提示,请点击授予,以允许 Pub/Sub 服务创建触发函数所需的身份令牌。回想一下,您之前为函数选择了需要身份验证。Pub/Sub 会使用身份令牌进行所需的身份验证。
  8. 服务帐号字段中,点击创建新服务帐号

    1. 输入服务帐号的名称,然后点击创建。 Eventarc 会使用此服务帐号通过 Pub/Sub 服务的身份令牌调用函数。

    2. 向此服务帐号授予对项目的访问权限部分中,选择 Cloud Run Invoker 角色。这将授予该服务帐号调用第 2 代函数的权限。

    3. 点击完成

  9. 不要选中失败时重试。点击保存触发器

  10. 展开运行时、构建、连接和安全设置部分,然后选择运行时标签页。

  11. 运行时服务帐号下的服务帐号字段中,点击创建。服务帐号创建流程将在新标签页中打开。此服务帐号是 Cloud Function 在运行时拥有的身份。

    1. 输入服务帐号的名称。
    2. 点击创建并继续
    3. 点击完成

    您将被重定向到 Google Cloud 控制台的服务帐号页面。您可以关闭此标签页。

  12. 返回函数创建页面上的服务帐号字段,点击刷新,然后选择您刚刚创建的服务帐号。

  13. 点击下一步。如果系统提示您启用任何所需的 API,请点击启用

  14. 请勿修改默认语言和示例代码。该代码不使用任何云服务,也不需要启用其他权限。点击部署

创建 Cloud Scheduler 作业

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler 页面。

    转到 Cloud Scheduler

  2. 点击创建作业

  3. 如有必要,请选择要在其中运行作业的区域。

  4. 为您的作业命名,并视需要添加说明。

  5. 使用 unix-cron 格式指定作业的unix-cron

    30 16 * * 7
    

    如需了解详情,请参阅配置 Cron 作业时间表

  6. 选择您所在的时区。

  7. 点击继续

  8. 配置执行部分中,选择 Pub/Sub 作为目标类型。

  9. 选择您的主题名称。

  10. 添加要发送到目标的简短 Message 字符串。

  11. 点击创建

您现在已经有一项 Cron 作业,它会在星期日 16:30 向您的 Pub/Sub 主题发送消息。您的 Cloud Function 已订阅该主题。

运行作业

您现在可以运行您创建的作业了。

  1. 在 Google Cloud Console 中,前往 Cloud Scheduler 页面。

    转到 Cloud Scheduler

  2. 选择您创建的作业。

  3. 点击 Force run

    由于需要进行必要的配置,因此在项目创建的第一个作业首次调用时,可能需要几分钟时间才能运行完毕。

  4. 请注意 Status of last execution(上次执行状态)列。作业运行后,此列应显示“Success”(成功)。

恭喜!您刚刚使用控制台查看了运行向 Pub/Sub 发送一条消息的 cron 作业的结果。接下来,您将了解如何验证您的 Cloud Function 是否成功执行。

验证 Cloud Functions 中的结果

如需验证您的 Cron 作业是否成功触发了您的 Cloud Function,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Cloud Functions 页面。

    转到 Cloud Functions

  2. 点击函数名称。

  3. 函数详细信息页面将打开。调用次数/秒图表应显示对函数的首次调用。如需查看有关调用的详细信息,请点击日志

恭喜!你的函数已经得到执行。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请执行以下操作:

删除 Cloud Scheduler 作业

  1. 在 Google Cloud 控制台中,转到 Cloud Scheduler 页面。

    前往 Scheduler

  2. 选择作业旁边的复选框。

  3. 点击 删除并确认删除。

删除 Pub/Sub 主题

  1. 在 Google Cloud 控制台中,转到 Cloud Pub/Sub 页面。

    前往 Pub/Sub

  2. 选中您的主题旁边的复选框。

  3. 点击 删除并确认删除。

删除 Cloud Functions 函数

  1. 在 Google Cloud 控制台中,转到 Cloud Functions 页面。

    转到 Cloud Functions

  2. 选中函数旁边的复选框。

  3. 点击 删除并确认删除。

删除服务帐号

  1. 在 Google Cloud 控制台中,转到服务账号页面。

    转到“服务账号”

  2. 选中您创建的服务帐号旁边的复选框。

  3. 点击 删除并确认删除。

停用 API

如果您在按照本教程中的说明操作时启用了任何 API(例如 Eventarc、Cloud Functions 或 Pub/Sub API),请停用这些 API。停用 API 会影响对项目的 API 的访问权限,因此,如果项目中的其他资源使用了 API,请勿停用 API。

  1. 在 Google Cloud 控制台中,转到 API 和服务页面。

    进入“API 和服务”

  2. 点击您想要禁用的 API。系统随即会显示描述该 API 的页面。

  3. 点击 停用 API

删除项目

如果您为本教程创建了项目时需要执行此操作。

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.