Bash 来自其他地形资源的地形模板变量

Bash 来自其他地形资源的地形模板变量,bash,amazon-web-services,terraform,Bash,Amazon Web Services,Terraform,我有一个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\u system\u

我有一个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\u system\u id
变量:

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

Bash将把一个美元符号解释为Bash变量。据我所知,Terraform将双美元符号解释为Terraform变量。为了增加乐趣,模板中的美元符号需要用另一个美元符号转义——因此
文件系统\u id
前面有4个美元符号

在AWS控制台中查看我的启动配置中的用户数据时,Terraform似乎没有试图用我的模板文件定义中的变量值替换我的
$$$${file\u system\u id)
。相反,它只是在用户数据部分显示为字面上的
$${file\u system\u id}

因此,问题是,我如何获得我的EFS DNS名称(或我想要的任何其他值)来替换模板中的file_system_id变量?我遗漏了什么?

如前所述,您不需要避开美元符号。
${file_system_id}
工作正常


Terraform在模板中的变量替换将首先运行,因此在替换变量之前,您不必担心Bash将如何解析它。

那么使用
${file\u system\u id}有什么不对
直接在user_data.tpl中?嗯,这对我来说有些微不足道。我认为,因为它是一个转义字符,而且我发现需要使用双美元符号转义“$”以使Terraform变量替换生效,这将是一个类似的情况。事实上,看起来单美元符号在这里起作用。感受fr请提交您的评论作为答复,我将予以批准。