Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 地形-为什么可以';将一个值从一个变量分配给另一个变量_Amazon Web Services_Terraform - Fatal编程技术网

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
}