Terraform为安全组获取私有子网
我试图在我的VPC中获取私有子网,我使用Terraform文档中的一个示例,但这给了我错误 这是我的代码(我注释掉了过滤器,所以应该得到所有子网-我的vpc有3个公共子网和3个私有子网) 我在Terraform为安全组获取私有子网,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我试图在我的VPC中获取私有子网,我使用Terraform文档中的一个示例,但这给了我错误 这是我的代码(我注释掉了过滤器,所以应该得到所有子网-我的vpc有3个公共子网和3个私有子网) 我在id=data.aws\u subnet\u ids…行中得到一个错误 我得到以下错误6次,每个索引1次 错误:索引无效 在modules/global/data.tf第20行的数据“aws_子网”示例中: 12:id=data.aws\u subnet\u ids.example.ids[count.in
id=data.aws\u subnet\u ids…
行中得到一个错误
我得到以下错误6次,每个索引1次
错误:索引无效
在modules/global/data.tf第20行的数据“aws_子网”示例中:
12:id=data.aws\u subnet\u ids.example.ids[count.index]
|----------------
|计数。索引是5
|data.aws_subnet_ids.example.ids是一组包含6个元素的字符串
此值没有任何索引。
我正在使用HCL2,但只是为了防止我对所有具有相同结果的语句恢复到以前的插值(“${data.aws\u subnet\u ids.example.ids[count.index]}”
)
帮忙
多谢各位
$terraform--版本
地形v0.12.7
+provider.aws v2.25.0
+provider.template v2.1.2
aws子网ID的输出是一个集合,而不是列表。您需要将其转换为列表。您可以使用tolist
功能实现这一点
您的代码可以更新如下:
data "aws_subnet" "example" {
count = length(data.aws_subnet_ids.example.ids)
id = tolist(data.aws_subnet_ids.example.ids)[count.index]
}
然后可以在aws\u子网
数据中安全地迭代子网列表。但请注意一点:
将设置值传递给tolist以将其转换为列表。由于集合元素没有顺序,因此结果列表将具有未定义的顺序,该顺序将在特定的Terraform运行中保持一致
这意味着,如果您正在访问特定的子网,它们将在
aws\u子网中重新排序。示例
在Terraform plan生成之间的列表。还可以将该设置值直接用作每个参数的,其优点是aws\u子网。示例
将是子网id到主题对象的映射,而不是按id按词法顺序列出子网对象。
data "aws_subnet" "example" {
count = length(data.aws_subnet_ids.example.ids)
id = tolist(data.aws_subnet_ids.example.ids)[count.index]
}