Terraform 属性“子网”的值不合适:元素 0:需要字符串

Eva*_*tis 2 terraform

我正在从 tf 11 升级到 tf 12。我遇到了terraform plan产生以下错误的问题:

Error: Incorrect attribute value type

   4:   subnets         = ["${var.alb_subnets}"]

Inappropriate value for attribute "subnets": element 0: string required.
Run Code Online (Sandbox Code Playgroud)

该错误的代码片段是:

resource aws_alb "alb" {
  name            = "ecs-${var.app_name}"
  internal        = "${var.internal}"
  subnets         = ["${var.alb_subnets}"]
  security_groups = ["${var.security_groups}"]
  count           = "${var.do_module}"
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我,我将不胜感激。

Mat*_*ard 6

subnets该错误消息表明资源的参数需要其类型中aws_alb的元素。该错误表明您为参数提供的值不是 类型。尽管问题中未提供变量的值或类型,但可以假设它是 a或给定变量名称是复数。假设它是 a ,当您在配置中将其指定为 a 时,您将其转换为 a :stringlistlist(string)alb_subnetslistmaplistlist(list(any))

["${var.alb_subnets}"]
Run Code Online (Sandbox Code Playgroud)

解构它,[]指定 a list,并且变量已经是 a list。问题中未提供变量的元素,但可以假设它们是在any不牺牲准确性的情况下提供的。

您可以删除外括号并使用 ,而不是通过list将变量包装在另一个list语法中来指定嵌套:[]

resource aws_alb "alb" {
  name            = "ecs-${var.app_name}"
  internal        = "${var.internal}"
  subnets         = var.alb_subnets
  security_groups = ["${var.security_groups}"]
  count           = "${var.do_module}"
}
Run Code Online (Sandbox Code Playgroud)

将是list(any)参数值的 a 。如果您的元素alb_subnets不是字符串,那么您还必须修复它以确保list(string)参数的正确类型。


Rah*_*Ops 6

改成 subnets = ["${var.alb_subnets}"] subnets = var.alb_subnets

它是 terraform v0.12 的更新

参考:https ://www.terraform.io/upgrade-guides/0-12.html#referring-to-list-variables