数据 template_file 的 Terraform 插值语法错误

jch*_*241 3 terraform terraform-provider-aws

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

data "template_file" "handler" {
    template = "${file("${path.module}/templates/handler.js")}"

    vars = {
        ENDPOINT = "${var.domain}"
        PASSWORD = "${var.password}"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是 - 我遇到语法错误:

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" {
Run Code Online (Sandbox Code Playgroud)

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

地形v0.12.9。提供商“aws”版本"~> 2.7"

Dud*_*001 5

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

  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]}"
}
Run Code Online (Sandbox Code Playgroud)

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