控制 AWS CLI 的命令输出 - AWS Command Line Interface
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

控制 AWS CLI 的命令输出

本主题介绍控制 AWS Command Line Interface (AWS CLI) 的输出的不同方式。

如何选择输出格式

AWS CLI 支持四种输出格式:

  • json – 输出采用 JSON 字符串的格式。

  • yaml – 输出采用 YAML 字符串的格式。(仅在 AWS CLI 版本 2 中可用。)

  • yaml-stream – 输出被流式处理并采用 YAML 字符串的格式。流式处理支持更快地处理大型数据类型。(仅在 AWS CLI 版本 2 中可用。)

  • text – 输出采用多个制表符分隔字符串值行的格式。这对于将输出传递到文本处理器(如 grepsedawk)很有用。

  • table – 输出采用表格形式,使用字符 +|- 以形成单元格边框。它通常以“人性化”格式呈现信息,这种格式比其他格式更容易阅读,但从编程方面来讲不是那么有用。

正如配置主题所述,输出格式可通过三种不同方式指定:

  • config 文件的命名配置文件中使用 output 选项 – 以下示例将默认输出格式设置为 text

    [default] output=text
  • 使用 AWS_DEFAULT_OUTPUT 环境变量 – 对于此命令行会话中的命令,以下输出将格式设置为 table,直到更改此变量或会话结束。使用此环境变量将覆盖在 config 文件中设置的任何值。

    $ export AWS_DEFAULT_OUTPUT="table"
  • 在命令行上使用 --output 选项 – 以下示例仅将这一个命令的输出设置为 json。对此命令使用此选项将覆盖任何当前设置的环境变量或 config 文件中的值。

    $ aws swf list-domains --registration-status REGISTERED --output json

您可以使用 --query 参数自定义和筛选任何格式的结果。有关更多信息,请参阅 如何使用 --query 选项筛选输出

JSON 输出格式

JSON 是 AWS CLI 的默认输出格式。大多数编程语言可以使用内置函数或公开提供的库轻松解码 JSON 字符串。您可以通过强有力的方式将 JSON 输出与 --query 选项结合使用,以筛选和格式化 AWS CLI JSON 格式的输出。

对于您可能无法使用 --query 执行的更高级的筛选,可以考虑使用 jq,这是一个命令行 JSON 处理器。您可以在以下网址下载它并找到正式的教程:http://stedolan.github.io/jq/

以下是 JSON 输出的示例。

$ aws iam list-users --output json
{ "Users": [ { "Path": "/", "UserName": "Admin", "UserId": "AIDA1111111111EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/Admin", "CreateDate": "2014-10-16T16:03:09+00:00", "PasswordLastUsed": "2016-06-03T18:37:29+00:00" }, { "Path": "/backup/", "UserName": "backup-user", "UserId": "AIDA2222222222EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/backup/backup-user", "CreateDate": "2019-09-17T19:30:40+00:00" }, { "Path": "/", "UserName": "cli-user", "UserId": "AIDA3333333333EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/cli-user", "CreateDate": "2019-09-17T19:11:39+00:00" } ] }

YAML 输出格式

此功能仅适用于 AWS CLI 版本 2。

仅当您使用 AWS CLI 版本 2 时,以下功能才可用。如果您运行 AWS CLI 版本 1,则此功能不可用。有关如何安装版本 2 的信息,请参阅安装、更新和卸载 AWS CLI 版本 2

对于使用某些服务和工具(这些工具发出或使用 YAML 格式的字符串)以编程方式处理输出的情况,如 AWS CloudFormation 及其对 YAML 格式的模板的支持,YAML 是一个很好的选择。

对于您可能无法使用 --query 执行的更高级的筛选,可以考虑使用 yq,这是一个命令行 YAML 处理器。您可以通过 https://mikefarah.gitbook.io/yq/ 下载它并查找文档。

以下是 YAML 输出的示例。

$ aws iam list-users --output yaml
Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

YAML 流输出格式

此功能仅适用于 AWS CLI 版本 2。

仅当您使用 AWS CLI 版本 2 时,以下功能才可用。如果您运行 AWS CLI 版本 1,则此功能不可用。有关如何安装版本 2 的信息,请参阅安装、更新和卸载 AWS CLI 版本 2

yaml-stream 格式利用 YAML 格式,同时通过流式传输数据给您,使您在查看大型数据集时的响应能力更高/速度更快。您可以在整个查询下载之前开始查看和使用 YAML 数据。

对于您可能无法使用 --query 执行的更高级的筛选,可以考虑使用 yq,这是一个命令行 YAML 处理器。您可以通过 http://mikefarah.github.io/yq/ 下载它并查找文档。

下面是 yaml-stream 输出的一个示例。

$ aws iam list-users --output yaml-stream
- IsTruncated: false Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

