If you're coming to this page in search of jq related AWS commands, but come from xpath or e4x (jsonpath) domains, then you may find this article helpful: https://github.com/stedolan/jq/wiki/For-JSONPath-users.
Another good learning site: https://shapeshed.com/jq-json/
The jq playground (live testing): https://jqplay.org
A lovely tutorial: https://programminghistorian.org/lessons/json-and-jq
aws autoscaling describe-auto-scaling-instances \
| jq '.AutoScalingInstances[]
| {AutoScalingGroupName, InstanceId}'
outputs
{
"AutoScalingGroupName": "production-john",
"InstanceId": "i-0a2ba7899a72d9e4f"
}
aws autoscaling describe-auto-scaling-instances \
| jq '.AutoScalingInstances[]
| select(.AutoScalingGroupName=="test-main").InstanceId'
outputs
"i-0a2ba7899a72d9e4f"
aws autoscaling describe-auto-scaling-groups \
| jq '.AutoScalingGroups[]
| .Instances
| length'
outputs
0
0
1
where only one of my three test asgs had a running instance at that time, and only one of those....
use the select()
function in jq to get objects that meet a condition, and the contains()
function for fuzzy matching (note, regex is also possible) and build a pretty object {}
out of it. The parenteticals around '(.Instances | length)' are unnecessary, and are only there for stylistic reasons:
aws autoscaling describe-auto-scaling-groups \
| jq -c '.AutoScalingGroups[]
| select(.AutoScalingGroupName | contains("prod"))
| {name: .AutoScalingGroupName, instances: (.Instances | length)}'
outputs
{"name":"production-david","instances":0}
{"name":"production-demo","instances":0}
{"name":"production-john","instances":1}
or, with a different filter:
aws autoscaling describe-auto-scaling-groups \
| jq -c '.AutoScalingGroups[]
| select(.AutoScalingGroupName | contains("john"))
| {name: .AutoScalingGroupName, instances: (.Instances | length)}'
outputs
{"name":"production-john","instances":1}
for a single aws filtered autoscaling group, output the current count of instances as a single return value (unformatted, undescribed), otherwise, if you don't want aws to filter, use a select() | contains()
as above:
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name production-john \
| jq -c '.AutoScalingGroups[]
| .Instances
| length'
or
aws autoscaling describe-auto-scaling-groups \
| jq -c '.AutoScalingGroups[]
| select(.AutoScalingGroupName | contains("john"))
| .Instances
| length'
outputs
1
Output the last 20 'activities' for all ASGs, after outputting some pretty column names and separators, and munge the jq output as into a tsv, then split that a bit more prettily with the unix column
command:
aws autoscaling describe-scaling-activities --max-items 20 \
| jq -r '["Name", "Percent", "Status", "End Time", "Activity"],
["-------------------","--------","------", "--------", "-------"],
(.Activities[] | [.AutoScalingGroupName, .Progress, .StatusCode, .EndTime, .Description])
| @tsv' \
| column -t -s $'\t'
outputs
Name Percent Status End Time Activity
------------------- -------- ------ -------- -------
production-john 100 Successful 2018-01-02T23:45:39Z Terminating EC2 instance: i-014c61d15d7b5ddf9
production-demo 100 Successful 2018-01-02T22:57:56Z Terminating EC2 instance: i-064ed50b7bdcf45bf
production-john 100 Successful 2018-01-02T22:57:29Z Launching a new EC2 instance: i-0a2ba7899a72d9e4f
production-demo 100 Successful 2018-01-02T22:29:57Z Launching a new EC2 instance: i-064ed50b7bdcf45bf
production-john 100 Successful 2018-01-02T22:29:58Z Terminating EC2 instance: i-0ae537515d5f450a5
production-john 100 Successful 2018-01-02T22:29:54Z Terminating EC2 instance: i-0d3b509bca0309e5c
production-john 100 Successful 2017-12-27T18:49:32Z Launching a new EC2 instance: i-014c61d15d7b5ddf9
production-john 100 Successful 2017-12-27T18:47:59Z Launching a new EC2 instance: i-0d3b509bca0309e5c
production-john 100 Successful 2017-12-27T18:47:58Z Launching a new EC2 instance: i-0ae537515d5f450a5
production-john 100 Successful 2017-12-22T21:11:51Z Terminating EC2 instance: i-0c99269e3f50cd600
production-john 100 Successful 2017-12-22T21:11:57Z Terminating EC2 instance: i-0bb30e8302659d1a1
production-demo 100 Successful 2017-12-22T21:11:35Z Terminating EC2 instance: i-0b360ceef3cd7caa3
production-john 100 Successful 2017-12-22T21:06:29Z Launching a new EC2 instance: i-0c99269e3f50cd600
production-john 100 Successful 2017-12-22T21:06:29Z Launching a new EC2 instance: i-0bb30e8302659d1a1
production-john 100 Successful 2017-12-22T21:06:09Z Terminating EC2 instance: i-0df7f4811095f2c1e
production-john 100 Successful 2017-12-22T20:50:09Z Terminating EC2 instance: i-0486ee8f98d2b337f
production-john 100 Successful 2017-12-22T20:43:19Z Launching a new EC2 instance: i-0df7f4811095f2c1e
production-john 100 Successful 2017-12-22T20:43:18Z Launching a new EC2 instance: i-0486ee8f98d2b337f
production-demo 100 Successful 2017-12-22T20:23:00Z Launching a new EC2 instance: i-0b360ceef3cd7caa3
production-demo 100 Successful 2017-12-22T20:20:36Z Terminating EC2 instance: i-001aaa29e71f0c72f