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 is roughly a 23x cost range for the same bytes (S3 Standard at ~$0.023/GB down to Glacier Deep Archive at ~$0.00099/GB) — but the cheaper classes trade that discount for real constraints: minimum storage durations, minimum billable object sizes, and retrieval fees that don't 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. A lifecycle 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, because the early-deletion fee plus Glacier's per-object metadata overhead eats the discount — and that overhead isn't uniform across Glacier classes, which is an easy mistake to make. 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 doesn't 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, not one generic number for both.