Terraform按标签筛选排除子网时出现语法错误求助
问题原因与解决方案
直接报错原因
Terraform配置语法不允许在参数位置使用!=这类比较运算符,values != ["abc"]属于非法写法——所有参数赋值必须用=,这就是触发语法报错的直接原因。
适配需求的正确写法
你的目标是筛选没有SubnetType标签的私有子网(公有子网带该标签),可以通过tag-key过滤器配合exclude参数实现:
data "aws_subnets" "private_subnets" { filter { name = "vpc-id" values = [var.i_vpc_id] } filter { name = "tag-key" values = ["SubnetType"] exclude = true # 排除所有带有SubnetType标签的子网,剩余即为无该标签的私有子网 } }
如果你的需求是排除SubnetType标签值为abc的子网(包含无该标签的子网),可以用以下写法:
data "aws_subnets" "private_subnets" { filter { name = "vpc-id" values = [var.i_vpc_id] } filter { name = "tag:SubnetType" values = ["abc"] exclude = true # 排除标签值为abc的子网 } }
补充说明
Terraform的aws_subnets数据源filter块支持exclude参数,设为true时会反向筛选,排除匹配该规则的资源。所有过滤器规则为逻辑与关系,即资源必须同时满足所有过滤条件(包括反向排除规则)。
内容的提问来源于stack exchange,提问作者mgn
相关产品推荐
相关产品推荐

