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
相关产品推荐
相关产品推荐

