【发布时间】:2018-08-01 16:25:41
【问题描述】:
我有 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 似乎没有用我的 template_file 定义中的变量值替换我的 $$$${file_system_id)。相反,它只是在用户数据部分显示为字面意义上的$${file_system_id}。
所以,问题是,如何获取我的 EFS DNS 名称(或我想要的任何其他值)来替换模板中的 file_system_id 变量?我错过了什么?
【问题讨论】:
-
那么在 user_data.tpl 中直接使用
${file_system_id}有什么问题? -
嗯,这对我来说是一个不起眼的馅饼。我认为因为它是一个转义字符,并且因为我发现我需要用双美元符号转义“$”以使 Terraform 变量替换工作,所以这将是一个类似的情况。确实,看起来单美元符号在这里有效。随时提交您的评论作为答案,我会批准它。
标签: bash amazon-web-services terraform