Amazon web services 地形-为什么可以';将一个值从一个变量分配给另一个变量
我试图将模块中的输出变量分配给局部变量,以便方便地使用局部变量。还有别的办法吗Amazon web services 地形-为什么可以';将一个值从一个变量分配给另一个变量,amazon-web-services,terraform,Amazon Web Services,Terraform,我试图将模块中的输出变量分配给局部变量,以便方便地使用局部变量。还有别的办法吗 variable "vpc_id" { default = "${module.vpc.vpc_id}" } 我得到的错误是: Error: Unsupported argument on main.tf line 22, in variable "subnetid_private": 22: default = "${module.vpc.subnet_private}" Variables
variable "vpc_id" {
default = "${module.vpc.vpc_id}"
}
我得到的错误是:
Error: Unsupported argument
on main.tf line 22, in variable "subnetid_private":
22: default = "${module.vpc.subnet_private}"
Variables may not be used here..
我花了很多时间在谷歌上搜索这个,但没有看到任何例子。我是不是遗漏了什么。这是任何语言的标准便捷功能。您可以用本地语言替换
在terraform 0.12中,您可以在变量中使用如下变量:
variable "var1" {
type = string
default = "this is var 1"
}
variable "var2" {
type = string
default = "$${variable.var1}"
}
这项研究的结果是:
$ terraform apply
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
当我第一次开始使用Terraform时,我也有同样的想法 问题是命名。Terraform变量块更像是其他语言中的最终或常量构造函数或方法参数 从文件中可以看出: 局部值为表达式指定名称,允许在模块内多次使用该表达式,而无需重复 将模块与传统编程语言中的函数进行比较:如果模块与函数参数相似,并且与函数返回值相似,则局部值与函数的局部临时符号相似 当你写作时:
variable "vpc_id" {
}
Terraform说“啊,你希望这个模块的呼叫者能够输入一个名为vpc_id的字符串”。绝对不是你想要的
对于您所遇到的这种情况,Terraform提供了:
locals {
vpc_id = module.vpc.vpc_id
}
这避开了var2中的插值。因此,应该输出字符串literal
${variable.var1}
。这是一个很好的解释+1。谢谢。我很高兴您发现它很有用@JBone:)
locals {
vpc_id = module.vpc.vpc_id
}