以易于阅读的方式列出实例

实例有很多元数据可以通过调用 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  |
+--------------------------------------------------+-----------+---------------+----------+------------+