0

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

 "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

我尝试了双管||contains但无法获得我需要的输出。另外,我不确定[1].Value获得第二个匹配标签的正确方法。

4

2 回答 2

3

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

一步步:

首先,选择所有实例:

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

延伸阅读

于 2017-04-11T19:37:20.723 回答
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

于 2017-04-11T22:19:36.577 回答