
S3 storage costs are often the easiest line item to reduce — and the easiest to break trying. The trap is treating storage class as a one-time decision instead of a property that should follow object access patterns.
The pricing reality
Standard storage is $0.023/GB-month at us-east-1. Standard-IA drops to $0.0125 — 46% cheaper. Glacier Instant Retrieval is $0.004 — 83% cheaper. Glacier Deep Archive is $0.00099 — 96% cheaper.
For a 100 TB bucket of cold logs, the difference between Standard and Glacier Deep Archive is about $26,000/year. Tier moves are usually the highest-leverage cost optimization you can make in an afternoon.
But every tier has trade-offs: retrieval fees (Standard-IA charges per-GB retrieved), minimum storage durations (Glacier Deep Archive has 180 days), and retrieval latency (Glacier Flexible Retrieval and Deep Archive have hours-long restore windows, while Glacier Instant Retrieval returns data in milliseconds). Moving an actively-queried bucket to Glacier Deep Archive is a great way to break dashboards and incur expensive emergency restores.
Step 1: classify your buckets by access pattern
Before any lifecycle policy, audit each bucket. Three categories matter:
Hot data — accessed daily. Stays on Standard. Examples: application assets, current-day logs, live datasets.
Warm data — accessed weekly to monthly. Candidate for Standard-IA. Examples: older application data, recent backups, audit logs from the last 90 days.
Cold data — accessed quarterly or less. Candidate for Glacier Instant or Deep Archive. Examples: compliance archives, old backups, raw event data older than a quarter.
CloudWatch metrics or S3 storage class analysis can do this automatically —
BucketSizeBytes plus NumberOfObjects over time tells you the access shape. Or look at CloudTrail S3 events filtered by GetObject over the last 90 days.Step 2: lifecycle policies, not manual migrations
The mistake teams make is manually changing storage class on a snapshot of objects. New objects keep arriving as Standard, the bucket fills up at the old rate, and the savings flatten in two months.
The fix is S3 Lifecycle policies — declarative rules that transition objects automatically. A common configuration for a log bucket:
This compounds. Once set, every new object follows the same path with no manual intervention.
Step 3: protect against the retrieval trap
Standard-IA charges $0.01 per GB retrieved. Glacier classes charge for restore requests and retrieval. If your app does periodic full scans of a tier-IA bucket — common for analytics jobs — the retrieval cost can exceed the storage savings.
Before moving an analytical bucket to IA, instrument and measure. If GetObject volume on the bucket exceeds about 10% of total stored bytes per month, IA will probably cost more than Standard. Stay on Standard or split the bucket — hot objects in one prefix on Standard, cold in another on IA.
Step 4: enable Intelligent-Tiering for unpredictable patterns
For buckets where access patterns are unclear or expected to shift, S3 Intelligent-Tiering moves objects between tiers automatically based on monitored access. It costs about $0.0025 per 1,000 objects monitored — usually trivial — and it eliminates the need to guess.
We recommend Intelligent-Tiering as the default for new application data buckets unless you have specific knowledge of the access pattern. For buckets where you already know the pattern is cold-and-stable (archives, compliance logs), lifecycle policies with explicit transitions are cheaper.
What this looks like at scale
A team running 200 TB of mixed S3 data:
Total: roughly $2,300/mo, $27,600/yr — for an afternoon of configuration. No app breakage if the access patterns were measured correctly first.
What breaks if you skip step 1
Common failure modes:
The math is the same in every case: storage class moves are extremely high-ROI when access patterns are measured. They're extremely high-risk when guessed.
---
Refine surfaces S3 storage class opportunities ranked by dollar impact, including the access-pattern analysis to do it safely. See cost optimization.