如何在Terraform中循环引用多个ServiceBus主题的订阅?
在Terraform中批量引用ServiceBus主题的订阅
要实现为每个已存在的ServiceBus主题引用对应的订阅,核心是用Terraform的for_each让订阅数据块和主题数据块一一绑定,修改后的代码如下:
data "azurerm_servicebus_namespace" "sb" { name = "你的ServiceBus命名空间名称" resource_group_name = "你的资源组名称" } data "azurerm_servicebus_topic" "subscribe_topics" { # 将列表转为集合,适配for_each的要求 for_each = toset(local.subscribe_topics) name = each.value namespace_id = data.azurerm_servicebus_namespace.sb.id } data "azurerm_servicebus_subscription" "subscriptions" { # 遍历所有已获取的主题数据源 for_each = data.azurerm_servicebus_topic.subscribe_topics # 绑定当前遍历到的主题ID topic_id = each.value.id name = local.sb_subscription_name } locals { subscribe_topics = [ "topic1", "topic2", "topic3" ] sb_subscription_name = "xyz" }
关键说明:
- 用
toset(local.subscribe_topics)把列表转为集合:for_each对集合的支持更稳定,避免因列表索引变动导致不必要的资源重建 - 订阅数据块通过
for_each关联主题数据源:每个主题会自动生成对应的订阅引用 - 引用具体订阅时,可通过主题名称定位,比如
data.azurerm_servicebus_subscription.subscriptions["topic1"]就能拿到topic1对应的订阅信息
内容的提问来源于stack exchange,提问作者michasaucer
相关产品推荐
相关产品推荐

