AWS S3 Storage Classes: How to Choose the Right One
Published on · Updated on
Rewrote the guide to compare current S3 storage classes, access and restore behavior, lifecycle constraints, and cost tradeoffs.
Amazon S3 storage classes let you choose how each object is stored based on how often it is read, how quickly it must be available, and how much resilience the workload needs. The lowest storage rate alone does not determine the lowest total cost: retrieval, requests, lifecycle transitions, minimum storage durations, and extra copies can also matter.
A general purpose bucket can contain objects in different storage classes. If you do not specify a class when uploading an object, Amazon S3 uses S3 Standard. You can set a class on upload or use an S3 Lifecycle rule to transition eligible objects later. Start by identifying your access pattern and recovery requirement, then compare the full cost for your Region on the Amazon S3 pricing page.
How to choose an S3 storage class
Use this comparison as a first pass. “Available in milliseconds” means the object can be read directly; Glacier Flexible Retrieval and Glacier Deep Archive require a restore before normal access.
| Storage class | Best fit | Access and resilience | Cost conditions to check |
|---|---|---|---|
| S3 Standard | Frequently accessed data, active application content, and data without a proven colder pattern | Direct millisecond access; data is stored across multiple Availability Zones | No minimum storage duration |
| S3 Intelligent-Tiering | Access patterns that are unknown or change over time | Automatically moves eligible objects among Frequent, Infrequent, and Archive Instant Access tiers; those tiers retain direct access. Optional Archive Access and Deep Archive Access tiers require a restore | Eligible objects incur monitoring and automation charges. Objects smaller than 128 KB remain in Frequent Access and are not monitored. Standard or Bulk restores have no retrieval charge; expedited restores from optional Archive Access are charged |
| S3 Standard-IA | Long-lived data read infrequently, but needed immediately when requested | Direct millisecond access; stored across multiple Availability Zones | Retrieval charges, a 30-day minimum storage duration, and a 128 KB minimum billable object size |
| S3 One Zone-IA | Infrequently read data that can be recreated if its Availability Zone is lost | Direct millisecond access; stored in one Availability Zone and not resilient to that zone's loss | Retrieval charges, a 30-day minimum storage duration, and a 128 KB minimum billable object size |
| S3 Glacier Instant Retrieval | Long-lived archive data that is rarely read but must be available immediately | Direct millisecond access across multiple Availability Zones | Retrieval charges, a 90-day minimum storage duration, and a 128 KB minimum billable object size |
| S3 Glacier Flexible Retrieval | Archive data that can wait minutes to hours for access | Submit a restore request for a temporary copy before reading; data is designed for multiple Availability Zones | Retrieval and restore charges, a 90-day minimum storage duration, and per-object metadata overhead |
| S3 Glacier Deep Archive | Long-term data that is rarely accessed and can wait hours for restoration | Submit a restore request for a temporary copy before reading; data is designed for multiple Availability Zones | Retrieval and restore charges, a 180-day minimum storage duration, and per-object metadata overhead |
| S3 Express One Zone | Latency-sensitive workloads that benefit from consistent single-digit millisecond access | High-performance storage in one Availability Zone; requires an S3 directory bucket | Compare its storage and request pricing for the workload, and account for single-zone resilience |
These classes are not interchangeable labels for “hot,” “warm,” and “cold” data. AWS documents their properties and constraints in its S3 storage class comparison. Two special cases sit outside this regional comparison: S3 Outposts (OUTPOSTS) is only for objects in buckets on AWS Outposts, and AWS lists Reduced Redundancy Storage (RRS) but recommends using S3 Standard instead.
A practical selection process
Start with access and recovery
- Frequent or not yet measured: use S3 Standard as the simple default while you learn the workload.
- Unpredictable or changing: consider S3 Intelligent-Tiering when the possible tier change justifies its per-object monitoring charge. Its automatic Archive Instant Access tier still supports direct access; enable the optional asynchronous archive tiers only when restore delays are acceptable.
- Predictably infrequent, immediate reads required: compare Standard-IA with Glacier Instant Retrieval. Model expected reads and keep the object-size and minimum-duration rules in view.
- Data can wait for a restore: compare Glacier Flexible Retrieval and Deep Archive using expected retention, restore frequency, and recovery time—not storage rate alone.
- Data can be recreated: One Zone-IA can be an option when the workload accepts losing the stored copy if its Availability Zone is lost. Do not use it as the only copy of irreplaceable data.
- Latency is the limiting requirement: evaluate Express One Zone for directory-bucket workloads and plan for its single-zone failure boundary.
Understand what archive access means
S3 Glacier Instant Retrieval is not the same as the archived S3 Glacier Flexible Retrieval and Deep Archive classes: it provides millisecond access. For Flexible Retrieval and Deep Archive, submit a restore request and wait for S3 to make a temporary copy available for the number of days you specify. During that period, you pay for both the archive and the restored copy. S3 Intelligent-Tiering's optional Archive Access and Deep Archive Access tiers also require a restore; once restored, those objects return to the Frequent Access tier. Check the current S3 restore guidance before designing a recovery process.
Use lifecycle rules with their costs in view
When an object's lifecycle is predictable, an S3 Lifecycle rule can transition it after a chosen age or expire it when retention ends. An example policy might keep new data in Standard while it is active, then transition it only after observed use has dropped. A schedule is a management rule, not proof that a transition will lower the bill.
Standard-IA and One Zone-IA have a 30-day minimum storage duration. Glacier Instant Retrieval and Glacier Flexible Retrieval have 90-day minimums; Deep Archive has a 180-day minimum. Deleting, overwriting, or transitioning an object before its minimum is over can leave a prorated minimum-duration charge. Under current S3 Lifecycle defaults, objects smaller than 128 KB do not transition to any storage class. Configurations created before September 2024 can retain the previous behavior until they are modified. A size filter can allow small-object transitions, but per-object transition and storage costs may outweigh savings for small files. See AWS's Lifecycle transition constraints before setting a rule.
Getting started with S3 object storage
If you are new to S3, first understand the relationship between buckets, object keys, and objects in this S3 fundamentals guide. Then create a bucket, upload a few representative objects, and choose a storage class per object. Observe actual reads and retention before applying a lifecycle rule across a large prefix. For a deeper treatment of transition timing, filters, expiration, and version handling, see the guide to S3 Lifecycle rules.
Revisit the choice when access patterns or recovery targets change. Check current AWS pricing for the bucket's Region and include requests, retrievals, data transfer, and any replication copies in the estimate. AWS lists the full set of current class properties in its storage class documentation.