AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Demystifying Aurora Storage costs - Understanding Aurora Storage Costs in AWS Cost Explorer vs Actual Storage Usage
This article shows how to correlate charges in AWS Cost Explorer with actual Aurora Storage usage that is associated with AWS account.
Question :
I recently purged a significant amount of data from my Amazon Aurora database (e.g., storage dropped from ~140 TiB to ~70 TiB), but AWS Cost Explorer only shows approximately a 10% reduction in storage costs in its daily view — not the 50% drop I expected. Why doesn't the cost reduction in Cost Explorer match my actual storage reduction?
Explanation:
Aurora storage is not billed based on your point-in-time storage usage. Instead, it is billed using a GB-Month metric — a time-weighted average of storage consumed over the entire billing month.
A GB-Month (gigabyte-month) is a unit of measurement representing 1 GB of data stored for a full month. If your storage fluctuates during the month (data purges, growth, etc.), the charge reflects the weighted average across all days — not the final day's value or the peak.
This is why:
-
A mid-month data purge will NOT immediately halve your bill — you still accumulated storage-hours at the higher level for part of the month.
-
Cost Explorer shows the GB-Month value for the billing period, which may appear disconnected from your current CloudWatch
VolumeBytesUsedmetric.
HOW GB-Month is calculated
The formula is straightforward:
GB-Month = Σ (Storage_GB on Day_i × 1 day) / Total days in month
Or equivalently:
GB-Month = (Sum of daily storage across all days) / (Number of days in the month)
Example 1: Storage Grows Over the Month
Your Aurora database grows over a 30-day month:
| Period | Storage |
|---|---|
| Day 1–10 | 100 GB |
| Day 11–20 | 150 GB |
| Day 21–30 | 200 GB |
GB-Month Calculation:
GB-Month = (100 GB × 10 days + 150 GB × 10 days + 200 GB × 10 days) / 30 days
= (1,000 + 1,500 + 2,000) / 30
= 150 GB-Month
Result: Even though you have 200 GB at the end of the month, you are charged for 150 GB-Month — the time-weighted average.
Example 2: Storage Shrinks Over the Month (Data Purge)
Your Aurora database is purged and shrinks over a 30-day month:
| Period | Storage |
|---|---|
| Day 1–10 | 100 GB |
| Day 11–20 | 50 GB |
| Day 21–30 | 30 GB |
GB-Month Calculation:
GB-Month = (100 GB × 10 days + 50 GB × 10 days + 30 GB × 10 days) / 30 days
= (1,000 + 500 + 300) / 30
= 60 GB-Month
Result: Even though you have only 30 GB at the end of the month, you are charged for 60 GB-Month — because the first 10 days accumulated cost at the higher 100 GB rate.
Example 3: Large-Scale TiB Purge (Real-World Scenario)
You have an Aurora cluster with ~140 TiB of storage. On Day 15 of a 30-day month, you purge approximately 70 TiB of data — dropping storage from 140 TiB to 70 TiB. You expect Cost Explorer to show a ~50% cost reduction, but it only shows ~10%.
| Period | Storage |
|---|---|
| Day 1–14 | 140 TiB |
| Day 15–30 | 70 TiB |
GB-Month Calculation:
First, convert TiB to GB (1 TiB = 1,024 GB):
- 140 TiB = 143,360 GB
- 70 TiB = 71,680 GB
GB-Month = (143,360 GB × 14 days + 71,680 GB × 16 days) / 30 days
= (2,007,040 + 1,146,880) / 30
= 3,153,920 / 30
= 105,130.67 GB-Month
Compare to what a full month at each level would look like:
| Scenario | GB-Month | Monthly Cost @ $0.10/GB-Mo |
|---|---|---|
| Full month at 140 TiB | 143,360 GB-Mo | $14,336 |
| Full month at 70 TiB | 71,680 GB-Mo | $7,168 |
| Actual (purge on Day 15) | 105,131 GB-Mo | $10,513 |
What happened:
- You expected a 50% reduction → $7,168
- You actually got → $10,513 (a ~27% reduction from the $14,336 baseline)
- Why? The first 14 days at 140 TiB still contributed heavily to the average. The later you purge in the month, the smaller the benefit for that billing period.
Key takeaway: The cost savings are real — but they are prorated. If storage stays at 70 TiB for the entire next month, you will see the full 50% cost reduction:
Next month GB-Month = 71,680 GB × 30 days / 30 days = 71,680 GB-Month → $7,168
Timing Matters: When You Purge Affects This Month's Bill
For the same 140 TiB → 70 TiB purge, here's how the purge day affects the current month's GB-Month:
| Purge Day | GB-Month | Effective Reduction |
|---|---|---|
| Day 1 | 71,680 | 50% (full benefit) |
| Day 5 | 83,573 | 42% |
| Day 10 | 95,467 | 33% |
| Day 15 | 105,131 | 27% |
| Day 20 | 119,467 | 17% |
| Day 25 | 131,360 | 8% |
| Day 28 | 138,581 | 3% |
Bottom line: If you purge data late in the month, Cost Explorer will show only a marginal improvement for that billing period — but the full savings kick in the following month.
Why Cost Explorer Doesn't Show an Immediate Drop After a Purge
When you delete a large amount of Aurora data (e.g., 50 TiB purged mid-month):
- The billing month is not over yet — the high-storage days at the beginning of the month still contribute to the GB-Month average.
- Cost Explorer displays GB-Month — it shows the weighted average, not real-time storage.
- The reduction IS being factored in — just spread across the full billing period.
Key insight: If your storage drops significantly mid-month, you will see the full cost benefit reflected in the following month (when storage is low for the entire period). The current month will show a partial reduction proportional to how many days remained after the purge.
How to Backtrack / Validate Aurora Storage Costs from Cost Explorer
To reconcile what Cost Explorer shows vs. your actual storage usage:
Step 1: Get daily storage usage from CloudWatch
Use the VolumeBytesUsed metric for your Aurora cluster. Pull daily average values for the billing month.
Step 2: Calculate the expected GB-Month
Expected GB-Month = Sum of (Daily_Storage_GB for each day) / Total days in month
Step 3: Compare to Cost Explorer
In Cost Explorer:
- Filter: Service = "Amazon Relational Database Service"
- Usage Type: Filter for your region (e.g.,
USW2-Aurora:StorageUsagefor Aurora Standard, orUSW2-Aurora:StorageIOOptimizedfor I/O Optimized) - Group by: Usage Type
- Metric: Usage Quantity (this shows GB-Month)
The Usage Quantity in Cost Explorer should match your calculated GB-Month from Step 2.
Step 4: Calculate expected cost
Expected Cost = GB-Month × Per-GB-Month rate
Standard Aurora storage rate: $0.10/GB-Month (check your region and pricing tier — if you have a Private Pricing Agreement/PPA, your rate may differ).
Important Notes
- Aurora I/O Optimized vs. Standard: The storage billing mechanic (GB-Month) is the same for both. The difference is in I/O pricing — I/O Optimized includes I/O costs in the storage rate.
- Backtrack and clone storage: Aurora Backtrack's storage (for point-in-time recovery window) is billed separately and also uses GB-Month. This is additive to your base storage cost.
- Private Pricing Agreements (PPA): If your organization has a PPA for Aurora storage, the per-GB-Month rate may differ from published pricing. Factor this into your reconciliation.
Summary
| What you see | Why |
|---|---|
| Purged 50% of data but cost dropped only ~10% this month | The GB-Month average includes high-storage days before the purge |
Cost Explorer doesn't match CloudWatch VolumeBytesUsed | Cost Explorer shows GB-Month (average); CloudWatch shows point-in-time |
| Next month's bill should drop significantly | Correct — if storage stays low for the full month, GB-Month ≈ actual usage |
Related Resources
- Language
- English
Relevant content
asked 3 years ago
AWS OFFICIALUpdated 6 months ago
AWS OFFICIALUpdated a year ago