Old RDS snapshots: the basics
Why do manual RDS snapshots quietly become a long-tail bill?
RDS has two kinds of snapshots and they behave nothing alike. Automated snapshots are taken on the schedule you configure (typically daily), retained for 1 to 35 days, and then quietly deleted by RDS as they age out. You set the retention window once and the lifecycle takes care of itself. Manual snapshots are the opposite: you (or a script, or a Terraform run, or a pre-migration runbook) create them, name them, and they sit in S3-backed storage forever until you explicitly delete them.
The trouble is that "forever" is exactly what teams forget about. Someone takes a snapshot before a schema migration to roll back "just in case". The migration succeeds, the team moves on, and 200+ days later the snapshot is still billing at ~$0.095 per GB-month. Multiply that by every database in every region that had a major change in the last two years and the number starts to matter.
RDS-007 flags any manual snapshot older than a configurable threshold — typically 90 to 180 days. The severity is usually LOW per snapshot because a 100 GB snapshot costs around $9.50/month, but the long tail of forgotten snapshots across a fleet adds up quickly. The check isn't telling you to delete blindly; it's telling you that nothing in your tooling has touched this snapshot in months, and it deserves a human eye.
In this lesson you'll learn the difference between automated and manual RDS snapshots, why orphaned manual snapshots are the single most common RDS waste pattern, and how to investigate and prune the long tail safely. You'll see the AWS CLI calls to list manual snapshots by age, the Snapshot Archive tier for compliance retention, and the AWS Backup plan that replaces ad-hoc manual snapshots for good.
The snapshot that outlived the database
Manual snapshots survive the deletion of the database they came from. When you delete an RDS instance, the wizard offers to take a "final snapshot" — that snapshot is a manual snapshot, retained forever, and it keeps billing long after the database is gone. The most common audit finding on long-running AWS accounts is a directory of final-snapshot-* entries from databases that haven't existed in years. They're the cloud equivalent of a storage unit nobody renewed but the lock is still on.
Pruning snapshots in action
Nina is the SRE on call for a payments platform. The monthly finance review flags $480 of unexplained RDS spend on a service that was decommissioned 14 months ago. The database is gone — the bill isn't.
She pulls a list of every manual snapshot in the account, sorted by age. The top of the list is a stack of pre-migration snapshots from the old payments stack — eight of them, between 100 GB and 400 GB each, all over 12 months old. The 400 GB one alone is costing $38/month.
She cross-references the snapshot identifiers against the team's runbooks and Slack history. Every one of them is a "rollback safety net" from a migration that completed cleanly months ago. She archives the two with regulatory retention requirements and deletes the rest.
First, list every manual snapshot in the region, sorted by creation date to surface the oldest first.
Manual snapshots in eu-west-1, sorted by age.
For the two snapshots Nina needs to keep for compliance, she moves them to the Archive tier to cut storage cost by ~87%.
Archiving a snapshot that has to be kept but won't be restored frequently.
Snapshot billing under the hooddeep dive
RDS snapshots are stored in S3 (a managed bucket you don't see) and billed at roughly $0.095 per GB-month for the Standard tier — about double the rate of EBS snapshots, because RDS snapshots include the redo log positioning and consistency metadata needed to restore a transactional database. Crucially, RDS bills the allocated storage of the source instance at snapshot time, not the actual used data on disk. A snapshot of a 1 TB database that's only 200 GB full still bills against 1 TB.
Snapshots within the automated retention window of an active instance are free — AWS does not charge for backup storage up to 100% of the database's allocated storage. The moment you cross that threshold, or the moment a snapshot is manual, every GB-month is billable. This is also why deleting a database doesn't free its snapshot storage: once the source is gone there's no "included" backup storage left to offset against, so every GB of every retained snapshot starts billing at full rate.
The Snapshot Archive tier (storage-type=archive) drops the rate to ~$0.0125 per GB-month — about 87% cheaper — at the cost of restore latency and a minimum 90-day storage commitment. Restore from archive can take hours rather than minutes. It's the right home for compliance retention copies that you legitimately have to keep but realistically will never restore. Cross-region copies and cross-account shares each create independently-billed copies, so a single 400 GB snapshot replicated to two DR regions is actually paying for 1.2 TB of storage.
# Inventory: every manual snapshot older than 180 days, with size and age in days.
aws rds describe-db-snapshots \
--snapshot-type manual \
--query "DBSnapshots[?SnapshotCreateTime<='$(date -u -d '180 days ago' +%FT%TZ)'].[DBSnapshotIdentifier,AllocatedStorage,SnapshotCreateTime,Engine]" \
--output table
# Estimate the monthly cost of the long tail (Standard tier).
aws rds describe-db-snapshots --snapshot-type manual \
--query 'sum(DBSnapshots[].AllocatedStorage)' \
--output text | awk '{ printf "~$%.2f/month\n", $1 * 0.095 }' What is the impact of leaving old snapshots around?
The direct impact is the bill. A single 100 GB manual snapshot costs roughly $9.50 per month — small enough to ignore, large enough to compound. Across a typical mid-size estate with two years of pre-migration, pre-deployment, and final snapshots, the long tail is often $300 to $1,500 a month in pure storage spend that nobody owns. Over a 12-month window, that single 100 GB snapshot is $114; a 400 GB one is $456.
The second-order impact is operational fog. When a snapshot survives the deletion of its source database, the lineage breaks: there is no longer any way to look up which application owned it, what schema it represents, or whether the data inside is still subject to retention rules. Two years later, the on-call who finds it has no way to decide whether deleting it is safe, so it stays — billing forever, helping no one.
On the compliance side, untracked snapshots are a liability. GDPR, HIPAA, and PCI-DSS all care about how long personal or cardholder data lives. A snapshot taken before a privacy-driven data-deletion event still contains the deleted data — and if nobody knows the snapshot exists, the deletion was never really complete. Audit findings on "data still present in backups beyond retention policy" are some of the most common and most expensive to remediate.
And finally, cross-region and cross-account sharing multiplies everything. A snapshot copied to a DR region for legitimate reasons is fine; a snapshot copied to a DR region and then forgotten about, while the source has also been forgotten, is double-billing for nothing.
How do you clean up safely?
Snapshot hygiene is a four-step loop: inventory, justify, archive-or-delete, and prevent recurrence. Each step is cheap; running them quarterly keeps the long tail from ever forming.
1. Inventory every manual snapshot
Use aws rds describe-db-snapshots --snapshot-type manual per region, sorted by SnapshotCreateTime. Capture identifier, source DB, age, allocated storage, region, and current tier. Don't forget cross-region copies (--snapshot-type manual lists copies separately) and cross-account shared snapshots in linked accounts. Build the list once, then refresh it on a schedule — most teams find a quarterly inventory is enough.
2. Justify each snapshot before touching it
For every snapshot older than your threshold, ask three questions: does the source database still exist; is the data inside still subject to a retention policy; and would the team realistically restore from this rather than the most recent automated backup? If the answer to all three is no, it's safe to delete. If the data has a retention requirement but you won't restore from it, move it to the Archive tier instead of deleting.
3. Delete or archive — never both ignored
Delete with aws rds delete-db-snapshot --db-snapshot-identifier .... For archived retention, use modify-db-snapshot --storage-type archive — remember the 90-day minimum commitment and the slower restore. Tag the survivors with retention=compliance and an expiry date so the next inventory pass can act on them automatically. Whatever you do, do not leave a snapshot in Standard tier with no owner and no decision recorded.
4. Move new backups to AWS Backup
Stop taking ad-hoc manual snapshots. Replace them with an AWS Backup plan that defines retention, cross-region copy rules, lifecycle to cold storage, and an audit trail in a single place. Then enforce "no manual snapshots" with an SCP or a config rule, so the next pre-migration runbook can't accidentally create a fresh 12-month liability. AWS Backup is the long-term answer; the snapshot prune is just cleaning up the years of debt before that.
# Delete every manual snapshot older than 365 days whose source DB no longer exists.
aws rds describe-db-snapshots --snapshot-type manual \
--query "DBSnapshots[?SnapshotCreateTime<='$(date -u -d '365 days ago' +%FT%TZ)'].DBSnapshotIdentifier" \
--output text | tr '\t' '\n' > stale-snapshots.txt
# Review the list. Then, only after a human has signed it off:
while read -r snap; do
aws rds delete-db-snapshot --db-snapshot-identifier "$snap"
done < stale-snapshots.txt Quick quiz
Question 1 of 5You find a 400 GB manual snapshot tagged pre-migration-payments-2024-10. The source database was deleted 14 months ago, but legal says you have to keep the data for another 4 years for regulatory retention. What's the right next move?
You scored
0 / 5
Keep learning
Dig deeper into RDS backup mechanics and the AWS Backup model that replaces ad-hoc snapshots.
- Amazon RDS backup and restore documentation Official reference for automated backups, manual snapshots, and restore mechanics.
- Amazon RDS Snapshot Archive How the Archive storage tier works, including pricing, minimum retention, and restore behaviour.
- AWS Backup developer guide The recommended replacement for ad-hoc manual snapshots — lifecycle, cross-region, audit, and compliance reporting in one place.
- FinOps Foundation — Cloud Rate and Usage Optimization Where snapshot hygiene fits in the broader usage-optimization capability of the FinOps lifecycle.
You've completed Prune old manual RDS snapshots. You now know how automated and manual snapshots differ, why the long tail forms, and the four-step loop — inventory, justify, archive-or-delete, prevent recurrence — that keeps it from coming back. The next time RDS-007 lights up on a 200-day-old snapshot, you'll have a real decision framework instead of a guilty tab left open.
Back to the library