I'm trying to output multiple tags from an ec2 instances description. The tag values that I want are Name and aws:autoscaling:groupName.
"Tags": [
{
"Value": "somename",
"Key": "Name"
},
{
"Value": "some-asg-name",
"Key": "aws:autoscaling:groupName"
},
{
"Value": "somethingelse",
"Key": "project"
}
],
Here's what I have so far:
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
Which results in:
somename None i-12345678
Instead of:
somename some-asg-name i-12345678
I tried both double pipe ||
and contains
but can't get the output I need. Also, I'm not sure [1].Value
is the right way to get the 2nd matching tag.
I was thinking about the pipe syntax wrong. This is working:
and outputs:
Also, this solution puts the output into one row per instance, so it can be used with many instances in
--output table
This might be easier to think about if you split filtering your tags and selecting your output into separate pieces.
Step by step:
First, select all instances:
Reservations[].Instances[]
Then pipe to filter for only instances with both of your desired tags:
| [? Tags[? Key == 'Name']] | [? Tags[? Key == 'aws:autoscaling:groupName']]
Then select the InstanceId and tag values:
.[InstanceId,Tags[? Key == 'Name' || Key == 'aws:autoscaling:groupName'].Value]
Full Example:
Example Output
Further Reading