来自其他 Terraform 资源的 Terraform 模板变量

Terraform template variables from other Terraform resources

我有 Terraform,它使用模板化 bash 脚本来为 AWS 启动配置设置我的用户数据部分。

data "template_file" "user_data" {
  template = "${file("${path.module}/user-data.tpl")}"

  vars {
    file_system_id = "${aws_efs_mount_target.my_efs_alpha.dns_name}"
  }
}

然后需要在我的模板中使用 file_system_id 变量:

sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 $$$${file_system_id}:/ /mnt/efs

Bash 会将单个美元符号解释为 bash 变量。据我了解,Terraform 会将双美元符号解释为 Terraform 变量。为了增加乐趣,模板中的美元符号需要用另一个美元符号转义——因此 file_system_id.

前面有 4 个美元符号

在 AWS 控制台中查看我的 Launch Config 中的用户数据,Terraform 似乎没有做出任何努力将我的 $$$${file_system_id) 替换为我的 template_file 定义中的变量值。相反,它只是在用户数据部分显示为 $${file_system_id}.

所以,问题是,如何获取我的 EFS DNS 名称(或我想要的任何其他值)来替换模板中的 file_system_id 变量?我错过了什么?

BMW 所述,您不需要转义美元符号。 ${file_system_id} 工作正常。

Terraform 在模板中的变量替换将 运行 首先,因此您无需担心 Bash 将如何解析它,直到 变量之后被替换了。