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

Terraform 1.3.0版本map lookup函数失效问题求助

问题分析与解决方案

问题根源在于变量名中的连字符location-code在Terraform 1.x版本的HCL解析逻辑中会被误识别为减法运算(var.location - code),而非引用名为location-code的变量。Terraform 0.14.9的HCL解析规则更宽松,允许这种写法正确识别变量,但1.3.0版本的解析逻辑更严格,导致变量引用失效,最终lookup函数无法正确匹配键值。

修复方案

1. 规范变量命名(推荐)

将变量名中的连字符替换为下划线,避免解析歧义,这是Terraform官方推荐的标识符命名规范:

variable "location_code" {
  type = map(any)
  default = {
    eastus = "eus1"
    westus = "wus1"
  }
}
variable "location" {
  description = "Location where the resource need to create - eus1, wus1 etc"
  type        = string
  default     = "eastus"
}
locals {
  formatted_name = "${lookup(var.location_code, var.location, "default")}${var.appenv}${var.appname}"
}

2. 强制解析变量名(不推荐)

如果因特殊需求必须保留原变量名,可通过给变量名添加引号强制HCL解析为变量引用:

locals {
  formatted_name = "${lookup(var."location-code", var.location, "default")}${var.appenv}${var.appname}"
}

可选优化

Terraform 0.12+版本推荐直接使用map索引语法替代lookup函数(适用于能确保键一定存在的场景,无需默认值):

locals {
  formatted_name = "${var.location_code[var.location]}${var.appenv}${var.appname}"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:05:13