如何用aws_subnets数据源筛选无指定标签或标签不匹配的子网?
用单个aws_subnets数据源实现排除特定标签子网的需求
可以直接用单个aws_subnets数据源完成,借助AWS EC2的过滤语法支持否定匹配和逻辑OR,不用两次查询再加本地变量计算差集。
优化后的配置代码
data "aws_subnets" "include" { filter { name = "vpc-id" values = [var.vpc_id] } filter { name = "or" values = [ "tag-key:!Name", "tag:Name:!name-to-exclude-*" ] } } # 直接使用下面的变量即可得到目标子网列表 # local.include_subnets = data.aws_subnets.include.ids
代码说明
vpc-id过滤器:限定只在指定VPC内查询子网,和你原来的逻辑一致;or过滤器:实现逻辑或的筛选规则,同时覆盖两种场景:tag-key:!Name:匹配所有没有Name标签的子网;tag:Name:!name-to-exclude-*:匹配所有有Name标签但值不匹配name-to-exclude-*通配符模式的子网;
- 最终
data.aws_subnets.include.ids就是你需要的子网列表,省去了两次数据源查询和本地变量的差集计算,效率更高。
内容的提问来源于stack exchange,提问作者David Gard
相关产品推荐
相关产品推荐

