使用 gcloud CLI 安排和运行 Cron 作业

本快速入门介绍了如何使用 gcloud CLI 通过 Cloud Scheduler 执行一些基本操作。

在本快速入门中,您将执行以下操作:

  1. 创建一个 Pub/Sub 主题,以设置为 Cloud Scheduler 作业目标。
  2. 使用 Cloud Scheduler 创建 Cron 作业,并为该作业配置周期性时间表。
  3. 运行作业。
  4. 验证作业是否已成功运行。

Cloud Scheduler 提供免费层级,运行此快速入门不应产生任何费用。要了解详情,请参阅价格

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  7. 验证是否已为您的 Google Cloud 项目启用结算功能

  8. 启用 Cloud Scheduler 和 Pub/Sub API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    gcloud services enable cloudscheduler.googleapis.com pubsub.googleapis.com
  9. 安装 Google Cloud CLI。

  10. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  12. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  13. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  14. 验证是否已为您的 Google Cloud 项目启用结算功能

  15. 启用 Cloud Scheduler 和 Pub/Sub API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    gcloud services enable cloudscheduler.googleapis.com pubsub.googleapis.com

所需的角色

如需获得完成本快速入门所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建 Pub/Sub 主题和订阅

Pub/Sub 主题是一种资源,发布者可以向其发送消息。要接收发布到主题的消息,您必须创建对该主题的订阅。

  1. 设置 Pub/Sub 主题以用作 Cron 作业的目标:

    gcloud pubsub topics create cron-topic
    

    这将创建一个名为 cron-topic 的主题。

  2. 如需接收消息并查看作业的结果,请创建 Pub/Sub 订阅:

    gcloud pubsub subscriptions create cron-sub --topic cron-topic
    

使用 Cloud Scheduler 创建 Cron 作业

使用 gcloud scheduler jobs create pubsub 命令设置工作单元(称为 cron 作业),该工作单元会按周期性时间表发送到 Pub/Sub 目标。时间表以基于 unix-cron 的格式指定。如需了解详情,请参阅 Cron 作业格式和时区

gcloud scheduler jobs create pubsub my-cron-job \
    --schedule="30 16 * * 7" \
    --topic=cron-topic \
    --location="us-east1" \
    --message-body="Hello world"

您已创建一项作业,该作业会在周日 16:30 向您的 Pub/Sub 主题发送“Hello world”消息。

您现在可以运行作业了。

运行作业

除了按照指定的时间表执行作业之外,您还可以强制作业立即运行:

gcloud scheduler jobs run my-cron-job --location="us-east1"

请注意,由于需要进行一些初始配置,因此在项目中创建的第一项作业可能需要几分钟时间才能运行完毕。

接下来,您可以验证 Pub/Sub 主题是否收到了消息。

验证 Pub/Sub 中的结果

验证您的 Pub/Sub 主题是否将收到来自作业的消息。

  1. 从订阅中拉取 Pub/Sub 消息:

    gcloud pubsub subscriptions pull cron-sub --limit 5
    

    如果一开始没有拉取到消息,请再次运行该命令。

  2. 查看运行作业的结果。输出应类似如下所示:

    DATA: Hello world!
    MESSAGE_ID: 5028933846601543
    ORDERING_KEY:
    ATTRIBUTES:
    DELIVERY_ATTEMPT:
    ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
    

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

    删除 Google Cloud 项目:

    gcloud projects delete PROJECT_ID

或者,您也可以删除为此快速入门创建的资源:

  1. 删除 Cron 作业。在 Cloud Shell 中或安装了 gcloud CLI 的机器上,运行以下命令:

    gcloud scheduler jobs delete MY_JOB \
        --location="LOCATION"
    

    替换以下内容:

    • MY_JOB:要删除的作业的名称。
    • LOCATION:作业的位置。默认情况下,如果存在关联的应用,则使用当前项目的 App Engine 应用的位置。
  2. 删除 Pub/Sub 主题。在 Cloud Shell 中或安装了 gcloud CLI 的机器上,运行以下命令:

    gcloud pubsub topics delete TOPIC_ID
    

    TOPIC_ID 替换为要删除的 Pub/Sub 主题的 ID。

  3. 删除 Pub/Sub 订阅。在 Cloud Shell 中或在安装了 gcloud CLI 的机器上,运行以下命令:

    gcloud pubsub subscriptions delete SUBSCRIPTION_ID
    

    SUBSCRIPTION_ID 替换为要删除的 Pub/Sub 订阅的 ID。

后续步骤