下面是一个 yaml-stream 输出示例,并且使用 --page-size 参数对流式 YAML 内容进行分页。

$ aws iam list-users --output yaml-stream --page-size 2
- IsTruncated: true Marker: ab1234cdef5ghi67jk8lmo9p/q012rs3t445uv6789w0x1y2z/345a6b78c9d00/1efgh234ij56klmno78pqrstu90vwxyx Users: - Arn: arn:aws:iam::123456789012:user/Admin CreateDate: '2014-10-16T16:03:09+00:00' PasswordLastUsed: '2016-06-03T18:37:29+00:00' Path: / UserId: AIDA1111111111EXAMPLE UserName: Admin - Arn: arn:aws:iam::123456789012:user/backup/backup-user CreateDate: '2019-09-17T19:30:40+00:00' Path: /backup/ UserId: AIDA2222222222EXAMPLE UserName: arq-45EFD6D1-CE56-459B-B39F-F9C1F78FBE19 - IsTruncated: false Users: - Arn: arn:aws:iam::123456789012:user/cli-user CreateDate: '2019-09-17T19:30:40+00:00' Path: / UserId: AIDA3333333333EXAMPLE UserName: cli-user

文本输出格式

text 格式将 AWS CLI 输出组织为制表符分隔的行。此格式适合在传统 Unix 文本工具(如 grepsedawk)和由 PowerShell 执行的文本处理中使用。

text 输出格式遵循以下所示的基本结构。这些列根据底层 JSON 对象相应的键名称按字母顺序排序。

IDENTIFIER sorted-column1 sorted-column2 IDENTIFIER2 sorted-column1 sorted-column2

下面是 text 输出的一个示例。每个字段都用标签与其他字段分开,并带有一个额外的标签,其中有一个空字段。

$ aws iam list-users --output text
USERS arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 / AIDA1111111111EXAMPLE Admin USERS arn:aws:iam::123456789012:user/backup/backup-user 2019-09-17T19:30:40+00:00 /backup/ AIDA2222222222EXAMPLE backup-user USERS arn:aws:iam::123456789012:user/cli-user 2019-09-17T19:11:39+00:00 / AIDA3333333333EXAMPLE cli-user

第四列是 PasswordLastUsed 字段,它对于最后两个条目为空,因为这些用户从未登录过 AWS 管理控制台。

重要

我们强烈建议,如果您指定 text 输出,则也始终使用 --query 选项以确保行为一致

这是因为文本格式按由 AWS 服务返回的基础 JSON 对象的键名称以字母顺序对输出列进行排序,而类似的资源可能没有相同的键名称。例如,基于 Linux 的 Amazon EC2 实例的 JSON 表示形式中的元素在基于 Windows 的实例的 JSON 表示形式中可能不存在,反之亦然。此外,资源可能在未来的更新中添加或移除键/值元素,从而修改列的顺序。因此,可以使用 --query 补充 text 输出的功能,以提供对输出格式的完全控制。

在以下示例中,命令指定要显示的元素,并使用列表表示法 [key1, key2, ...]定义列的顺序。这可让您十分放心:正确的键值始终显示在预期的列中。最后请注意,对于不存在的键,AWS CLI 将输出 None 作为键值。

$ aws iam list-users --output text --query 'Users[*].[UserName,Arn,CreateDate,PasswordLastUsed,UserId]'
Admin arn:aws:iam::123456789012:user/Admin 2014-10-16T16:03:09+00:00 2016-06-03T18:37:29+00:00 AIDA1111111111EXAMPLE backup-user arn:aws:iam::123456789012:user/backup-user 2019-09-17T19:30:40+00:00 None AIDA2222222222EXAMPLE cli-user arn:aws:iam::123456789012:user/cli-backup 2019-09-17T19:11:39+00:00 None AIDA3333333333EXAMPLE

以下示例显示如何将 grepawk 与来自 aws ec2 describe-instances 命令的 text 输出结合使用。第一个命令在 text 输出中显示每个实例的可用区、当前状态和实例 ID。第二个命令处理该输出,以仅输出在 us-west-2a 可用区中运行的所有实例的实例 ID。

$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text
us-west-2a running i-4b41a37c us-west-2a stopped i-a071c394 us-west-2b stopped i-97a217a0 us-west-2a running i-3045b007 us-west-2a running i-6fc67758
$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | grep us-west-2a | grep running | awk '{print $3}'
i-4b41a37c i-3045b007 i-6fc67758

以下示例更进一步,不仅说明如何筛选输出,还介绍如何使用该输出自动更改每个已停止实例的实例类型。

$ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[State.Name, InstanceId]' --output text | > grep stopped | > awk '{print $2}' | > while read line; > do aws ec2 modify-instance-attribute --instance-id $line --instance-type '{"Value": "m1.medium"}'; > done

