如何在Terraform中过滤可用IPv4≥20的AWS子网并解决引用报错?
问题修复方案
报错根因
data.aws_subnets数据源仅返回符合过滤条件的子网ID列表,存储在ids属性中,不能直接遍历数据源本身获取子网属性available_ip_address_count是单个子网的属性,需要通过data.aws_subnet数据源查询每个子网ID的详情后才能获取
修复后完整代码
# 拉取当前区域默认VPC data "aws_vpc" "main" { default = true } # 过滤默认VPC下可用的AZ默认子网 data "aws_subnets" "vpcsubnets" { filter { name = "vpc-id" values = [data.aws_vpc.main.id] } filter { name = "default-for-az" values = [true] } filter { name = "state" values = ["available"] } } # 批量查询每个子网的完整属性 data "aws_subnet" "filtered" { for_each = toset(data.aws_subnets.vpcsubnets.ids) id = each.value } # 输出可用IP数不少于20的子网ID列表 output "qualified_subnet_ids" { value = [ for subnet in data.aws_subnet.filtered : subnet.id if subnet.available_ip_address_count >= 20 ] } # 可选:输出符合条件的子网详情(ID、CIDR、可用IP数、可用区) output "qualified_subnet_details" { value = { for k, subnet in data.aws_subnet.filtered : k => { id = subnet.id cidr_block = subnet.cidr_block available_ip_count = subnet.available_ip_address_count availability_zone = subnet.availability_zone } if subnet.available_ip_address_count >= 20 } }
版本适配说明
上述代码完全兼容Terraform 1.0.8 + AWS Provider 3.62的版本组合,无需升级组件。
内容的提问来源于stack exchange,提问作者Darko Miletic
相关产品推荐
相关产品推荐

