使用 Terraform 安排和运行 Cron 作业
本快速入门介绍了如何使用 Terraform 创建 Cloud Scheduler Cron 作业。Terraform 是一种基础架构即代码 (IaC) 工具,可让您使用代码以可预测的方式创建、更改和改进您的云基础架构。 您可以详细了解如何 使用 Terraform 在 上预配基础架构 Google Cloud。
Cloud Scheduler 提供免费层级,运行此快速入门不应产生任何费用。如需了解详情,请参阅 价格。
在本快速入门中,您将执行以下操作:
- 使用 Terraform 为 Cloud Scheduler 创建 Cron 作业。
- 为作业设置周期性计划。
- 将 Pub/Sub 主题指定为作业目标。
- 运行该作业。
- 验证作业是否已成功运行。
准备工作
您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅 在受限的环境中开发应用 Google Cloud 。
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 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 项目名称。
-
如果您要使用现有项目来完成本指南, 请验证您是否拥有完成本指南所需的权限。如果您创建了新项目, 则您已拥有所需的权限。
启用 Resource Manager 和 Service Usage API:
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。gcloud services enable cloudresourcemanager.googleapis.com
serviceusage.googleapis.com - Cloud Shell 已集成 Terraform。如果您需要安装 Terraform,请参阅 HashiCorp Terraform 文档。
所需的角色
如需获得完成本快速入门所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
- Cloud Scheduler Admin (
roles/cloudscheduler.admin) - Pub/Sub Editor (
roles/pubsub.editor)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
创建 Terraform 配置文件
如需将 Terraform 与 Cloud Scheduler 搭配使用,您需要创建一个配置文件来描述基础架构并创建执行计划。 然后,您将配置文件应用于平台或服务,以执行预配基础架构的操作。
如需创建名为 main.tf 的 Terraform 配置文件,请完成以下步骤:
打开终端并创建目录:
mkdir terraform转到
terraform目录:cd terraform
向该目录添加一个新文件
main.tf:nano main.tf将以下 Terraform 提供方添加到 Google Cloud
main.tf文件:启用 Cloud Scheduler 和 Pub/Sub API:
创建一个 Pub/Sub 主题作为发布者可以向其发送消息的资源:
这将创建一个名为
pubsub_topic的主题。创建一个订阅以接收发布到 Pub/Sub 主题的消息:
使用
google_cloud_scheduler_job资源创建 Cron 作业:示例中使用了以下参数:
name:作业的名称。description:作业的说明。schedule:作业的频率,使用基于 unix-cron 的格式。在此示例中,
30 16 * * 7表示作业将在周日 16:30 运行。如需了解详情,请参阅 Cron 作业格式和时区。region:作业所在的区域。pubsub_target:Pub/Sub 主题目标,包括主题的完整资源名称 (topic_name),当作业运行时,消息载荷 (data) 会发布到该主题。
支持其他参数。如需了解详情,请参阅 Terraform 注册表参数参考。
如需查看将 Terraform 与 Cloud Scheduler 搭配使用的另一个示例,请参阅 按计划运行 Cloud Run 服务。
创建 Cron 作业
部署 Terraform 资源以创建 Cron 作业。
打开终端,然后在
terraform目录中初始化 Terraform:terraform init检查您向 Terraform 建议的更改是否与预期方案匹配:
terraform plan您可以忽略有关不使用
-out选项的备注。创建 Cron 作业:
terraform apply在输入值 提示符处,输入
yes以继续创建资源。确认已创建作业:
gcloud scheduler jobs describe test-job --location=us-east1
输出应类似如下所示:
description: test job lastAttemptTime: '2024-04-04T13:56:00.669530Z' name: projects/PROJECT_ID/locations/us-east1/jobs/test-job pubsubTarget: data: dGVzdA== topicName: projects/PROJECT_ID/topics/pubsub_topic schedule: '30 16 * * 7' scheduleTime: '2024-04-04T13:58:00.737907Z' state: ENABLED
您已创建一个作业,该作业会在周日 16:30 向 Pub/Sub 主题发送一条消息。您现在可以运行该作业。
运行作业
除了按照指定的时间表执行之外,您还可以通过运行以下命令强制作业立即执行。
gcloud scheduler jobs run test-job --location=us-east1
请注意,由于需要进行一些初始配置,因此在项目中创建的第一项作业可能需要几分钟时间才能运行完毕。
验证结果
验证您的 Pub/Sub 主题是否将收到来自作业的消息。
从订阅中拉取 Pub/Sub 消息:
gcloud pubsub subscriptions pull pubsub_subscription --limit 5如果一开始没有拉取到消息,请再次运行该命令。
查看运行作业的结果。输出应类似如下所示:
DATA: Hello world! MESSAGE_ID: 5028933846601543 ORDERING_KEY: ATTRIBUTES: DELIVERY_ATTEMPT: ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
清理
为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。
- 删除您的 Google Cloud 项目后,系统即会停止对该项目中使用的所有
资源计费。请注意,默认情况下,Cloud Shell 主目录中的任何文件(例如任何 Terraform 文件)都会在会话之间保持不变。
删除项目: Google Cloud
gcloud projects delete PROJECT_ID
或者,您可以删除使用 Terraform 创建的所有资源。
terraform destroy命令会终止 Terraform 状态中指定的所有资源。它不会销毁 当前 Terraform 项目未管理的资源。您的 Terraform 配置文件不会被销毁。如需了解详情,请参阅 销毁基础架构。terraform destroy