Skip to main content

Old EBS snapshots: the backup pile quietly inflating your bill

· 3 min read
Founder, Dragon Fractal · ex-AWS engineer

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-snapshots
  • aws ec2 delete-snapshot
  • aws ec2 describe-images