One of my recurring annoyances is that the AWS cli utility doesn’t support a CSV output option. This command fixes this (at least for snapshot data).
aws ec2 describe-snapshots --owner-ids 12345 --output json |jq -r '.Snapshots[] | [.Description, .Encrypted, .OwnerId, .Progress, .SnapshotId, .StartTime, .State, .VolumeId, .VolumeSize, .StorageTier] | @csv' >snapshots.csv
One thing to note here is that jq is case sensitive. If you specified “OwnerID” rather than “OwnerId” you would get a blank column.
The secret is that you have to tell jq how to format the input. the aws ec2 describe-snapshots output looks like this:
{
"Snapshots": [
{
"Description": SourceSnapshot snap-0324302948024a",
"Encrypted": false,
"OwnerId": "1234567890",
"Progress": "100%",
"SnapshotId": "snap-01abc2342df",
"StartTime": "2018-09-25T19:19:03+00:00",
"State": "completed",
"VolumeId": "vol-ffffffff",
"VolumeSize": 3,
"StorageTier": "standard"
},
{ ...
}
}
So in this case, you tell jq that the first level is “Snapshots”, then you enumerate the data within that, so the @csv part will properly wrap the fields without inadvertently causing an issue when a comma is thrown into the description field.