【问题标题】:Terraform template variables from other Terraform resources来自其他 Terraform 资源的 Terraform 模板变量
【发布时间】: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


【解决方案1】:

正如BMW 提到的,您不需要转义美元符号。 ${file_system_id} 工作正常。

Terraform 在模板中的变量替换将首先运行,因此您无需担心 Bash 将如何解析它,直到 变量被替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2022-10-13
    • 2020-12-08
    • 2021-03-13
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多