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

Terraform如何访问map类型变量元素?访问common_firewall_rules报无效索引错误

错误原因
  • 你定义的common_firewall_rules是map(键值对映射)类型,而非列表类型,不能使用[0]、[1]这类数字下标访问元素,需要通过你声明的键名(IP_Orange、OBS1、OBS2)取值。
  • 代码中多余的.value后缀不需要,map内的属性可以直接访问。
解决方法

方案1:半硬编码写3条规则

按键名访问对应规则值即可,写法如下:

# Orange规则
ipv4_firewall_rule {
    name        = var.common_firewall_rules["IP_Orange"].name
    range_start = var.common_firewall_rules["IP_Orange"].start_ip_address
    range_end   = var.common_firewall_rules["IP_Orange"].end_ip_address
}

# OBS1规则
ipv4_firewall_rule {
    name        = var.common_firewall_rules["OBS1"].name
    range_start = var.common_firewall_rules["OBS1"].start_ip_address
    range_end   = var.common_firewall_rules["OBS1"].end_ip_address
}

# OBS2规则
ipv4_firewall_rule {
    name        = var.common_firewall_rules["OBS2"].name
    range_start = var.common_firewall_rules["OBS2"].start_ip_address
    range_end   = var.common_firewall_rules["OBS2"].end_ip_address
}

方案2:动态块自动生成所有规则(更推荐)

不用硬编码每条规则,后续新增规则只需要修改tfvars文件即可,无需调整资源块代码:

resource "azurerm_analysis_services_server" "as" {
  # 其他原有配置保持不变
  dynamic "ipv4_firewall_rule" {
    for_each = var.common_firewall_rules
    content {
      name        = ipv4_firewall_rule.value.name
      range_start = ipv4_firewall_rule.value.start_ip_address
      range_end   = ipv4_firewall_rule.value.end_ip_address
    }
  }
}
注意事项

你当前tfvars中OBS1对应的name属性值写为了OBS2,属于笔误,会导致两条规则名重复,建议提前修正。

内容的提问来源于stack exchange,提问作者Harry Leboeuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:45:01