aws cli ec2 describe-instances表输出

Stu*_*art 7 command-line-interface amazon-ec2 amazon-web-services

我想运行ec2 describe-instances命令并以表格格式获取输出,如下所示(其中name是带有Key'Name'的Tag的值):

----------------------------------------------------------
|                    DescribeInstances                   |
+-------------+----------------+--------------+----------+
| instance_id |  ip_address    |    name      |  state   |
+-------------+----------------+--------------+----------+
|  i-g93g494d |  99.99.99.01   |  name1       |  running |
|  i-a93f754c |  99.99.99.02   |  name2       |  running |
+-------------+----------------+--------------+----------+
Run Code Online (Sandbox Code Playgroud)

我可以运行以下命令:

aws ec2 describe-instances --instance-ids i-g93g494d i-a93f754c --query "Reservations[*].Instances[*].{name: Tags[?Key=='Name'].Value, instance_id: InstanceId, ip_address: PrivateIpAddress, state: State.Name}" --output json
Run Code Online (Sandbox Code Playgroud)

并获得输出:

[
    [
        {
            "instance_id": "i-g93g494d",
            "state": "running",
            "ip_address": "99.99.99.01",
            "name": [
                "name1"
            ]
        }
    ],
    [
        {
            "instance_id": "i-a93f754c",
            "state": "running",
            "ip_address": "99.99.99.02",
            "name": [
                "name2"
            ]
        }
    ]
]
Run Code Online (Sandbox Code Playgroud)

但是,当我使用--output表而不是--output json运行相同的命令时,我得到一个错误.

命令:

aws ec2 describe-instances --instance-ids i-g93g494d i-a93f754c --query "Reservations[*].Instances[*].{name: Tags[?Key=='Name'].Value, instance_id: InstanceId, ip_address: PrivateIpAddress, state: State.Name}" --output json
Run Code Online (Sandbox Code Playgroud)

输出:

list index out of range
Run Code Online (Sandbox Code Playgroud)

我希望表输出看起来像上面的例子,但我很难解决这个问题.我非常感谢任何人都能提供的任何帮助.

Vol*_*soy 17

您需要使用管道表达式来过滤标记结果并获取第一个值,例如:

aws ec2 describe-instances --instance-ids i-g93g494d i-a93f754c --query "Reservations[*].Instances[*].{name: Tags[?Key=='Name'] | [0].Value, instance_id: InstanceId, ip_address: PrivateIpAddress, state: State.Name}" --output table
Run Code Online (Sandbox Code Playgroud)

这里有一篇很好的相关博客文章:获取一个包含id,name和type的实例列表