Terraform 版本0.12+;

Terraform 版本0.12+;,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我正在从terraform 0.11.4升级到0.12.2。我已经通过下面的方法解决了大部分问题,但是我似乎找不到下面列表表达式的解决方案 variable "subnetIds" { type = "list" } resource "aws_lb" "main" { name = "myload-balancer" subnets = ["${var.subnetIds}"] # <-- problem row security_

我正在从terraform 0.11.4升级到0.12.2。我已经通过下面的方法解决了大部分问题,但是我似乎找不到下面列表表达式的解决方案

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": incorrect set element type:
string required.

使用terraform 0.12+表示resource
aws_lb
子网的正确方法是什么?

虽然您没有显示
var.securityGroupId
var.subnetId
的典型值,但我假设它们都是列表。在Terraform<0.12中,有时需要为参数参数添加冗余数组符号,并且没有对变量的一流支持。在Terraform>=0.12中,您不应该再使用冗余数组表示法,并且您确实拥有对变量的一流支持。您可以通过以下方式更新代码以处理这两个问题:

resource "aws_lb" "main" {
  name            = "myload-balancer"
  subnets         = var.subnetIds
  security_groups = var.securityGroupIds
}

因此,冗余的
[]
被删除,不必要的字符串插值也被删除。

发现了问题。
子网
是从上一层(远程状态)的输出传递的

基本上这意味着
子网
变量变成了一个列表列表

更改为该选项后,一切正常:

subnetIds = data.terraform_remote_state.eventsource.outputs.subnetIds

谢谢,好吧,Subnetid和SecurityGroupId都是列表。当我删除括号(带引号或不带引号)时,输出作为问题中的第二条错误消息,即属性“子网”的值不正确:设置元素类型不正确:需要字符串。找到了答案,我从这个答案中获得了灵感,因此我将其标记为正确答案。
subnetIds = ["${data.terraform_remote_state.eventsource.outputs.subnetIds}"]
subnetIds = data.terraform_remote_state.eventsource.outputs.subnetIds