text 输出也适用于 PowerShell。因为 text 输出中的列使用制表符分隔,所以可以轻松地使用 PowerShell 的 `t 分隔符将输出拆分为数组。以下命令在第一列 (AvailabilityZone) 与字符串 us-west-2a 匹配的情况下显示第三列 (InstanceId) 的值。

PS C:\>aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' --output text | %{if ($_.split("`t")[0] -match "us-west-2a") { $_.split("`t")[2]; } }
-4b41a37c i-a071c394 i-3045b007 i-6fc67758

注意,尽管上一个示例的确显示了如何使用 --query 参数解析底层 JSON 对象和提取所需的列,但是 PowerShell 有自己处理 JSON 的功能(如果跨平台兼容性不是问题)。不像大多数命令 shell 需要的那样将输出处理为文本,PowerShell 让您可以使用 ConvertFrom-JSON cmdlet 生成具有层次结构的对象。然后,您可以直接从该对象访问所需的成员。

(aws ec2 describe-instances --output json | ConvertFrom-Json).Reservations.Instances.InstanceId
提示

如果使用 --query 参数输出文本并将输出筛选到单个字段,则输出是单行制表符分隔值。要将每个值放到单独的行上,可以将输出字段放在括号中,如以下示例所示。

制表符分隔的单行输出:

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].GroupName"
HRDepartment Developers SpreadsheetUsers LocalAdmins

通过将 [GroupName] 放在括号中,让每个值都在自己的行上:

$ aws iam list-groups-for-user --user-name susan --output text --query "Groups[].[GroupName]"
HRDepartment Developers SpreadsheetUsers LocalAdmins

表输出格式

table 格式以表格形式生成复杂 AWS CLI 输出的易于人阅读的表示。

$ aws iam list-users --output table
----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ListUsers | +---------------------------------------------------------------------------------------------------------------------------------------------------------------+ || Users || |+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+| || Arn | CreateDate | PasswordLastUsed | Path | UserId | UserName || |+----------------------------------------------------+---------------------------+---------------------------+----------+-----------------------+-------------+| || arn:aws:iam::123456789012:user/Admin | 2014-10-16T16:03:09+00:00 | 2016-06-03T18:37:29+00:00 | / | AIDA1111111111EXAMPLE | Admin || || arn:aws:iam::123456789012:user/backup/backup-user | 2019-09-17T19:30:40+00:00 | | /backup/ | AIDA2222222222EXAMPLE | backup-user || || arn:aws:iam::123456789012:user/cli-user | 2019-09-17T19:11:39+00:00 | | / | AIDA3333333333EXAMPLE | cli-user || +---------------------------------------------------------------------------------------------------------------------------------------------------------------+

您可以将 --query 选项与 table 格式结合使用,以显示从原始输出中预先选择的一系列元素。请注意字典和列表表示法之间的输出区别:在第一个示例中,列名按字母顺序排序;在第二个示例中,未命名的列按用户指定的顺序排序。有关 --query 选项的更多信息,请参阅 如何使用 --query 选项筛选输出

$ aws ec2 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}' --output table
------------------------------------------------------ | DescribeVolumes | +------------+----------------+--------------+-------+ | AZ | ID | InstanceId | Size | +------------+----------------+--------------+-------+ | us-west-2a| vol-e11a5288 | i-a071c394 | 30 | | us-west-2a| vol-2e410a47 | i-4b41a37c | 8 | +------------+----------------+--------------+-------+
$ aws ec2 describe-volumes --query 'Volumes[*].[VolumeId,Attachments[0].InstanceId,AvailabilityZone,Size]' --output table
---------------------------------------------------- | DescribeVolumes | +--------------+--------------+--------------+-----+ | vol-e11a5288| i-a071c394 | us-west-2a | 30 | | vol-2e410a47| i-4b41a37c | us-west-2a | 8 | +--------------+--------------+--------------+-----+

如何使用 --query 选项筛选输出

AWS CLI 使用 --query 选项提供内置的基于 JSON 的输出筛选功能。--query 参数接受符合 JMESPath 规范的字符串。

重要

指定的输出类型(jsonyamltexttable)影响 --query 选项的运行方式:

  • 如果您指定 --output text,则在应用 --query 筛选条件之前,输出采用分页方式,并且 AWS CLI 会一次性地在输出的每个页面上运行查询。这可能会导致意外的额外输出,特别是如果您的筛选条件使用 [0] 之类的对象指定数组元素,因为输出会包含每个页面上的第一个匹配元素。要解决 --output text 可能生成的额外输出,您可以指定 --no-paginate。这会导致筛选器仅应用于完整的结果集。但它确实删除了任何分页,所以它可能会导致长的输出。您也可以使用其他命令行工具(例如 headtail),额外地筛选输出以仅显示所需的值。

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

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

为了演示 --query 的工作方式,我们从以下默认 JSON 输出开始。这描述了连接到单独 Amazon EC2 实例的两个 Amazon Elastic Block Store (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 } ] }

您可以选择使用以下命令从 Volumes 列表中仅显示第一个卷,该命令为数组中的第一个卷编制索引

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

下一个示例使用通配符表示法 [*]循环访问列表中的所有卷,同时筛选出每个卷中的三个元素:VolumeIdAvailabilityZoneSize。词典表示法要求您为每个 JSON 键提供一个别名,如:{Alias1:JSONKey1,Alias2:JSONKey2}。词典本身是无序的,因此,此种结构中的键/别名的顺序可能不一致。

$ aws ec2 describe-volumes --query 'Volumes[*].{ID:VolumeId,AZ:AvailabilityZone,Size:Size}'
[ { "AZ": "us-west-2a", "ID": "vol-e11a5288", "Size": 30 }, { "AZ": "us-west-2a", "ID": "vol-2e410a47", "Size": 8 } ]

在使用词典表示法时,您也可以将键链接起来(如 key1.key2[0].key3)来筛选深度嵌套在结构中的元素。以下示例利用 Attachments[0].InstanceId 键演示此功能,别名指定为简单的 InstanceId

$ aws ec2 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}'
[ { "InstanceId": "i-a071c394", "AZ": "us-west-2a", "ID": "vol-e11a5288", "Size": 30 }, { "InstanceId": "i-4b41a37c", "AZ": "us-west-2a", "ID": "vol-2e410a47", "Size": 8 } ]

您也可以使用列表表示法筛选多个元素:[key1, key2]。此表达式会将每个对象筛选出的所有属性放入单个排序列表中,不考虑类型。

$ aws ec2 describe-volumes --query 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, Size]'
[ [ "vol-e11a5288", "i-a071c394", "us-west-2a", 30 ], [ "vol-2e410a47", "i-4b41a37c", "us-west-2a", 8 ] ]

要按特定字段的值筛选结果,请使用 JMESPath "?" 运算符。以下示例查询仅输出 us-west-2a 可用区中的卷。

$ aws ec2 describe-volumes \ --query 'Volumes[?AvailabilityZone==`us-west-2a`]'
注意

在指定诸如以上 JMESPath 查询表达式中的 "us-west-2" 这样的文字值时,必须将该值放在反引号 (` `) 中,以便使它能够正确读取。

下面是一些其他示例,说明如何从命令输出中仅获取所需的详细信息。

以下示例列出了 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, "Type": "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

以下示例使用 --query 参数在列表中查找特定的项目,然后提取该项目的的信息。此示例列出了与指定的服务终端节点相关联的所有可用区。它从 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" ] ]

--query 参数还允许您计算输出中的项目数量。以下示例通过使用 length 计算列表中的数量,以显示超过 1000 IOPS 的可用卷数。

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

以下示例显示如何列出在指定日期之后创建的所有快照,从而在输出中仅包括几个可用字段。

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

以下示例列出了您创建的五个最新 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 组中任何运行状况不佳的实例的 InstanceId

$ aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-name My-AutoScaling-Group-Name \ --output text \ --query 'AutoScalingGroups[*].Instances[?HealthStatus==`Unhealthy`].InstanceId'

结合本主题之前更详细说明的输出格式,--query 选项是一个强大的工具,您可用它来自定义输出的内容和样式。

有关底层 JSON 处理库 JMESPath 的更多示例和完整规范,请查看 http://jmespath.org/specification.html

如何设置输出的默认分页程序

此功能仅适用于 AWS CLI 版本 2。

仅当您使用 AWS CLI 版本 2 时,以下功能才可用。如果您运行 AWS CLI 版本 1,则此功能不可用。有关如何安装版本 2 的信息,请参阅安装、更新和卸载 AWS CLI 版本 2

AWS CLI 版本 2 支持使用客户端分页程序对输出进行处理。默认情况下,此功能会通过操作系统的默认分页程序返回所有输出。客户端分页在您指定的任何服务器端分页操作完成之后执行,请参阅分页

要完全禁用外部分页程序,请将该变量设置为空字符串。

您可以通过两种方式指定输出分页程序。

使用 config 文件中的 cli_pager 选项

以下示例将默认输出分页程序设置为 less 程序。

[default] cli_pager=less

以下示例中已禁用分页程序。

[default] cli_pager=

使用 AWS_PAGER 环境变量

以下示例将默认值设置为更小。

Linux and macOS
$ export AWS_PAGER="less"
Windows
C:\> setx AWS_PAGER "less"

以下示例禁用分页程序。

Linux and macOS
$ export AWS_PAGER=""
Windows
C:\> setx AWS_PAGER ""