Amazon EBS snapshots capture changed blocks from a baseline, so snapshots will often be much smaller than the source volume. Billing is based on the actual size, which is nice. However, I cannot find a way to determine the snapshot actual size. ec2-describe-snaphots only provides the size of the volume that was snapshotted.
If for no other reason, I need this information to verify billing. But I'd also like to have it because I may find that by reconfiguring my volumes, and what I do with them, I can reduce the size of my incremental snapshots.
Amazon does not currently provide a method to report on the storage used by snapshots other than the total usage and cost numbers for all snapshots in the account.
Snapshots of the same or related volumes can share storage (where blocks have not changed between snapshots) so this makes it difficult to define the size of a single snapshot.
A new snapshot only saves blocks that have been modified since the last snapshot, but it keeps pointers to the previously saved blocks that have not been modified.
If you delete a single snapshot, it would only free up the blocks that are not shared by any other snapshot (whether created before or after the one you're deleting).
Blocks on the EBS volume that have not been written to are not included in the snapshot.
Snapshot blocks are compressed before storage, further saving you in storage costs.
I wrote this small script for determining the snapshot's size. Right now doesn't take any params, it just gets all snapshots.
https://github.com/akirsman/Snapshots/blob/master/snapshotsSize.py