筛选 Amazon CLI 输出 - Amazon Command Line Interface
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

筛选 Amazon CLI 输出

Amazon Command Line Interface (Amazon CLI) 具有服务器端和客户端筛选功能,您可以单独使用一个姑娘或同时使用这两个功能来筛选 Amazon CLI 输出。首先处理服务器端筛选,然后返回输出以进行客户端筛选。

  • 服务器端筛选由 API 提供支持,通常使用 --filter 参数来实现筛选。该服务仅返回匹配结果,这可以加快大型数据集的 HTTP 响应时间。

  • 客户端筛选使用 --query 参数由 Amazon CLI 客户端提供支持。此参数具有服务器端筛选可能没有的功能。

服务器端筛选

Amazon CLI 中的服务器端筛选由 Amazon 服务 API 提供。该 Amazon 服务仅返回 HTTP 响应中与筛选条件匹配的记录,这可以加快大型数据集的 HTTP 响应时间。由于服务器端筛选由服务 API 定义,因此参数名称和函数因服务而异。用于筛选的一些常见参数名称包括:

有关特定命令是否具有服务器端筛选和筛选规则的信息,请参阅 Amazon CLI 版本 2 参考指南

客户端筛选

Amazon CLI 使用 --query 参数提供内置的基于 JSON 的客户端筛选功能。该 --query 参数是一个功能强大的工具,可用来自定义输出的内容和样式。该 --query 参数可获取从服务器返回的 HTTP 响应,并在显示结果之前对结果进行筛选。由于在筛选之前将整个 HTTP 响应发送到客户端,因此客户端筛选速度可能比大型数据集的服务器端筛选更慢。

查询使用 JMESPath 语法来创建用于筛选输出的表达式。要了解 JMESPath 语法,请参阅 JMESPath 网站上的教程

重要

指定的输出类型更改--query 选项的运行方式:

  • 如果您指定 --output text,则在应用 --query 筛选条件之前,输出采用分页方式,并且 Amazon CLI 会一次性地在输出的每个页面 上运行查询。因此,查询在每个页面上包括第一个匹配元素,这可能会导致意外的额外输出。要进一步筛选输出,您可以使用其他命令行工具,例如 headtail

  • 如果您指定 --output json --output yaml--output yaml-stream,则在应用 --query 筛选条件之前,输出会完全处理为单个本机结构。Amazon CLI 仅针对整个结构运行查询一次,同时生成筛选的结果,然后将结果输出。

在您开始之前

使用这些示例中使用的筛选条件表达式时,请务必为终端 shell 使用正确的引用规则。有关更多信息,请参阅 Amazon CLI 中的引号及字符串

以下 JSON 输出显示了 --query 参数可以生成的示例。此输出描述了附加到单独 Amazon 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 } ] }

标识符

标识符是输出值的标签。创建筛选条件时,您可以使用标识符缩小查询结果的范围。在以下输出示例中,所有标识符(如 VolumesAvailabilityZoneAttachTime)都将突出显示。

$ 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 网站上的 Slices

筛选嵌套数据

要缩小嵌套值 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" } ] ]

要进一步筛选嵌套值,请为每个嵌套标识符附加表达式。以下示例列出了所有 StateVolumes

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[*].State' [ [ "attached" ], [ "attached" ], [ "attached" ] ]

展平结果

有关更多信息,请参阅 JMESPath 网站上的 SubExpressions

您可以通过删除导致 Volumes[*].Attachments[*].State 查询的通配符表示法来展平 Volumes[*].Attachments[].State 的结果。展平操作通常有助于提高结果的可读性。

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].State' [ "attached", "attached", "attached" ]

有关更多信息,请参阅 JMESPath 网站上的展平

筛选特定值

要筛选列表中的特定值,可以使用筛选条件表达式,如以下语法所示。

语法

? <expression> <comparator> <expression>]

表达式比较器包括 ==!=<<=>>=。以下示例为 VolumeIdsVolumes 中的所有 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 的所有 VolumeIdsVolumes

$ 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>]

在以下示例中,VolumeIdVolumeTypeVolumes 列表中进行筛选,生成以下表达式。

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType]' [ [ "vol-e11a5288", "standard" ], [ "vol-2e410a47", "standard" ], [ "vol-a1b3c7nd", "standard" ] ]

要将嵌套数据添加到列表中,请添加另一个多选列表。下面的示例通过在嵌套 InstanceId 列表中筛选 StateAttachments 在上一个示例中进行了扩展。这将产生以下表达式。

$ 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>}

您的标识符标签不必与标识符的名称相同。以下示例为 Type 值使用标签 VolumeType

$ aws ec2 describe-volumes \ --query 'Volumes[].{VolumeType: VolumeType}' [ { "VolumeType": "standard", }, { "VolumeType": "standard", }, { "VolumeType": "standard", } ]

为简单起见,以下示例保留每个标签的标识符名称,并显示所有卷的 VolumeIdVolumeTypeInstanceIdState

$ 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" } ]

有关更多信息,请参阅 JMESPath 网站上的排序依据

高级 --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 } ]

显示最新 AMI

以下示例列出了您创建的五个最新 Amazon 系统映像 (AMI),从最新到最旧排序。

$ 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 参数进行筛选。如果您使用的是大型数据集,首先使用服务器端筛选可以降低每次 Amazon 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 计算列表中的数量,以显示超过 1000 IOPS 的可用卷数。

$ aws ec2 describe-volumes \ --filters "Name=status,Values=available" \ --query 'length(Volumes[?Iops > `1000`])' 3

其他资源

Amazon CLI 自动提示

开始使用筛选条件表达式时,您可以使用 Amazon CLI 版本 2 中的自动提示功能。按 F5 键时,自动提示功能提供预览。有关更多信息,请参阅 让 Amazon CLI 提示您输入命令

JMESPath 终端

JMESPath 终端是一个交互式终端命令,以试验用于客户端筛选的 JMESPath 表达式。使用 jpterm 命令,终端会在您键入时显示即时查询结果。您可以直接将 Amazon CLI 输出传输到终端,从而启用高级查询试验。

以下示例将 aws ec2 describe-volumes 输出直接传输到 JMESPath 终端。

$ aws ec2 describe-volumes | jpterm

有关 JMESPath 终端和安装说明的更多信息,请参阅 GitHub 上的 JMESPath 终端

jq 实用工具

jq 实用工具为您提供了一种将客户端输出转换为所需输出格式的方法。有关 jq 和安装说明的更多信息,请参阅 GitHub 上的 jq