Azure子网委托Terraform代码报错修复及Postgres子网配置请求
Azure子网委托Terraform代码报错修复(Invalid index)
错误原因
- 强制为所有子网添加
delegation块,但subnet1、subnet2未配置委托,触发属性不存在的错误 - 属性读取路径错误:
actions属于delegation.service_delegation嵌套结构,而非直接在each.value根节点 delegation.name和service_delegation.name错误引用子网名称,应使用委托配置里的对应值
修复方案
使用Terraform动态块dynamic "delegation",仅为配置了委托的子网生成该块,同时修正属性引用路径:
resource "azurerm_subnet" "subnet" { for_each = var.subnets name = each.value.name address_prefixes = each.value.address_prefixes service_endpoints = lookup(each.value, "service_endpoints", []) virtual_network_name = azurerm_virtual_network.virtual_network.name resource_group_name = data.azurerm_resource_group.resource_group.name private_endpoint_network_policies_enabled = lookup(each.value, "private_endpoint_network_policies_enabled", false) # 仅当子网配置了delegation时才生成该块 dynamic "delegation" { for_each = each.value.delegation ? [each.value.delegation] : [] content { name = delegation.value.name service_delegation { name = delegation.value.service_delegation.name actions = delegation.value.service_delegation.actions } } } }
关键修正点
- 使用
lookup函数处理可选属性,为未配置的字段提供默认值(比如service_endpoints默认空列表,private_endpoint_network_policies_enabled默认false) dynamic "delegation"块通过条件判断,仅在存在委托配置时生成对应块- 正确引用委托嵌套属性,匹配变量定义里的层级结构
内容的提问来源于stack exchange,提问作者user23350878
相关产品推荐
相关产品推荐

