来自其他Terraform资源的Terraform模板变量

问题描述 投票:1回答:1

我有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变量?我错过了什么?

bash amazon-web-services terraform
1个回答
1
投票

正如BMW所提到的,你不需要逃避美元符号。 ${file_system_id}工作得很好。

Terraform在模板中的变量替换将首先运行,因此您无需担心Bash将在替换变量之后对其进行解析。

© www.soinside.com 2019 - 2024. All rights reserved.