Terraform 0.11中concat函数解析错误排查求助
Terraform 0.11 concat语法报错的原因与修复方案
哎,这个问题我太有印象了——Terraform 0.11的HCL语法和0.12及以后的版本差异真的不小,你遇到的就是典型的版本专属语法兼容性问题!
问题出在哪?
你写的[""]这种列表字面量写法,是Terraform 0.12才引入的简洁语法,0.11根本不认识它!在0.11的HCL里,所有列表都必须通过list()函数来创建,直接用方括号写列表会被解析器当成语法错误,这就是你收到expected expression but found "["报错的核心原因。
另外补充一点:aws_lambda_function.lambda.*.arn本身已经是一个通过splat表达式生成的列表了,concat函数在0.11里要求所有参数都是合法的列表类型,而你用的[""]不符合0.11的列表定义规则,所以直接触发了解析错误。
怎么修复?
把你代码里的[""]替换成list("")就可以了,修改后的输出配置如下:
output "FUNCTION_ARN" { value = "${concat(aws_lambda_function.lambda.*.arn, list(""))}" }
这样修改后,list("")会被0.11正确识别为包含一个空字符串的列表,concat就能正常把lambda的ARN列表和这个空字符串列表合并起来,满足你的需求。
如果你的场景是担心没有lambda资源时输出为空,这个写法能保证输出始终是一个非空列表(哪怕只有一个空字符串);要是你想在没有lambda时输出空列表,那可以调整成concat(aws_lambda_function.lambda.*.arn, list())——不过得注意0.11里list()创建的是空列表,合并后结果就是原ARN列表本身。
内容的提问来源于stack exchange,提问作者Putnik
相关产品推荐
相关产品推荐

