数据template_file的地形插值语法错误



在我的 lambda.tf 中,我有一个数据资源

data "template_file" "handler" {
template = "${file("${path.module}/templates/handler.js")}"
vars = {
ENDPOINT = "${var.domain}"
PASSWORD = "${var.password}"
}
}

但是 - 我遇到语法错误:

Error: failed to render : <template_file>:280,49-50: Extra characters after interpolation expression; Expected a closing brace to end the interpolation expression, but found extra characters.
on ../docs/lambda.tf line 1, in data "template_file" "handler":
1: data "template_file" "handler" {

Terraform 是否允许在插值中进行插值?如果是这样 - 任何关于指出错误位置的建议将不胜感激。

大地形态v0.12.9. 提供程序"aws"版本"~> 2.7"

不完全清楚你的模板文件是什么样子的,或者你想做什么,所以这里有几个不同的答案。

  1. 您可以使用双美元符号来转义插值:$${foo}将呈现为文字${foo}

  2. Terraform 不允许动态构造变量名称,因为它需要能够静态分析配置(即,无需计算任何表达式(,以确定表达式必须解析的顺序。

    Terraform 支持可用于实现此效果的地图数据结构。

variable "var1" {
default = "value1"
}
variable "var2" {
default = "value2"
}
locals {
var3 = "${var.var1}_${var.var2}"
values = {
"value1_value2" = "local1"
"value2_value3" = "local2"
"value3_value4" = "local3"
}
}
output "val_output" {
value = "${local.values[local.var3]}"
}

如果两者都不是您要查找的内容,则需要共享模板文件或复制错误的修改版本。

对于 Terraform0.11 及更早版本的用户,template_file数据源仍然存在,但由于您使用的是 Terraform 0.12 版本,因此我建议改用templatefile函数。因为它直接内置在 Terraform 中,所以它能够生成更好的错误消息。

要使用它,您可以将对data.template_file.handler.rendered的引用替换为对templatefile的直接调用。如果在多个位置使用该渲染结果,则可以将templatefile结果分配给本地值,并在多个位置引用该值。

templatefile("${path.module}/templates/handler.js", {
ENDPOINT = var.domain
PASSWORD = var.password
})

您看到的错误消息表明模板本身存在语法错误,但由于template_file是在单独的提供程序中实现的,因此它以无用的方式报告该语法错误,指向特定的源位置,但不包括相关的源代码片段。

如果您改用templatefile,Terraform 有望报告此语法错误本身并提供有关它的更好信息。

无论哪种方式,语法错误似乎都在handler.js文件的第 280 行第 49 列上,并且是由 Terraform 的模板引擎引起的,该引擎期望找到关闭${ ... }插值序列},但找到其他内容。如果更正该语法错误,则模板呈现应通过任一方法成功。

相关内容

  • 没有找到相关文章

最新更新