Terraform动态块配置Azure应用网关报错求助
问题排查与修正
你的问题出在dynamic块内的元素引用方式错误。Terraform的dynamic块中,迭代元素的引用需要使用dynamic块的名称(默认迭代器),而非原变量名。
核心错误点
在你的backend_address_pool dynamic块中,你用了agw_configs.value来访问元素属性,但正确的引用应该是backend_address_pool.value——因为dynamic块的名称就是默认的迭代器变量名。
修正后的代码
resource "azurerm_application_gateway" "application_gateway" { name = local.application_gateway_name resource_group_name = var.resource_group_name location = var.location sku { name = var.sku.size tier = var.sku.tier capacity = var.sku.capacity } # 其他配置... dynamic "backend_address_pool" { for_each = local.agw_configs content { name = "${var.region}-${backend_address_pool.value.env}-${backend_address_pool.value.function}-beap" fqdns = [backend_address_pool.value.backend_pool_fqdn] } } }
额外注意事项
- 确认local变量定义:确保
agw_configs确实在locals块中正确定义,而非仅作为普通变量:
locals { agw_configs = [ { env = "dev" function = "events" backend_pool_fqdn = "dev.servicebus.windows.net" cookie_based_affinity = "Enabled" https_listener_hostname = "ingestiondev.co.uk" }, { env = "test" function = "events" backend_pool_fqdn = "test.servicebus.windows.net" cookie_based_affinity = "Enabled" https_listener_hostname = "ingestiontest.co.uk" } ] }
- 自定义迭代器(可选):如果想让代码更清晰,可以给dynamic块指定自定义迭代器名称:
dynamic "backend_address_pool" { for_each = local.agw_configs iterator = config # 自定义迭代器名 content { name = "${var.region}-${config.value.env}-${config.value.function}-beap" fqdns = [config.value.backend_pool_fqdn] } }
内容的提问来源于stack exchange,提问作者lordy10101
相关产品推荐
相关产品推荐

