我正在努力解决 Terraform 和 Azurerm Provider 中的问题。
我有一个模块,它创建一个服务总线队列和对现有服务总线主题的订阅,并将所有消息转发到队列。
我在
locals.tf
文件中有订阅者和队列名称
event_topics = [
{
topic_name = "account.created.v1"
queue_name = "account_created_v1"
},
{
topic_name = "account.activated.v1"
queue_name = "account_activated_v1"
}
]
然后我就有了一个模块
module "subscriptions" {
source = "./modules/subscription"
for_each = { for idx, obj in local.event_topics : idx => obj }
topic_name = each.value.topic_name
queue_name = each.value.queue_name
subscription_name = "message-listener"
servicebus_id = var.hub_servicebus_id
}
模块主要部分:
data "azurerm_servicebus_topic" "sub" {
name = var.topic_name
namespace_id = var.servicebus_id
}
resource "azurerm_servicebus_subscription" "sub" {
name = var.subscription_name
topic_id = data.azurerm_servicebus_topic.sub.id
forward_to = azurerm_servicebus_queue.sub_queue.name
max_delivery_count = 5
}
resource "azurerm_servicebus_queue" "sub_queue" {
name = var.queue_name
namespace_id = var.servicebus_id
max_delivery_count = 5
}
这一切都运行良好......直到我重新运行 terraform,现在它似乎正在以不同的顺序处理循环,并想要删除并重新创建订阅和队列。我不能让它这样做,因为死信队列和普通队列中都有一些消息正在等待处理。
我做错了什么吗?
移动到地图而不是索引数组:
locals.tf
locals {
event_topics = {
"account_created" = {
topic_name = "account.created.v1"
queue_name = "account_created_v1"
},
"account_activated" = {
topic_name = "account.activated.v1"
queue_name = "account_activated_v1"
}
}
}
main.tf
module "subscriptions" {
source = "./modules/subscription"
for_each = local.event_topics
topic_name = each.value.topic_name
queue_name = each.value.queue_name
subscription_name = "message-listener"
servicebus_id = var.hub_servicebus_id
}
似乎可以解决问题