版本0.12 +

时间:2019-06-22 15:29:34

标签: terraform terraform-provider-aws

我正在从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的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

尽管您没有显示var.securityGroupIdsvar.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