【问题标题】:Can I escape curly bracket symbol in terraform?我可以在 terraform 中转义大括号符号吗?
【发布时间】:2021-06-01 14:18:15
【问题描述】:

我正在使用 terraform template_file 数据资源创建一个文件,当我应用堆栈时,该文件应写入动态创建的 EC2 实例。换句话说,我希望在新创建的 EC2 实例的主文件夹中创建此文件。但是,此文件包含大括号语法 ${},terraform 正在尝试对其进行插值。我怎样才能避开这些大括号?

作为背景,我使用cloud-config 语法来编写这些文件。

例如:

${username} 应该写入文件,在 terraform 中插值。

即使我使用双美元符号$$,terraform 仍然失败,因为它找不到变量:

... failed to render : <template_file>:105,18-26: Unknown variable; There is no variable named "username".

【问题讨论】:

  • 您能否在问题中包含几行模板文件脚本?谢谢
  • 使用不带大括号的 $username

标签: terraform


【解决方案1】:

Terraform 对花括号使用了相当独特的转义:

Sequence Replacement
$${ Literal ${, without beginning an interpolation sequence.
%%{ Literal %{, without beginning a template directive sequence.

参考文档:https://www.terraform.io/docs/language/expressions/strings.html

【讨论】:

  • 使用双美元符号来转义美元符号变量是相当普遍的。 OP 甚至提到它。
【解决方案2】:

仅供参考,我最终解决了这个问题,将模板写入另一个文件,然后使用 file 方法将其读入 terraform 堆栈:

data "template_file" "config" {
  template = "${file("./user_data.tpl")}"
}

【讨论】:

  • 这似乎不适用于NAME_TEMPLATE: %{{service_name}}.%{{environment_name}}
猜你喜欢
  • 2010-11-14
  • 2020-05-13
  • 2013-01-22
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2012-10-24
  • 2021-07-01
  • 1970-01-01
相关资源
最近更新 更多