You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:31:11