版本 0.12+ 中的 Terraform 列表
Terraform lists in version 0.12+
我正在从 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
的正确方法是什么?
虽然您没有显示 var.securityGroupIds
和 var.subnetIds
的典型值,但我会假设它们都是列表。在 Terraform < 0.12 中,您有时需要为参数参数添加冗余数组符号,并且没有首先 class 支持变量。在 Terraform >= 0.12 中,您不应再放置冗余数组符号,并且您确实首先 class 支持变量。您可以通过以下方式更新您的代码以处理这两个问题:
resource "aws_lb" "main" {
name = "myload-balancer"
subnets = var.subnetIds
security_groups = var.securityGroupIds
}
这样多余的[]
就去掉了,不需要的字符串插值也去掉了
找到问题了。 subnetIds
是从前一层(远程状态)的输出传递过来的。
subnetIds = ["${data.terraform_remote_state.eventsource.outputs.subnetIds}"]
基本上这意味着 subnetIds
变量变成了列表的列表。
改成这个之后一切正常:
subnetIds = data.terraform_remote_state.eventsource.outputs.subnetIds
我正在从 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
的正确方法是什么?
虽然您没有显示 var.securityGroupIds
和 var.subnetIds
的典型值,但我会假设它们都是列表。在 Terraform < 0.12 中,您有时需要为参数参数添加冗余数组符号,并且没有首先 class 支持变量。在 Terraform >= 0.12 中,您不应再放置冗余数组符号,并且您确实首先 class 支持变量。您可以通过以下方式更新您的代码以处理这两个问题:
resource "aws_lb" "main" {
name = "myload-balancer"
subnets = var.subnetIds
security_groups = var.securityGroupIds
}
这样多余的[]
就去掉了,不需要的字符串插值也去掉了
找到问题了。 subnetIds
是从前一层(远程状态)的输出传递过来的。
subnetIds = ["${data.terraform_remote_state.eventsource.outputs.subnetIds}"]
基本上这意味着 subnetIds
变量变成了列表的列表。
改成这个之后一切正常:
subnetIds = data.terraform_remote_state.eventsource.outputs.subnetIds