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