S3 storage classes compared: Standard vs IA vs Intelligent-Tiering vs Glacier
Short answer: the per-GB price is the smallest part of the decision. Object size, how often you read the data and how long objects live decide which class is cheapest, and the rows that look cheapest in the price table are the ones most likely to cost more.
What each class charges (us-east-1 list prices)
Standard: $0.023 per GB-month, $0.0004 per 1,000 GETs, no retrieval fee, no minimums.
Standard-IA: $0.0125 per GB-month, $0.01 per GB retrieved, $0.001 per 1,000 GETs, billed as at least 128 KB per object and at least 30 days.
Intelligent-Tiering: $0.023 / $0.0125 / $0.004 per GB-month for frequent / infrequent / archive-instant data, plus $0.0025 per 1,000 objects monitored. No retrieval fee. Objects under 128 KB are never tiered.
Glacier Instant Retrieval: $0.004 per GB-month, $0.03 per GB retrieved, $0.01 per 1,000 GETs, 128 KB and 90 day minimums.
The three traps
Small objects. 100 GB spread over 10 million objects is 10 KB each. IA bills them as 128 KB, so you pay for about 1.2 TB. Moving them is a price increase.
Retrieval. Reading back a quarter of your data every month at $0.01 per GB adds up to more than the storage saving once reads cross roughly a quarter of the stored volume.
Short life. Logs or exports deleted after a week still bill 30 days in IA and 90 in Glacier IR.
Measure your buckets
In S3 Storage Lens (or an S3 Inventory query in Athena) get GB stored and object count per bucket or prefix.
From Storage Lens activity metrics or CloudWatch request metrics get GET requests and GB downloaded per month.
Paste one row per bucket or prefix into the advisor, or run node cli.mjs analyze rows.csv.
Questions
Is Standard-IA always cheaper than Standard?
No. It stores for about 46% less per GB but bills a 128 KB minimum per object, 30 days minimum, and $0.01 per GB retrieved. Small objects, frequently read data and short-lived objects usually cost more there.
When does Intelligent-Tiering win?
When objects are at least 128 KB and you cannot predict which ones go cold. You pay $0.0025 per 1,000 objects per month to monitor, but there are no retrieval fees and cold data drops to cheaper tiers automatically. For 100 million small objects the monitoring fee alone can exceed the saving.
Why not put everything in Glacier Instant Retrieval?
It stores at about $0.004 per GB but charges $0.03 per GB retrieved and $0.01 per 1,000 GETs, with a 90-day minimum and 128 KB minimum object size. It wins for data read once or twice a year and loses badly on anything read regularly.