如何通过AWS CLI的--query或--filters参数基于主机头筛选AWS负载均衡器的RuleArn
筛选ELBv2中特定主机头对应的RuleArn
当然可以实现!你不需要用到--filters参数(因为elbv2 describe-rules命令并不支持针对主机头的过滤器),但完全可以通过--query结合JMESPath表达式来精准筛选出目标RuleArn。
基础用法(精确匹配单个主机头)
假设你要找主机头为example.com的规则,直接用下面的命令:
aws elbv2 describe-rules --listener-arn arn:aws:elasticloadbalancing:eu-west-2:1234567890:listener/net/1234567890/1234567890/1234567890 \ --query 'Rules[?Conditions[?Field==`host-header` && Values[0]==`example.com`]].RuleArn' \ --output text
表达式拆解
让我解释下这个JMESPath的逻辑:
Rules[]:遍历返回的所有规则列表?Conditions[?Field==host-header&& Values[0]==example.com]:筛选出满足两个条件的规则:- 规则包含
host-header类型的条件 - 该条件的第一个值(
Values[0])正好是你指定的主机头
- 规则包含
.RuleArn:最后提取符合条件规则的ARN
进阶用法(匹配多个主机头中的一个)
如果你的规则里配置了多个主机头值(比如同时包含example.com和www.example.com),可以用contains()函数来匹配包含目标值的规则:
aws elbv2 describe-rules --listener-arn <你的Listener ARN> \ --query 'Rules[?Conditions[?Field==`host-header` && contains(Values, `example.com`)]].RuleArn' \ --output text
注意事项
- 主机头的匹配是精确匹配,要确保你输入的主机头和规则中配置的完全一致(包括大小写、前缀/后缀,比如
Example.com和example.com会被视为不同值) - 如果没有匹配到任何规则,命令会返回空结果,这时候可以先去掉
--query参数查看所有规则的完整结构,确认条件配置是否符合预期
内容的提问来源于stack exchange,提问作者Hammed
相关产品推荐
相关产品推荐

