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

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

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

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

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

准备工作

  1. 安装 Google Cloud CLI。

  2. 配置 gcloud CLI 以使用您的联合身份。

    如需了解详情,请参阅使用联合身份登录 gcloud CLI

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

    gcloud init
  4. 创建或选择 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 项目名称。

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

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

  7. 启用 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。

后续步骤