Amazon S3
Choosing Storage Classes Without Triggering the Minimum-Duration Trap
- Expected object lifetime vs. each candidate storage class's minimum duration
- Actual access frequency (drives IA vs. Standard, not assumption)
- Object size (Glacier Instant Retrieval's 128 KB minimum billable size matters for small objects; Flexible/Deep Archive's 40 KB metadata overhead is the equivalent cost to model for those two classes)
- Retrieval urgency if archived (Expedited/Standard/Bulk pricing differs significantly)
Production premise
Storage class selection spans roughly a 23x cost range for the same bytes: S3 Standard at ~$0.023/GB down to Glacier Deep Archive at ~$0.00099/GB.
The cheaper classes trade that discount for real constraints. They carry minimum storage durations, minimum billable object sizes, and retrieval fees that do not exist on Standard.
Failure mode & inflection point
Glacier Flexible Retrieval and Glacier Instant Retrieval both carry a 90-day minimum storage duration. Glacier Deep Archive carries 180 days. Delete or transition an object before that window closes and S3 charges a prorated early-deletion fee: you pay for the remaining days as if the object were still there.
The trap fires through lifecycle policies. A policy that transitions short-lived objects — log files cleaned up after 60 days, say — straight to Glacier at day 30 can end up costing more than leaving them on Standard-IA. The early-deletion fee plus Glacier's per-object metadata overhead eats the discount.
That overhead is not uniform across Glacier classes, and treating it as if it were is an easy mistake. Glacier Flexible Retrieval and Deep Archive each add 40 KB of metadata overhead per object, split: 8 KB billed at Standard rates, 32 KB billed at the respective Glacier class's own rate. Glacier Instant Retrieval does not carry this overhead at all — it relies solely on its 128 KB minimum billable object size instead (see Decision Drivers below). Conflating the two mechanics, treating Instant Retrieval as if it also had the 40 KB metadata charge, overstates its cost for small objects.
Production guardrail
Match the storage class's minimum duration to the object's actual expected lifetime, not just its access frequency. An object you'll delete in 45 days has no business transitioning to a class with a 90-day minimum, regardless of how attractive the per-GB rate looks.
Model the full lifecycle — transition timing, minimum duration, expected deletion date — before writing the lifecycle rule, not just the steady-state storage rate. And model the right overhead mechanic for the specific Glacier class in play: the 40 KB metadata charge for Flexible/Deep Archive, the 128 KB minimum object size for Instant Retrieval. They are two different mechanics, not one generic number for both.