使用jq从EC2实例获取名称标签的值

时间:2020-05-11 14:57:05

标签: amazon-web-services amazon-ec2 jq

我正在尝试使用jq获取AWS EC2实例的Name标记的值。

aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .Tags[] | select (.Key == "Name")'

但是我收到此错误:

jq: error: Name/0 is not defined at <top-level>, line 1:
.Reservations[].Instances[] | .Tags[] | select (.Key == Name)
jq: 1 compile error

这是我要处理的json:

{
    "Reservations": [{
        "Instances": [{
            "AmiLaunchIndex": 0,
            "ImageId": "ami-00c3c949f325a4149",
            "InstanceId": "i-0c17052ee1c7113e5",
            "Architecture": "x86_64",
            "Tags": [{
                    "Key": "Name",
                    "Value": "bastion001"
                },
                {
                    "Key": "environment",
                    "Value": "stg-us-east"
                }
            ]
        }]
    }]
}

如何从EC2实例中获取Name标签的值?

2 个答案:

答案 0 :(得分:3)

您不需要诸如jq之类的额外工具来查询输出。 AWS CLI具有JMESPath 内置功能可以帮助您做到这一点。

aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key == `Name`].Value'

答案 1 :(得分:1)

在Q中显示的jq命令行表达式和错误消息之间不匹配。我建议至少在整理完所有内容之前,将jq程序放入文件中,然后使用-f命令行选项调用jq。