带引号和不带引号的变量样式有什么区别?

for*_*dya 1 terraform

terraform 中的以下 2 种样式之间有什么区别,它们相同吗?

vpc_id      = aws_vpc.default.id
Run Code Online (Sandbox Code Playgroud)

对比

vpc_id      = "${aws_vpc.default.id}"
Run Code Online (Sandbox Code Playgroud)

the*_*dog 6

第一个是 HCL2 表达式,第二个是插值。

在 terraform v.0.12.x 之前使用了插值,这就是为什么您仍然可以在互联网上找到这种符号的原因。

如果您有 v0.12.x,请使用"${aws_vpc.default.ip}"符号并运行命令,terraform validate您将收到警告:

警告:不推荐使用仅插值表达式

[...]

Terraform 0.11 及更早版本要求通过插值语法提供所有非常量表达式,但现在不推荐使用此模式。要消除此警告,请删除此表达式开头的“${ 序列和此表达式的结尾的}”序列,仅保留内部表达式。

当模板包含多个插值序列或文字字符串和插值的混合时,模板插值语法仍用于从表达式构造字符串。此弃用仅适用于完全由单个插值序列组成的模板。

  • 这取决于...如果您有 terraform v0.11 或更低版本,则到处都需要插值。如果您有 v0.12,则只需要插值即可创建复杂的字符串,例如。如果没有插值,``"my-app-${var.my_id}-from-account-${var.account_id}"`` 将无法工作。对于简单参考,您不需要它。您可以通过运行“terraform version”来确定您的 terraform 版本,这将输出类似“Terraform v0.12.26”的内容 (3认同)