如何按大小写敏感规则筛选不包含指定Tag的EC2实例
问题
需要筛选出未配置指定大小写敏感Tag的EC2实例,要求同时验证Tag的Key和Value,需包含以下三类实例:
- 不存在Key为
app且Value为prod的Tag; - 存在Tag的Key为
App、Value为Prod(与目标Tag大小写不匹配); - 存在Tag的Key为
app但Value为production(值与目标不匹配)。
当前使用的AWS CLI命令仅检查Key是否存在,无法验证Value,只要实例有Key为app的Tag就会被排除,无法满足需求。期望输出所有不具备Key:app且Value:prod(大小写严格匹配)的实例名称。
原命令:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:environment,Values=deveu" | jq -r '.Reservations[].Instances[] | select(contains({Tags: [{Key: "app"}, {Value: "prod"}]}) | not).Tags | .[] | select(.Key == "Name").Value'
解决方案
使用以下命令可实现需求,核心是精确检查实例是否包含**同时匹配Key="app"且Value="prod"**的Tag(大小写严格敏感),然后筛选出不满足该条件的实例并输出其名称:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:environment,Values=deveu" | jq -r '.Reservations[].Instances[] | select(any(.Tags[]; .Key == "app" and .Value == "prod") | not) | .Tags[] | select(.Key == "Name") | .Value'
命令逻辑解析
any(.Tags[]; .Key == "app" and .Value == "prod"):遍历当前实例的所有Tag,判断是否存在任意一个Tag同时满足Key="app"和Value="prod"的精确匹配;select(...) | not:筛选出不满足上述条件的实例,也就是符合需求的三类目标实例;.Tags[] | select(.Key == "Name") | .Value:提取这些实例的NameTag值并以纯文本格式输出。
该命令会准确覆盖所有需要筛选的场景,确保只有完全匹配Key:app+Value:prod的实例会被排除,其余符合条件的实例名称都会被输出。
内容的提问来源于stack exchange,提问作者Muneeshpandi
相关产品推荐
相关产品推荐

