Terraform 为安全组获取私有子网
Terraform getting private subnets for a security group
我正在尝试在我的 VPC 中获取私有子网,我使用的是 Terraform 文档中的示例 https://www.terraform.io/docs/providers/aws/d/subnet_ids.html 但这给我带来了错误。
这是我的代码(我注释掉了过滤器,所以这应该得到所有子网 - 我的 vpc 有 3 个 public 和 3 个私有子网)
data "aws_subnet_ids" "example" {
vpc_id = var.vpc_id
// filter {
// name = "tag:Tier"
// values = ["private"]
// }
}
data "aws_subnet" "example" {
count = length(data.aws_subnet_ids.example.ids)
id = data.aws_subnet_ids.example.ids[count.index]
}
我在 id = data.aws_subnet_ids...
行
上收到错误
我得到以下错误 6 次,每个索引 1 次
Error: Invalid index
on modules/global/data.tf line 20, in data "aws_subnet" "example":
12: id = data.aws_subnet_ids.example.ids[count.index]
|----------------
| count.index is 5
| data.aws_subnet_ids.example.ids is set of string with 6 elements
This value does not have any indices.
我正在使用 HCL2,但以防万一我对具有相同结果的所有语句恢复到之前的插值 ("${data.aws_subnet_ids.example.ids[count.index]}"
)。
帮助?
谢谢
$ terraform --version
Terraform v0.12.7
+ provider.aws v2.25.0
+ provider.template v2.1.2
aws_subnet_ids
数据的输出是一个集合而不是列表。您需要将其转换为列表。您可以使用 tolist
函数 documented here.
实现此目的
您的代码可以更新如下:
data "aws_subnet" "example" {
count = length(data.aws_subnet_ids.example.ids)
id = tolist(data.aws_subnet_ids.example.ids)[count.index]
}
然后可以在您的 aws_subnet
数据中安全地迭代子网列表。但是请注意:
Pass a set value to tolist to convert it to a list. Since set elements are not ordered, the resulting list will have an undefined order that will be consistent within a particular run of Terraform.
这意味着如果您要访问特定子网,它们将在 Terraform 计划生成之间的 aws_subnet.example
列表中重新排序。
我正在尝试在我的 VPC 中获取私有子网,我使用的是 Terraform 文档中的示例 https://www.terraform.io/docs/providers/aws/d/subnet_ids.html 但这给我带来了错误。
这是我的代码(我注释掉了过滤器,所以这应该得到所有子网 - 我的 vpc 有 3 个 public 和 3 个私有子网)
data "aws_subnet_ids" "example" {
vpc_id = var.vpc_id
// filter {
// name = "tag:Tier"
// values = ["private"]
// }
}
data "aws_subnet" "example" {
count = length(data.aws_subnet_ids.example.ids)
id = data.aws_subnet_ids.example.ids[count.index]
}
我在 id = data.aws_subnet_ids...
行
我得到以下错误 6 次,每个索引 1 次
Error: Invalid index
on modules/global/data.tf line 20, in data "aws_subnet" "example":
12: id = data.aws_subnet_ids.example.ids[count.index]
|----------------
| count.index is 5
| data.aws_subnet_ids.example.ids is set of string with 6 elements
This value does not have any indices.
我正在使用 HCL2,但以防万一我对具有相同结果的所有语句恢复到之前的插值 ("${data.aws_subnet_ids.example.ids[count.index]}"
)。
帮助?
谢谢
$ terraform --version
Terraform v0.12.7
+ provider.aws v2.25.0
+ provider.template v2.1.2
aws_subnet_ids
数据的输出是一个集合而不是列表。您需要将其转换为列表。您可以使用 tolist
函数 documented here.
您的代码可以更新如下:
data "aws_subnet" "example" {
count = length(data.aws_subnet_ids.example.ids)
id = tolist(data.aws_subnet_ids.example.ids)[count.index]
}
然后可以在您的 aws_subnet
数据中安全地迭代子网列表。但是请注意:
Pass a set value to tolist to convert it to a list. Since set elements are not ordered, the resulting list will have an undefined order that will be consistent within a particular run of Terraform.
这意味着如果您要访问特定子网,它们将在 Terraform 计划生成之间的 aws_subnet.example
列表中重新排序。