如何用AWS CLI筛选含多条路由的路由表关联子网ID
解决AWS CLI查询多路由路由表关联子网ID的问题
需求
列出us-west-2区域中,所有包含多条路由(路由数量>1)的EC2路由表所关联的子网ID(SubnetId)。
错误命令与问题分析
尝试的错误查询命令:
aws ec2 describe-route-tables --region us-west-2 --query 'RouteTables[?Routes[].Size>1].Associations[*].SubnetId'
报错信息:
Bad value for --query RouteTables[?Routes[].Size > 1].Associations[*].SubnetId: invalid token: Parse error at column 29, token "1" (NUMBER), for expression: "RouteTables[?Routes[].Size > 1].Associations[*].SubnetId" ^
问题出在JMESPath语法错误:
- 错误使用
Routes[].Size获取路由数量,JMESPath中没有.Size属性,需用length()函数计算数组长度。 Routes[]会展开路由数组,此处无需展开,直接针对Routes数组本身计算长度即可。
正确查询命令
方式1:输出结构化JSON结果
aws ec2 describe-route-tables --region us-west-2 --query 'RouteTables[?length(Routes) > 1].Associations[?SubnetId].SubnetId'
方式2:输出纯文本格式(方便后续处理)
aws ec2 describe-route-tables --region us-west-2 --query 'RouteTables[?length(Routes) > 1].Associations[?SubnetId].SubnetId' --output text
命令说明
length(Routes) > 1:过滤出路由条目数量大于1的路由表;Associations[?SubnetId]:仅保留包含SubnetId的关联项(排除无子网关联的主路由表);.SubnetId:提取最终需要的子网ID字段。
用你提供的示例数据测试,上述命令会返回:subnet-029daed7c320c9cc0,符合需求。
内容的提问来源于stack exchange,提问作者user180574
相关产品推荐
相关产品推荐

