我有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变量?我错过了什么?
正如BMW所提到的,你不需要逃避美元符号。 ${file_system_id}
工作得很好。
Terraform在模板中的变量替换将首先运行,因此您无需担心Bash将在替换变量之后对其进行解析。