我在配置服务总线主题订阅时遇到以下错误。有人可以帮我解决这个问题吗?
模块代码:
resource "azurerm_servicebus_subscription" "subscription" {
for_each = { for sb in var.topic_list : "${sb["subscription"]}" => sb }
name = each.value["subscription"]
topic_id = azurerm_servicebus_topic.topics["${each.value.name}"].id
max_delivery_count = var.max_delivery_count
}
变量.tf:
variable "topic_list" {
type = list(object({
name = string
max_size_in_megabytes = string
}))
default = []
}
输入值:
topic_list:
- name: "topicair"
max_size_in_megabytes: "5120"
subscriptions:
- subscription: subscription1
- subscription: subscription2
- subscription: subscription3
- name: "topicwint"
max_size_in_megabytes: "81920"
subscriptions:
- subscription: subscriptiontop1
- subscription: subscriptiontop2
- subscription: subscriptiontop3
错误:
Error: Invalid index
│
│ on .terraform\modules\servicebus\modules\servicebus\main.tf line 103, in resource "azurerm_servicebus_subscription" "subscription":
│ 103: for_each = { for sb in var.topic_list : "${sb["subscription"]}" => sb }
│
│ The given key does not identify an element in this collection value.
╵
╷
│ Error: Invalid index
│
│ on .terraform\modules\servicebus\modules\servicebus\main.tf line 103, in resource "azurerm_servicebus_subscription" "subscription":
│ 103: for_each = { for sb in var.topic_list : "${sb["subscription"]}" => sb }
│
│ The given key does not identify an element in this collection value.
发生错误的原因是您的 Terraform 代码尝试访问
subscription
的每个项目中的 topic_list
键,而该键并不直接存在。相反,每个主题项都包含一个 subscriptions
列表。
因此,您需要调整
for_each
以正确迭代每个主题的嵌套 subscriptions
列表中的每个订阅。
我将通过以下方式更新您的 Terraform 代码来解决此问题:
resource "azurerm_servicebus_subscription" "subscription" {
for_each = {
for topic in var.topic_list :
for sub in topic.subscriptions :
"${topic.name}-${sub.subscription}" => {
topic_name = topic.name
subscription = sub.subscription
}
}
name = each.value.subscription
topic_id = azurerm_servicebus_topic.topics[each.value.topic_name].id
max_delivery_count = var.max_delivery_count
}
这些更改将为您的
topic_list
中相应主题下的每个订阅正确生成订阅资源。更新后运行terraform plan
以确保配置看起来不错。
确保
azurerm_servicebus_topic.topics
确实设置为按预期将主题名称映射到主题 ID。
希望这有帮助。