我正在从Terraform 0.11.4升级到0.12.2。我已经按照this guide整理了大部分内容,但似乎找不到以下列表表达式的解决方案。
variable "subnetIds" {
type = "list"
}
resource "aws_lb" "main" {
name = "myload-balancer"
subnets = ["${var.subnetIds}"] # <-- problem row
security_groups = ["${var.securityGroupIds}"]
}
错误消息是:
on main.tf line 10, in resource "aws_lb" "main":
10: subnets = ["${var.subnetIds}"]
Inappropriate value for attribute "subnets": element 0: string required.
如果我除去括号[]
,则会出现以下错误:
on main.tf line 10, in resource "aws_lb" "main":
10: subnets = "${var.subnetIds}"
Inappropriate value for attribute "subnets": incorrect set element type:
string required.
使用Terraform 0.12+为资源subnets
表示aws_lb
的正确方法是什么?
答案 0 :(得分:1)
尽管您没有显示var.securityGroupIds
和var.subnetIds
的典型值,但我将假定它们都是列表。在Terraform <0.12中,有时需要您为参数参数添加冗余数组表示法,并且不对变量提供一流的支持。在Terraform> = 0.12中,您不再应该放置冗余数组符号,并且确实具有对变量的一流支持。您可以通过以下方式更新代码以同时处理两者:
resource "aws_lb" "main" {
name = "myload-balancer"
subnets = var.subnetIds
security_groups = var.securityGroupIds
}
因此,多余的[]
被删除,不必要的字符串插值也被删除。
答案 1 :(得分:1)
发现了问题。 subnetIds
是从上一层(远程状态)的输出传递过来的。
subnetIds = ["${data.terraform_remote_state.eventsource.outputs.subnetIds}"]
基本上,这意味着subnetIds
变量成为列表列表。
更改为所有内容后
subnetIds = data.terraform_remote_state.eventsource.outputs.subnetIds