You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform脚本在GCP中为单个Pub/Sub主题创建多个订阅

用Terraform批量创建Google Pub/Sub订阅

你可以通过Terraform的for_each或count特性批量生成多个订阅,以下是两种常用方案:

方案一:用for_each实现带自定义配置的批量订阅

适合需要给不同订阅设置不同属性(比如过滤规则、确认超时)的场景。

1. 定义订阅配置变量

先声明一个变量,存储所有订阅的名称和各自的自定义参数:

variable "pubsub_subscriptions" {
  type = map(object({
    filter                  = string
    ack_deadline_seconds    = number
    enable_message_ordering = bool
  }))
  default = {
    "example-1" = {
      filter                  = "attributes.KEY = \"value\""
      ack_deadline_seconds    = 20
      enable_message_ordering = true
    },
    "example-2" = {
      filter                  = "attributes.USER_TYPE = \"admin\""
      ack_deadline_seconds    = 30
      enable_message_ordering = false
    },
    "example-3" = {
      filter                  = "" # 无消息过滤
      ack_deadline_seconds    = 20
      enable_message_ordering = true
    }
  }
}

2. 修改资源块使用for_each

替换原有的单个订阅资源块,用for_each遍历上述变量生成多个订阅:

resource "google_pubsub_subscription" "subscriptions" {
  for_each = var.pubsub_subscriptions

  name                       = each.key
  topic                      = "{{topic-id}}" # 替换为你的主题ID
  labels = {
    application   = var.app_name
    business_unit = var.business_unit
    contact_email = var.contact_email
    name          = var.app_name
    owner         = var.owner
  }
  message_retention_duration = "1200s"
  retain_acked_messages      = true
  filter                     = each.value.filter
  ack_deadline_seconds       = each.value.ack_deadline_seconds

  retry_policy {
    minimum_backoff = "180s"
  }

  enable_message_ordering = each.value.enable_message_ordering
}
  • each.key会自动作为订阅名称,对应变量里的键(比如example-1)
  • each.value调用对应订阅的自定义配置,实现不同订阅的差异化设置

方案二:用count实现同配置批量订阅

如果所有订阅的配置完全一致,仅名称不同,可以用更简单的count:

1. 定义订阅名称列表

variable "subscription_names" {
  type    = list(string)
  default = ["example-1", "example-2", "example-3"]
}

2. 修改资源块使用count

resource "google_pubsub_subscription" "subscriptions" {
  count = length(var.subscription_names)

  name                       = var.subscription_names[count.index]
  topic                      = "{{topic-id}}"
  labels = {
    application   = var.app_name
    business_unit = var.business_unit
    contact_email = var.contact_email
    name          = var.app_name
    owner         = var.owner
  }
  message_retention_duration = "1200s"
  retain_acked_messages      = true
  filter                     = "attributes.KEY = \"value\""
  ack_deadline_seconds       = 20

  retry_policy {
    minimum_backoff = "180s"
  }

  enable_message_ordering = true
}
  • count.index会依次取列表的索引值,遍历生成对应名称的订阅

内容的提问来源于stack exchange,提问作者Koushik J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:27