本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中筛选输出 AWS CLI
AWS Command Line Interface (AWS CLI) 同时具有服务器端和客户端筛选功能,您可以单独或一起使用它们来 AWS CLI 筛选输出。首先处理服务器端筛选,然后返回输出以进行客户端筛选。
-
支持服务器端筛选API,您通常使用
--filter
参数来实现该筛选。该服务仅返回匹配结果,这可以加快大型数据集的HTTP响应时间。 -
使用
--query
参数的客户端支持 AWS CLI 客户端筛选。此参数具有服务器端筛选可能没有的功能。
服务器端筛选
中的服务器端筛选由 AWS 服务API提供。 AWS CLI 该 AWS 服务仅返回HTTP响应中与您的筛选条件相匹配的记录,这可以加快大型数据集的HTTP响应时间。由于服务器端筛选是由服务定义的API,因此参数名称和功能因服务而异。用于筛选的一些常见参数名称包括:
-
--filters
例如 ec2、autoscaling 和 rds 。 -
以单词
filter
开头的名称,例如--filter-expression
用于aws dynamodb scan
命令。
有关特定命令是否具有服务器端筛选和筛选规则的信息,请参阅版本 2 参考指南
客户端筛选
通过--query
参数 AWS CLI 提供JSON基于内置的客户端筛选功能。该 --query
参数是一个功能强大的工具,可用来自定义输出的内容和样式。该--query
参数获取从服务器返回的HTTP响应,并在显示结果之前对其进行过滤。由于在筛选之前会将整个HTTP响应发送到客户端,因此对于大型数据集,客户端筛选可能比服务器端筛选慢。
查询使用JMESPath语法
重要
指定的输出类型更改--query
选项的运行方式:
-
如果您指定
--output text
,则会在应用--query
过滤器之前对输出进行分页,并且会在输出的每一页上 AWS CLI 运行一次查询。因此,查询在每个页面上包括第一个匹配元素,这可能会导致意外的额外输出。要进一步筛选输出,您可以使用其他命令行工具,例如head
或tail
。 -
如果您指定
--output json
、--output yaml
或--output yaml-stream
,则在应用--query
筛选条件之前,输出会完全处理为单个本机结构。只对整个结构 AWS CLI 运行一次查询,生成过滤后的结果然后输出。
在您开始之前
使用这些示例中使用的筛选条件表达式时,请务必为终端 shell 使用正确的引用规则。有关更多信息,请参阅 在字符串中使用引号和文字 AWS CLI。
以下JSON输出显示了该--query
参数可以产生什么结果的示例。输出描述了连接到不同亚马逊EC2实例的三个 Amazon EBS 卷。
$
aws ec2 describe-volumes
{ "Volumes": [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-2e410a47", "State": "in-use", "SnapshotId": "snap-708e8348", "CreateTime": "2013-09-18T20:26:15.000Z", "Size": 8 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ] }
标识符
标识符是输出值的标签。创建筛选条件时,您可以使用标识符缩小查询结果的范围。在以下输出示例中,所有标识符(如 Volumes
、AvailabilityZone
和 AttachTime
)都将突出显示。
$
aws ec2 describe-volumes
{ "
Volumes
": [ { "AvailabilityZone
": "us-west-2a", "Attachments
": [ { "AttachTime
": "2013-09-17T00:55:03.000Z", "InstanceId
": "i-a071c394", "VolumeId
": "vol-e11a5288", "State
": "attached", "DeleteOnTermination
": true, "Device
": "/dev/sda1" } ], "VolumeType
": "standard", "VolumeId
": "vol-e11a5288", "State
": "in-use", "SnapshotId
": "snap-f23ec1c8", "CreateTime
": "2013-09-17T00:55:03.000Z", "Size
": 30 }, { "AvailabilityZone
": "us-west-2a", "Attachments
": [ { "AttachTime
": "2013-09-18T20:26:16.000Z", "InstanceId
": "i-4b41a37c", "VolumeId
": "vol-2e410a47", "State
": "attached", "DeleteOnTermination
": true, "Device
": "/dev/sda1" } ], "VolumeType
": "standard", "VolumeId
": "vol-2e410a47", "State
": "in-use", "SnapshotId
": "snap-708e8348", "CreateTime
": "2013-09-18T20:26:15.000Z", "Size
": 8 }, { "AvailabilityZone
": "us-west-2a", "Attachments
": [ { "AttachTime
": "2020-11-20T19:54:06.000Z", "InstanceId
": "i-1jd73kv8", "VolumeId
": "vol-a1b3c7nd", "State
": "attached", "DeleteOnTermination
": true, "Device
": "/dev/sda1" } ], "VolumeType
": "standard", "VolumeId
": "vol-a1b3c7nd", "State
": "in-use", "SnapshotId
": "snap-234087fb", "CreateTime
": "2020-11-20T19:54:05.000Z", "Size
": 15 } ] }
有关更多信息,请参阅JMESPath网站上的标识符
从列表中选择
列表或数组是后跟方括号“[
”的标识符,例如 Volumes
中的 Attachments
和 在您开始之前。
语法
<listName>[ ]
要筛选数组的所有输出,可以使用通配符表示法。通配符*
表示法返回元素的表达式。
以下示例查询所有 Volumes
内容。
$
aws ec2 describe-volumes \ --query 'Volumes[*]'
[ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]
要按索引查看数组中的特定卷,请调用数组索引。例如,Volumes
数组中的第一个项目的索引为 0,返回 Volumes[0]
查询。有关数组索引的更多信息,请参阅JMESPath网站上的索引表达式
$
aws ec2 describe-volumes \ --query 'Volumes[0]'
{ "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }
要按索引查看特定范围的卷,请使用 slice
与以下语法,其中 start 是起始数组索引,stop 是筛选条件停止处理的索引,step 是跳过间隔。
语法
<arrayName>[<start>:<stop>:<step>]
如果 Slice 表达式中忽略了其中任何一个,它们将使用以下默认值:
-
Start – 列表中的第一个索引,0。
-
Stop – 列表中的最后一个索引。
-
Step – 没有跳过步骤,其中值为 1。
要仅返回前两个卷,请使用起始值 0、停止值 2 和步长值 1,如以下示例所示。
$
aws ec2 describe-volumes \ --query 'Volumes[0:2:1]'
[ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-2e410a47", "State": "in-use", "SnapshotId": "snap-708e8348", "CreateTime": "2013-09-18T20:26:15.000Z", "Size": 8 } ]
由于此示例包含默认值,因此您可以将 Slice 从 Volumes[0:2:1]
缩短到 Volumes[:2]
。
以下示例省略了默认值,并返回整个数组中的每两个卷。
$
aws ec2 describe-volumes \ --query 'Volumes[::2]'
[ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]
Steps 还可以使用负数按数组的相反顺序进行筛选,如以下示例所示。
$
aws ec2 describe-volumes \ --query 'Volumes[::-2]'
[ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 } ]
有关更多信息,请参阅JMESPath网站上的切片
筛选嵌套数据
要缩小嵌套值 Volumes[*]
的筛选范围,您可以通过附加句点和筛选条件来使用子表达式。
语法
<expression>.<expression>
以下示例显示了所有卷的所有 Attachments
信息。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments'
[ [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ] ]
要进一步筛选嵌套值,请为每个嵌套标识符附加表达式。以下示例列出了所有 State
的 Volumes
。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[*].State'
[ [ "attached" ], [ "attached" ], [ "attached" ] ]
展平结果
有关更多信息,请参见SubExpressionsJMESPath
您可以通过删除导致 Volumes[*].Attachments[*].State
查询的通配符表示法来展平 Volumes[*].Attachments[].State
的结果。展平操作通常有助于提高结果的可读性。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].State'
[ "attached", "attached", "attached" ]
有关更多信息,请参阅JMESPath网站上的 Flatten
筛选特定值
要筛选列表中的特定值,可以使用筛选条件表达式,如以下语法所示。
语法
? <expression> <comparator> <expression>]
表达式比较器包括 ==
、!=
、<
、<=
、>
和 >=
。以下示例为 VolumeIds
Volumes
中的所有 Attached
筛选 State
。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId'
[ [ "vol-e11a5288" ], [ "vol-2e410a47" ], [ "vol-a1b3c7nd" ] ]
然后可以将其展平,从而生成以下示例。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId[]'
[ "vol-e11a5288", "vol-2e410a47", "vol-a1b3c7nd" ]
以下示例筛选了尺寸小于 20 的所有 VolumeIds
的 Volumes
。
$
aws ec2 describe-volumes \ --query 'Volumes[?Size < `20`].VolumeId'
[ "vol-2e410a47", "vol-a1b3c7nd" ]
有关更多信息,请参阅JMESPath网站上的筛选表达式
传输表达式
您可以将筛选器的结果传输到新列表中,然后通过以下语法使用另一个表达式筛选结果:
语法
<expression> | <expression>]
以下示例获取 Volumes[*].Attachments[].InstanceId
表达式的筛选结果并在数组中输出第一个结果。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId | [0]'
"i-a071c394"
本示例首先通过以下表达式创建数组来实现此目的。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId'
"i-a071c394", "i-4b41a37c", "i-1jd73kv8"
然后返回该数组中的第一个元素。
"i-a071c394"
有关更多信息,请参阅JMESPath网站上的管道表达式
筛选多个标识符值
要筛选多个标识符,您可以使用以下语法使用多选列表:
语法
<listName>[].[<expression>, <expression>]
在以下示例中,VolumeId
和 VolumeType
在 Volumes
列表中进行筛选,生成以下表达式。
$
aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType]'
[ [ "vol-e11a5288", "standard" ], [ "vol-2e410a47", "standard" ], [ "vol-a1b3c7nd", "standard" ] ]
要将嵌套数据添加到列表中,请添加另一个多选列表。下面的示例通过在嵌套 InstanceId
列表中筛选 State
和 Attachments
在上一个示例中进行了扩展。这将产生以下表达式。
$
aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State]]'
[ [ "vol-e11a5288", "standard", [ [ "i-a071c394", "attached" ] ] ], [ "vol-2e410a47", "standard", [ [ "i-4b41a37c", "attached" ] ] ], [ "vol-a1b3c7nd", "standard", [ [ "i-1jd73kv8", "attached" ] ] ] ]
为了更具可读性,请按以下示例所示展开表达式。
$
aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State][]][]'
[ "vol-e11a5288", "standard", [ "i-a071c394", "attached" ], "vol-2e410a47", "standard", [ "i-4b41a37c", "attached" ], "vol-a1b3c7nd", "standard", [ "i-1jd73kv8", "attached" ] ]
有关更多信息,请参阅JMESPath网站上的多选列表
将标签添加到标识符值
为了使此输出更易于读取,请使用具有以下语法的多选哈希。
语法
<listName>[].{<label>: <expression>, <label>: <expression>}
您的标识符标签不必与标识符的名称相同。以下示例为 VolumeType
值使用标签 VolumeType
。
$
aws ec2 describe-volumes \ --query 'Volumes[].{VolumeType: VolumeType}'
[ { "VolumeType": "standard", }, { "VolumeType": "standard", }, { "VolumeType": "standard", } ]
为简单起见,以下示例保留每个标签的标识符名称,并显示所有卷的 VolumeId
、VolumeType
、InstanceId
和 State
:
$
aws ec2 describe-volumes \ --query 'Volumes[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}'
[ { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" }, { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" } ]
有关更多信息,请参阅JMESPath网站上的多选哈希
函数
该JMESPath语法包含许多可用于查询的函数。有关JMESPath函数的信息,请参阅JMESPath网站上的内置函数
为了演示如何将函数合并到查询中,以下示例使用了 sort_by
函数。该 sort_by
函数使用以下语法将表达式作为排序键对数组进行排序:
语法
sort_by(<listName>, <sort expression>)[].<expression>
以下示例使用先前的多选哈希示例并按照 VolumeId
对输出进行排序。
$
aws ec2 describe-volumes \ --query 'sort_by(Volumes, &VolumeId)[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}'
[ { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" }, { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" } ]
有关更多信息,请参阅网站上的 sort_by
高级 --query
示例
从特定项目中提取信息
以下示例使用 --query
参数在列表中查找特定的项目,然后提取该项目的的信息。此示例列出了与指定的服务终端节点相关联的所有 AvailabilityZones
。它从 ServiceDetails
列表中提取具有指定 ServiceName
的项目,然后输出该选定项目的 AvailabilityZones
字段。
$
aws --region us-east-1 ec2 describe-vpc-endpoint-services \ --query 'ServiceDetails[?ServiceName==`com.amazonaws.us-east-1.ecs`].AvailabilityZones'
[ [ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e", "us-east-1f" ] ]
在指定创建日期之后显示快照
以下示例显示如何列出在指定日期之后创建的所有快照,从而在输出中仅包括几个可用字段。
$
aws ec2 describe-snapshots --owner self \ --output json \ --query 'Snapshots[?StartTime>=`2018-02-07`].{Id:SnapshotId,VId:VolumeId,Size:VolumeSize}'
[ { "id": "snap-0effb42b7a1b2c3d4", "vid": "vol-0be9bb0bf12345678", "Size": 8 } ]
显示最新的 AMIs
以下示例列出了您最近创建的五个 Amazon 系统映像 (AMIs),按从最新到最旧的顺序排序。
$
aws ec2 describe-images \ --owners self \ --query 'reverse(sort_by(Images,&CreationDate))[:5].{id:ImageId,date:CreationDate}'
[ { "id": "ami-0a1b2c3d4e5f60001", "date": "2018-11-28T17:16:38.000Z" }, { "id": "ami-0a1b2c3d4e5f60002", "date": "2018-09-15T13:51:22.000Z" }, { "id": "ami-0a1b2c3d4e5f60003", "date": "2018-08-19T10:22:45.000Z" }, { "id": "ami-0a1b2c3d4e5f60004", "date": "2018-05-03T12:04:02.000Z" }, { "id": "ami-0a1b2c3d4e5f60005", "date": "2017-12-13T17:16:38.000Z" } ]
显示运行状况不佳的 Auto Scaling 实例
以下示例仅显示指定 Auto Scaling 组中任何运行状况不佳的实例的 InstanceId
。
$
aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-name
My-AutoScaling-Group-Name
\ --output text \ --query 'AutoScalingGroups[*].Instances[?HealthStatus==`Unhealthy`].InstanceId'
包括带指定标签的卷
以下示例描述了所有带 test
标签的实例。只要附加的卷旁边 test
还有另一个标签,那么结果中仍会返回该卷。
下面的表达式在数组中返回带 test
标签的所有标签。任何不是 test
标签的标签都包含 null
值。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Tags[?Value == `test`]'
排除具有指定标签的卷
以下示例描述了所有不带 test
标签的实例。使用简单 ?Value != `test`
表达式不适用于排除卷,因为卷可能有多个标签。只要附加的卷旁边 test
还有另一个标签,那么结果中仍会返回该卷。
要排除带有 test
标签的所有卷,请从下面的表达式开始返回数组中带有该 test
标签的所有标签。任何不是 test
标签的标签都包含 null
值。
$
aws ec2 describe-volumes \ --query 'Volumes[*].Tags[?Value == `test`]'
然后使用 test
函数筛选掉所有正数 not_null
结果。
$
aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)]'
传输结果以展开会导致以下查询的结果。
$
aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)] | []'
结合服务器端和客户端筛选
您可以同时使用服务器端和客户端筛选。首先完成服务器端筛选,将数据发送到客户端,然后由 --query
参数进行筛选。如果您使用的是大型数据集,则首先使用服务器端筛选可以减少每次 AWS CLI 调用发送给客户端的数据量,同时仍然保留客户端筛选提供的强大自定义功能。
以下示例列出了同时使用服务器端和客户端筛选的 Amazon EC2 卷。该服务在 us-west-2a
可用区中筛选所有附加的卷的列表。--query
参数进一步将输出限制为只有 Size
值大于 50 的卷,并且仅显示具有用户定义名称的指定字段。
$
aws ec2 describe-volumes \ --filters "Name=availability-zone,Values=us-west-2a" "Name=status,Values=attached" \ --query 'Volumes[?Size > `50`].{Id:VolumeId,Size:Size,Type:VolumeType}'
[ { "Id": "vol-0be9bb0bf12345678", "Size": 80, "VolumeType": "gp2" } ]
以下示例检索满足多个条件的镜像的列表。然后,它使用 --query
参数按 CreationDate
对输出进行排序,从而仅选择最新的。最终,它显示这一个镜像的 ImageId
。
$
aws ec2 describe-images \ --owners amazon \ --filters "Name=name,Values=amzn*gp2" "Name=virtualization-type,Values=hvm" "Name=root-device-type,Values=ebs" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" \ --output text
ami-00ced3122871a4921
以下示例使用length
计算列表中包含多少卷,IOPS从而显示大于 1000 的可用卷的数量。
$
aws ec2 describe-volumes \ --filters "Name=status,Values=available" \ --query 'length(Volumes[?Iops > `1000`])'
3
其他资源
- AWS CLI 自动提示
-
开始使用筛选表达式时,您可以使用 AWS CLI 版本 2 中的自动提示功能。按 F5 键时,自动提示功能提供预览。有关更多信息,请参阅 在中启用和使用命令提示符 AWS CLI。
- JMESPath航站楼
-
JMESPathTerminal 是一个交互式终端命令,用于试验用于客户端筛选的JMESPath表达式。使用
jpterm
命令,终端会在您键入时显示即时查询结果。您可以直接通过管道将 AWS CLI 输出传送到终端,从而启用高级查询实验。以下示例将
aws ec2 describe-volumes
输出直接传送到JMESPath终端。$
aws ec2 describe-volumes | jpterm
有关JMESPath终端和安装说明的更多信息,请参阅JMESPath终端
开启GitHub。 - jq 实用工具
-
该
jq
实用工具为您提供了一种将客户端输出转换为所需输出格式的方法。有关详细jq
信息和安装说明,请参阅 jqon。GitHub