Terraform获取安全组的专用子网

时间:2019-09-05 15:25:42

标签: terraform terraform-provider-aws

我正在尝试在VPC中获得专用子网,我使用的是Terraform文档https://www.terraform.io/docs/providers/aws/d/subnet_ids.html中的示例,但这给了我错误。

这是我的代码(我注释掉了过滤器,因此这应该获取所有子网-我的vpc具有3个公共子网和3个私有子网)

id = data.aws_subnet_ids...

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. 行上出现错误

我得到6次以下错误,每个索引1次

"${data.aws_subnet_ids.example.ids[count.index]}"

我正在使用HCL2,但以防万一我对所有具有相同结果的语句恢复到先前的内插($ terraform --version Terraform v0.12.7 + provider.aws v2.25.0 + provider.template v2.1.2 )。

帮助?

谢谢

std::string firstname, lastname;
std::cout << "Please enter your full name:\n";
std::cin >> firstname >> lastname;
std::cout << "Your full name is  : " << firstname << ' ' << lastname;

1 个答案:

答案 0 :(得分:2)

Text数据的输出是集合而不是列表。您需要将其转换为列表。您可以使用aws_subnet_ids函数documented here来实现这一点。

您的代码可以更新如下:

tolist

然后可以在data "aws_subnet" "example" { count = length(data.aws_subnet_ids.example.ids) id = tolist(data.aws_subnet_ids.example.ids)[count.index] } 数据内安全地迭代子网列表。但是请注意以下几点:

  

将设置值传递到列表以将其转换为列表。由于set元素未排序,因此结果列表将具有未定义的顺序,该顺序在特定的Terraform运行中将保持一致。

这意味着,如果您要访问特定的子网,它们将在Terraform计划生成之间的aws_subnet列表中重新排序。