根据文档AWS CLI command 支持 JMESPath query 利用参数 --query
比如要按特定字段的值筛选结果,请使用 JMESPath "?" 运算符。以下示例查询仅输出 us-west-2a 可用区中的 卷:
$ aws ec2 describe-volumes --query 'Volumes[?AvailabilityZone==`us-west-2a`]'
参考了 下http:// jmespath.org/specification.html。里面有许多可以用的函数来实现各种需求,个人感觉类似于XPATH解析xml一样,灵活易用。
不过在使用过程成中遇到了环境问题比如下面的两条命令可以在linux下正常执行的,但是在windows下会执行失败 报错
aws ec2 describe-instances --query 'Reservations[].Instances[].{InstanceId: InstanceId, Key: Tags[?Key==`Name`]}[]|[?Key[?contains(Value,`test`)]].InstanceId' aws ec2 describe-instances --query 'Reservations[].Instances[?KeyName==`mykey`][]|[?State.Name==`running`].[InstanceId, Tags[?Key==`Name`].Value|[0]]'
--shell获取最新的快照SnapshotId aws rds describe-db-snapshots --db-instance-identifier instacneid --snapshot-type manual --query 'sort_by(DBSnapshots,&SnapshotCreateTime)[-1:].DBSnapshotIdentifier'
但是下面的命令会在windows下执行成功,linux下失败
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag-value,Values=XXX" --query Reservations[*].[Instances[*].Tags[?Key==`XXX`]] --output text
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag-value,Values=value1,value2,value3" --query Reservations[*].Instances[].join('',[InstanceId])
另有些比较好的命令在linux都是可以正常执行的,里面用到了sort,join,contains
https://blog.ashiny.cloud/2017/09/25/useful-jmespath-in-awscli/
还有许多 现成的例子,如果用到可以直接拿来
https://gist.github.com/magnetikonline/6a382a4c4412bbb68e33e137b9a74168
这篇 从入门到高级基本比较全,sort_by,join,pipe,@
https://dev.classmethod.jp/cloud/aws/form-aws-cli-output-by-jmespath/