Using JMESPath and the aws command
16 Apr 2021
If one runs any aws command, one could potentially get
a lot of json output! For instance:
aws --output json rds describe-db-cluster-snapshots \ --db-cluster-identifier my-aurora-cluster \ --snapshot-type manual \ --max-items 110
Yields all of this:
{
"DBClusterSnapshots": [
{
"AvailabilityZones": [
"us-east-1a",
"us-east-1c",
"us-east-1d"
],
"DBClusterSnapshotIdentifier": "aurora-prod-mysql-pre-upgrade-11-23-19",
"DBClusterIdentifier": "my-aurora-cluster",
"SnapshotCreateTime": "2019-11-23T13:00:06.128000+00:00",
"Engine": "aurora-mysql",
"AllocatedStorage": 468,
"Status": "available",
"Port": 0,
"VpcId": "vpc-457afa21",
"ClusterCreateTime": "2019-06-12T17:43:03.459000+00:00",
"MasterUsername": "mymasterusername",
"EngineVersion": "5.7.12",
"LicenseModel": "aurora-mysql",
"SnapshotType": "manual",
"PercentProgress": 100,
"StorageEncrypted": true,
"KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/a41b1046-22ea-4a54-928b-53d73a43841b",
"DBClusterSnapshotArn": "arn:aws:rds:us-east-1:999999999999:cluster-snapshot:aurora-prod-mysql-pre-upgrade-11-23-19",
"IAMDatabaseAuthenticationEnabled": false
},
{
"AvailabilityZones": [
"us-east-1a",
"us-east-1c",
"us-east-1d"
],
"DBClusterSnapshotIdentifier": "my-snapshot-2020-12-09-01-00",
"DBClusterIdentifier": "my-aurora-cluster",
"SnapshotCreateTime": "2020-12-09T01:00:33.122000+00:00",
...
But If one only wants to print the needed fields of each record, one can do
aws --output json rds describe-db-cluster-snapshots \ --db-cluster-identifier my-aurora-cluster \ --snapshot-type manual \ --max-items 110 \ --query 'DBClusterSnapshots[*].[DBClusterSnapshotIdentifier, SnapshotCreateTime, DBClusterSnapshotArn]'
and get
[
[
"aurora-prod-mysql-pre-upgrade-11-23-19",
"2019-11-23T13:00:06.128000+00:00",
"arn:aws:rds:us-east-1:999999999999:cluster-snapshot:aurora-prod-mysql-pre-upgrade-11-23-19"
],
[
"my-snapshot-2020-12-09-01-00",
"2020-12-09T01:00:33.122000+00:00",
"arn:aws:rds:us-east-1:999999999999:cluster-snapshot:my-snapshot-2020-12-09-01-00"
],
[
"my-snapshot-2020-12-10-01-00",
"2020-12-10T01:00:33.926000+00:00",
"arn:aws:rds:us-east-1:999999999999:cluster-snapshot:my-snapshot-2020-12-10-01-00"
],
...
And if one wants to sort the output by SnapshotCreateTime, one can do
aws --output json rds describe-db-cluster-snapshots \ --db-cluster-identifier my-aurora-cluster \ --snapshot-type manual \ --max-items 110 \ --query 'DBClusterSnapshots[*].[DBClusterSnapshotIdentifier, SnapshotCreateTime, DBClusterSnapshotArn] | sort_by(@, &[1])'
and get
[
[
"aurora-prod-mysql-pre-upgrade-11-23-19",
"2019-11-23T13:00:06.128000+00:00",
"arn:aws:rds:us-east-1:999999999999:cluster-snapshot:aurora-prod-mysql-pre-upgrade-11-23-19"
],
[
"my-snapshot-2020-12-09-01-00",
"2020-12-09T01:00:33.122000+00:00",
"arn:aws:rds:us-east-1:999999999999:cluster-snapshot:my-snapshot-2020-12-09-01-00"
],
[
"my-snapshot-2020-12-10-01-00",
"2020-12-10T01:00:33.926000+00:00",
"arn:aws:rds:us-east-1:999999999999:cluster-snapshot:my-snapshot-2020-12-10-01-00"
],
...
More details here:
- https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html
- https://stackoverflow.com/questions/59455647/how-to-sort-json-output-from-aws-cli-using-jmespath
- https://opensourceconnections.com/blog/2015/07/27/advanced-aws-cli-jmespath-query/