我试图从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
,但无法获得我需要的输出。另外,我不确定||
是获得第二个匹配标记的正确方法。
答案 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