Old EBS snapshots: the backup pile quietly inflating your bill
Short version: EBS snapshots cost $0.05/GB-month and nobody ever deletes them. Backups from volumes and AMIs that were removed years ago keep billing. For snapshots you must retain but rarely touch, the archive tier is ~75% cheaper ($0.0125/GB-month). Here is how to find the pile, delete what is dead, and archive what is not.
Why snapshots pile up
Snapshots are incremental, so the first one is full-size and later ones only store
changed blocks - which makes them feel cheap. But they never expire on their own,
and automation (AMI bakes, backup jobs, create-image) generates them constantly.
Delete the volume or deregister the AMI and the underlying snapshots often stay,
billing indefinitely. A multi-year account routinely has thousands.
Step 1 - Find old snapshots you own
aws ec2 describe-snapshots --owner-ids self \
--query 'sort_by(Snapshots, &StartTime)[].{ID:SnapshotId,GiB:VolumeSize,Started:StartTime,Desc:Description}' \
--output table
Just the ones older than 90 days:
cutoff=$(date -u -d '90 days ago' +%Y-%m-%dT%H:%M:%SZ)
aws ec2 describe-snapshots --owner-ids self \
--query "Snapshots[?StartTime<='${cutoff}'].{ID:SnapshotId,GiB:VolumeSize,Started:StartTime}" \
--output table
Step 2 - Check before you delete
The critical check: is a snapshot backing an AMI? Deleting one that is breaks the AMI. List snapshots referenced by your AMIs:
aws ec2 describe-images --owners self \
--query 'Images[].BlockDeviceMappings[].Ebs.SnapshotId' --output text | tr '\t' '\n' | sort -u
Anything in that list is in use - leave it (or deregister the AMI first if the AMI itself is obsolete).
Step 3 - Delete or archive
Delete a truly dead snapshot:
aws ec2 delete-snapshot --snapshot-id snap-0abc123def456
For compliance/DR snapshots you must keep but rarely restore, move them to the archive tier instead of deleting:
aws ec2 modify-snapshot-tier --snapshot-id snap-0abc123def456 --storage-tier archive
Caveats: deleting an incremental snapshot is safe - AWS re-parents the blocks later snapshots need, so you never corrupt a chain. The real risk is AMIs (above). Archive has a 90-day minimum and restore takes 24-72h plus a retrieval fee, so only archive things you genuinely will not need quickly.
Do it automatically
Cloud Cost Analyzer's ebs-snapshot-archive rule surfaces old, large, rarely
accessed snapshots and estimates the archive/delete savings - alongside 89 other
cost rules:
curl -sSL https://releases.dragonfractal.com/install.sh | sh
cca scan --provider aws
The agent runs in your environment with read-only access, so your AWS credentials never leave it. See the AWS setup and required IAM permissions
CLI Reference
aws ec2 describe-snapshotsaws ec2 delete-snapshotaws ec2 describe-images