【问题标题】:Terraform lists in version 0.12+版本 0.12+ 中的 Terraform 列表
【发布时间】:2019-11-05 02:10:07
【问题描述】:

我正在从 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+ 为资源 aws_lb 表达 subnets 的正确方法是什么?

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    虽然您没有显示var.securityGroupIdsvar.subnetIds 的典型值,但我会假设它们都是列表。在 Terraform = 0.12 中,您不应再使用冗余数组表示法,并且您确实拥有对变量的一流支持。您可以通过以下方式更新您的代码以处理两者:

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

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

    【讨论】:

    • 谢谢,好吧,subnetIds 和 securityGroupIds 都是列表。当我删除带或不带引号的括号时,输出是问题中的第二条错误消息,即属性“子网”的值不合适:不正确的设置元素类型:需要字符串。
    • 找到了答案,我从这个答案中得到了灵感,所以我会把它标记为正确的。
    【解决方案2】:

    发现问题。 subnetIds 是从前一层(远程状态)的输出传递过来的。

    subnetIds = ["${data.terraform_remote_state.eventsource.outputs.subnetIds}"]
    

    基本上这意味着subnetIds 变量变成了一个列表列表。

    改成这个后一切正常:

    subnetIds = data.terraform_remote_state.eventsource.outputs.subnetIds
    

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 2021-03-21
      • 2020-04-01
      • 2019-10-22
      • 2021-08-22
      • 1970-01-01
      • 2020-06-30
      • 2019-06-20
      • 2020-06-23
      相关资源
      最近更新 更多