我的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 Console中的Launch Config中查看用户数据,Terraform似乎没有做任何努力用我的template_file定义中的变量值替换$$$${file_system_id)
。相反,它只是在用户数据部分中显示为字面$${file_system_id}
。
所以,问题是,如何获取我的EFS DNS名称(或我想要的任何其他值)来替换模板中的file_system_id变量?我错过了什么?
答案 0 :(得分:1)
如BMW所述,您无需转义美元符号。 ${file_system_id}
可以正常工作。
Terraform在模板中的变量替换将首先运行,因此您不必担心Bash在 变量被替换之前将如何解析它。