带有循环的 Terraform Azurerm 模块会破坏资源

问题描述 投票:0回答:1

我正在努力解决 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,现在它似乎正在以不同的顺序处理循环,并想要删除并重新创建订阅和队列。我不能让它这样做,因为死信队列和普通队列中都有一些消息正在等待处理。

我做错了什么吗?

azure terraform terraform-provider-azure
1个回答
0
投票

移动到地图而不是索引数组:

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
}

似乎可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.