Json queries with JMEPath and jq
Interactive tools
Jiq
Install jq
Install Golang <1.7
If your environmental variable
echo $GOPATH GOPATH=/home/ubuntu/.local/go
is set, so add
export PATH="$PATH:$HOME/.local/go"
to .bashrc
or .profile
files.
jmespath.terminal
jq
Get a filtered list of instance name, type, virt type, instance id
At the beginning my simple convention for Json is [] is an array and {} is an object.
Get an JSON output of all instances in your AWS accounty
aws ec2 describe-instances --output json | jiq #pipe into jiq
.Reservations[].Instances[] returns all data that we need, therefore we pipe into new object { _key1: XXX, _key2: YYY }. Actually, the keys fields we define now, as: _name, _id, _id, _type.
Filter]> .Reservations[].Instances[] | {_name: .Tags[], _id: .InstanceId, _type: .InstanceType, _virtType: .Hypervisor }
Next, let's select only Tags we are interested in, from a list(object). Therefore, we pipe Tags via select function. Where the Tag name is Name and we want get value {name: .Tags[] | select(.Key=="Name").Value
Full filter command:
[Filter]> .Reservations[].Instances[] | {name: .Tags[] | select(.Key=="Name").Value, id: .InstanceId, type: .InstanceType, virt_type: .Hypervisor }
Awscli queries
$ aws ec2 describe-instances \ --output table \ --query 'Reservations[].Instances[].[Tags[?Key==`Name`] | [0].Value,InstanceId,InstanceType]' And we get a nicely formatted table: ----------------------------------------------- | DescribeInstances | +----------------+--------------+-------------+ | xxxxxxxxxx | i-a0169xxx | r3.large | | yyyyyyyyyy | i-11a46xxx | m3.large | | zzzzzzzzzzzzzz| i-07c4axxx | t2.medium | +----------------+--------------+-------------+