使用JMESPath和aws ec2描述实例以输出多个标记值

时间:2017-04-11 18:57:09

标签: amazon-web-services amazon-ec2 aws-cli jmespath

我试图从ec2实例描述输出多个标签。我想要的标记值是Name和aws:autoscaling:groupName。

src\standard\java\com\yourcompany\namespace\facade.java

这是我到目前为止所拥有的:

src\main\java\com\yourcompany\namespace\

结果是:

 "Tags": [
                        {
                            "Value": "somename", 
                            "Key": "Name"
                        }, 
                        {
                            "Value": "some-asg-name", 
                            "Key": "aws:autoscaling:groupName"
                        }, 
                        {
                            "Value": "somethingelse", 
                            "Key": "project"
                        }
                    ], 

而不是:

aws ec2 describe-instances --instance-ids i-12345678 --query 'Reservations[].Instances[].[Tags[? contains(`["aws:autoscaling:groupName","Name"]`, Key)] | [0].Value,[1].Value,InstanceId]' --output text

我尝试了双管somename None i-12345678 somename some-asg-name i-12345678 ,但无法获得我需要的输出。另外,我不确定||是获得第二个匹配标记的正确方法。

2 个答案:

答案 0 :(得分:2)

如果您拆分过滤标记并将输出选择为单独的部分,则可能更容易考虑。

一步一步:

首先,选择所有实例:

Reservations[].Instances[]

然后通过管道过滤仅包含两个所需标记的实例:

| [? Tags[? Key == 'Name']] | [? Tags[? Key == 'aws:autoscaling:groupName']]

然后选择InstanceId和标记值:

.[InstanceId,Tags[? Key == 'Name' || Key == 'aws:autoscaling:groupName'].Value]

完整示例:

aws ec2 describe-instances --query "Reservations[].Instances[] | [? Tags[? Key == 'Name']] | [? Tags[? Key == 'aws:autoscaling:groupName']].[InstanceId,Tags[? Key == 'Name' || Key == 'aws:autoscaling:groupName'].Value]"

示例输出

i-aaaa1234
myNameValue myASGvalue
i-bbbb1234
myNameValue myASGvalue

进一步阅读

答案 1 :(得分:1)

我在考虑管道语法错误。这是有效的:

aws ec2 describe-instances --instance-ids i-12345678 --query 'Reservations[].Instances[].[Tags[?Key==`Name`] | [0].Value,Tags[?Key==`aws:autoscaling:groupName`] | [0].Value,InstanceId]' --output text

和输出:

somename       some-asg-name    i-12345678

此外,此解决方案将输出放在每个实例的一行中,因此它可以与--output table

中的许多实例一起使用