以易于阅读的方式列出实例
实例有很多元数据可以通过调用 describe-instances
返回,但通常你只想查看基础知识。你可以使用结合表输出的 JMESPath 查询以易于阅读的方式显示简明的实例信息。
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType}"
+-----------+---------------+----------+------------+
| Id | Name | State | Type |
+-----------+---------------+----------+------------+
| i-abc123 | None | stopped | m3.large |
| i-def456 | amazon linux | stopped | t2.micro |
| i-ghi789 | proxy | running | t2.micro |
+-----------+---------------+----------+------------+
现在让我们一块一块地打破它。首先,我们有 --output table
。这将生成响应的彩色表表示。对于返回小数据集的命令或已将数据过滤掉的命令,这通常最有用。
现在到了 --query
。这看起来很长,但实际上很简单。第一部分是 Reservations[].Instances[]
。这将返回所有返回实例的展平列表。
查询的下一部分用 .{}
封装。这样做是为列表中的每个项创建一个新的 json 对象,其中每个值都是要应用于源对象的 JMESPath 查询(在本例中为 Instance)。其中大部分都非常简单,但是 Name
有点复杂。
获取 Name
的完整查询是 Tags[?Key == 'Name'].Value | [0]
。第一部分,Tags[?Key == 'Name']
正在实例的标签中搜索关键字为 Name
的标签。下半部分 .Value | [0]
正在选择每个标签的值,然后从列表中取出第一个项目(在这种情况下,只会有一个)。
你在桌子里想要的完全取决于你。例如,如果你想添加 DNS 信息,可以轻松添加新密钥 DNS: PublicDnsName
:
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType, DNS: PublicDnsName}"
+--------------------------------------------------+-----------+---------------+----------+------------+
| DNS | Id | Name | State | Type |
+--------------------------------------------------+-----------+---------------+----------+------------+
| | i-abc123 | None | stopped | m3.large |
| | i-def456 | amazon linux | stopped | t2.micro |
| ec2-192-168-1-1.us-west-2.compute.amazonaws.com | i-ghi789 | proxy | running | t2.micro |
+--------------------------------------------------+-----------+---------------+----------+------------+