
Amazon S3
AWS’s object storage, and the de facto API most object stores copy.
- What it is
- Object storage
- Type
- Managed service on AWS
- Made by
- Amazon Web Services
- License
- Proprietary
- Facts checked
- 5 October 2026
What it is
Amazon S3 stores objects (files plus metadata) in buckets, addressed by a key such as logs/2026/10/05/app.json. You read and write whole objects over HTTPS, and S3 scales to any number of objects without you provisioning capacity.
Amazon S3 stores objects in buckets and is designed for 99.999999999% (11 nines) durability in every storage class. The choice you make for each object is its storage class, which trades storage price against access cost, how quickly the first byte comes back, and how many Availability Zones hold a copy. Choose well and the same data costs a fraction as much. Choose badly and retrieval fees or minimum storage durations eat the savings.
Why teams pick it
- Designed for 11 nines of durability, with no capacity planning
- Storage classes and lifecycle rules make cold data very cheap
- Its API is the standard: MinIO, Cloudflare R2, Google Cloud Storage and most data tools speak it
Watch out for
- Objects are replaced whole; there’s no appending to or editing part of a file
- Per-request fees add up for millions of tiny files
- Data transfer out to the internet is billed, which can dominate costs for public downloads
- A bucket isn’t a file system: “folders” are key prefixes, and renaming one copies every object under it. Mount it with S3 Files or Mountpoint when software needs files
Alternatives
What all object storage have in common →
Apache OzoneOpen sourceA Hadoop-born object store that serves the same buckets over S3 and as a Hadoop file system.
SeaweedFSOpen sourceA distributed blob store with an S3 gateway and a file system layer, built to store and serve billions of small files.
TigrisCommercialGlobally distributed S3-compatible object storage that moves data to where it’s read, with no egress fees.
Versity S3 GatewayOpen sourceA stateless S3 server that exposes an existing file system, or another object store, through the S3 API.How it fits with other technologies
What uses Amazon S3
- AWS Elastic Beanstalkstores application versions inAmazon S3
- AWS Lambdareads and writes objects inAmazon S3
- celldcan keep all fleet state in a bucket onAmazon S3
- Amazon CloudFrontserves and caches files fromAmazon S3
- Cloudflarecan cache files fromAmazon S3
- Amazon Route 53can alias a domain to a website bucket inAmazon S3
- Amazon VPCreaches privately via an endpointAmazon S3
- RESTis the request style of the API ofAmazon S3
- Amazon SQSoffloads payloads over 1 MiB toAmazon S3
- Amazon Kinesis Data Streamscan deliver records directly toAmazon S3
- Apache Flussmoves log segments and snapshots toAmazon S3
- Apache Kafkasinks topics, through Kafka Connect, toAmazon S3
- Apache Pulsaroffloads old topic data toAmazon S3
- Redpandaoffloads older log segments toAmazon S3
- WarpStreamstores every record inAmazon S3
- Apache Flinkstores checkpoints, savepoints and state inAmazon S3
- Arroyostores checkpoints and Parquet files inAmazon S3
- Felderareads input files fromAmazon S3
- Pathwayreads files and saves state snapshots inAmazon S3
- Quix Streamsreads files from and writes batches toAmazon S3
- Redpanda Connectwrites batched, compressed objects toAmazon S3
- RisingWavekeeps all tables, views and state inAmazon S3
- Streamlingreads Parquet, CSV or JSON files fromAmazon S3
- AWS IoT Corestores messages via rules inAmazon S3
- Eclipse Zenohkeeps stored keys, through a backend, inAmazon S3
- EMQXarchives MQTT messages inAmazon S3
- Apache OpenDALreads and writes objects inAmazon S3
- Apache Ozonespeaks the API ofAmazon S3
- Backblaze B2 Cloud Storagespeaks the API ofAmazon S3
- Cephspeaks the API ofAmazon S3
- Cloudflare R2speaks the API ofAmazon S3
- Garagespeaks the API ofAmazon S3
- Google Cloud Storageaccepts many tools built forAmazon S3
- MinIOspeaks the API ofAmazon S3
- PGSTY Silospeaks the API ofAmazon S3
- RustFSspeaks the API ofAmazon S3
- SeaweedFSspeaks the API ofAmazon S3
- Tigrisspeaks the API ofAmazon S3
- Versity S3 Gatewayspeaks the API ofAmazon S3
- Wasabi Hot Cloud Storagespeaks the API ofAmazon S3
- Zenko CloudServerspeaks the API ofAmazon S3
- Amazon EBSstores its snapshots inAmazon S3
- pgBackRestcan keep repositories inAmazon S3
- Velerostores backups inAmazon S3
- WAL-Gstores backups inAmazon S3
- CedarDBcan keep cold, compressed table data inAmazon S3
- CloudNativePGbacks up WAL and base backups toAmazon S3
- CockroachDBwrites backups and changefeeds toAmazon S3
- Neonkeeps page history inAmazon S3
- Percona Operatorsstore database backups inAmazon S3
- PGO (Crunchy Postgres for Kubernetes)stores pgBackRest backups inAmazon S3
- ScramDBarchives WAL and backups toAmazon S3
- Tursokeeps cloud databases durable inAmazon S3
- Vitesswrites MySQL backups toAmazon S3
- Amazon DynamoDBexports tables to and imports them fromAmazon S3
- Amazon ElastiCacheexports Redis OSS backups to buckets inAmazon S3
- Amazon MemoryDBkeeps and exports snapshots inAmazon S3
- Apache HBasecan keep its HFiles, on Amazon EMR, inAmazon S3
- Amazon Timestreamkeeps InfluxDB 3 data and exports inAmazon S3
- Arccan keep its Parquet files inAmazon S3
- ArcticDBstores versioned DataFrames inAmazon S3
- GreptimeDBstores its data files inAmazon S3
- InfluxDBkeeps its 3.x WAL and Parquet files inAmazon S3
- kdb+reads historical data, via a module, fromAmazon S3
- QuestDBtiers cold partitions (Enterprise) toAmazon S3
- TDenginetiers old data (Enterprise) toAmazon S3
- Pineconebulk-imports Parquet or JSONL files fromAmazon S3
- Vortexreads and writes files inAmazon S3
- TileDBstores arrays inAmazon S3
- XMLis the body format of the REST API ofAmazon S3
- Apache Hudicommonly keeps tables inAmazon S3
- Apache Icebergis commonly stored inAmazon S3
- Apache Paimoncan keep tables inAmazon S3
- Delta Lakecommonly keeps tables inAmazon S3
- DuckLakewrites data files toAmazon S3
- Lancestores tables inAmazon S3
- Apache Polarisvends scoped STS credentials forAmazon S3
- Lakekeepervends scoped STS credentials forAmazon S3
- Project Nessiesigns requests or vends STS credentials forAmazon S3
- Unity Catalogkeeps managed tables on AWS inAmazon S3
- Amazon Athenaqueries data inAmazon S3
- Apache DataFusionreads and writes files inAmazon S3
- Apache Hadoopreads and writes buckets, via S3A, inAmazon S3
- Apache Hivekeeps table files inAmazon S3
- Apache Impalaqueries tables stored inAmazon S3
- Apache Sparkreads and writes files inAmazon S3
- chDBreads and writes files inAmazon S3
- DuckDBreads and writes files inAmazon S3
- GlareDBreads Parquet and CSV files fromAmazon S3
- Polarsreads and writes files inAmazon S3
- Presto (PrestoDB)reads data files fromAmazon S3
- Spice.ai OSSqueries Parquet and CSV files inAmazon S3
- Trinoreads data files fromAmazon S3
- Veloxreads and writes files inAmazon S3
- ClickHousereads and writes files inAmazon S3
- Databendkeeps its tables as Parquet blocks inAmazon S3
- MotherDuckreads and writes files inAmazon S3
- Snowflakeloads files and Iceberg tables fromAmazon S3
- Apache Doriskeeps decoupled-mode data inAmazon S3
- Apache Druidkeeps segments (deep storage) inAmazon S3
- Fireboltkeeps tables in and caches them fromAmazon S3
- Pivotkeeps all table data inAmazon S3
- StarRockskeeps shared-data tables inAmazon S3
- Tinybirdstores data in and ingests files fromAmazon S3
- AWS Lake Formationvends scoped credentials for data inAmazon S3
- Amazon S3 Tablesis a bucket type ofAmazon S3
- Databrickskeeps data on AWS inAmazon S3
- Dremioqueries and stores lake data inAmazon S3
- Spiralkeeps data in your own buckets onAmazon S3
- Airbytereads and writes files inAmazon S3
- Apache NiFireads and writes objects inAmazon S3
- Dagstercan store compute logs inAmazon S3
- Estuarystores collection journals as files inAmazon S3
- Meltanocan keep pipeline state inAmazon S3
- OLakereads files from and writes tables toAmazon S3
- Cubekeeps Cube Store rollup files inAmazon S3
- AWS Cloud Development Kit (CDK)stages deployment assets inAmazon S3
- OpenTofucan keep its state file inAmazon S3
- SSTbacks up its state toAmazon S3
- Terraformcan keep its state file inAmazon S3
- Flociemulates the API ofAmazon S3
- LocalStackemulates the API ofAmazon S3
- Amazon CloudWatchexports log groups toAmazon S3
- Better Stackcan keep your data in your own bucket inAmazon S3
- Datadogarchives logs toAmazon S3
- Fluentduploads hourly log files toAmazon S3
- Logstashreads objects from and archives events toAmazon S3
- WorkOSstreams customers’ audit logs toAmazon S3
- HCP Vault Radarscans objects for secrets inAmazon S3
- HashiCorp Boundarystores session recordings inAmazon S3
Upload, list and fetch with the AWS CLI · bash
aws s3 cp report.parquet s3://acme-analytics/sales/2026/10/report.parquet
aws s3 ls s3://acme-analytics/sales/2026/10/
aws s3 presign s3://acme-analytics/sales/2026/10/report.parquet --expires-in 3600A bucket is not a disk#
A disk (a physical SSD, or a block volume such as EBS) is just a long row of numbered blocks. It knows nothing about files. Ask it for block 81,920 and it returns 4 KB of bytes.
A file system such as ext4, NTFS or XFS is software that turns those blocks into named files inside folders. It tracks which blocks belong to which file, and gives you the operations programs expect: open a file, change bytes in the middle, append to the end, rename a folder in one step, lock a file, set permissions. A network file system (NFS or SMB, as in EFS) runs that software on a server and lets many machines mount the same folders.
An S3 bucket is neither. It is a flat map from keys to objects that you reach over HTTPS with a handful of calls: PUT a whole object, GET all or a byte range of one, LIST keys by prefix, DELETE. There is no file system inside it, so no operating system can mount it out of the box. The folders you see in the console are an illusion: the key photos/2026/a.jpg is one string that happens to contain slashes, and the console groups keys by the text before each /.
That difference is why “just put it on S3” sometimes fails: a program that opens a file and edits part of it, renames a temporary file into place, or takes a lock assumes a file system. To run it against a bucket, something has to translate file operations into S3 calls. That is what mounting S3 means.
Disk, file system or bucket?#
| Disk (block volume) | File system (ext4 on a disk, or EFS) | S3 bucket | |
|---|---|---|---|
| What it stores | Numbered blocks of bytes | Named files in nested folders, built on blocks | Objects (bytes plus metadata) under keys |
| How you reach it | Attached to a machine as a device, e.g. /dev/nvme1n1 | Mounted as a folder, e.g. /data | HTTPS API calls from anywhere with permission |
| Folders | None; it doesn’t know about files | Real directories | None; keys containing / that tools display as folders |
| Change bytes in the middle | Yes, any block | Yes | No; upload the whole object again |
| Append to the end | Yes | Yes | No (Express One Zone directory buckets can) |
| Rename a folder | Not applicable | One instant operation | Copy and delete every object under the prefix |
| Locks and permissions | Not applicable | File locks, owners, chmod | No locks; access is set by IAM and bucket policies |
| Who can use it at once | Usually one machine | One machine (ext4) or many (EFS, over NFS) | Any number of clients |
| Typical latency | Under a millisecond to a few milliseconds | Under a millisecond locally; a few over NFS | Tens of milliseconds per request |
- You never use a disk without a file system: formatting it with
mkfsis the step that puts one on it. A bucket can’t be formatted, which is why mounting one needs a translator.
What mounting a bucket does#
Both apps read files from what looks like an ordinary folder. Underneath, each file operation becomes S3 requests.
Ways to put a file system on top of S3#
None of these changes the bucket itself. Each one runs a file system somewhere else and maps it onto objects. They differ in how much of a real file system you get, and where it runs.
Amazon S3 Files
AWS · NFS · since April 2026A managed file system, built on EFS, linked to a bucket or prefix. EC2, Lambda, ECS and EKS mount it over NFS 4.1/4.2 and get edits, renames, locks and POSIX permissions. Hot small files live on fast storage; changes are written back to the bucket as new object versions.
Mountpoint for Amazon S3
AWS · open source · FUSEA client you run on the machine (mount-s3). Fast for reading big files and writing new ones in one pass, but it deliberately doesn’t fake what S3 can’t do: no editing existing files, no renames (except on directory buckets), no locks or symlinks.
s3fs-fuse, rclone mount
open source · FUSEOlder general-purpose mounts that emulate more of a file system, for example by re-uploading a whole object when one byte changes. Convenient, but slow and surprising under heavy writes, and not safe for several writers.
JuiceFS
open source · own formatA full POSIX file system that keeps its metadata in a database (Redis, PostgreSQL, SQLite and others) and stores file contents as chunks in a bucket. Renames and locks are real, but the bucket holds JuiceFS chunks, not your files as readable objects.
S3 File Gateway
AWS · on-premisesA Storage Gateway appliance in your data centre that serves NFS or SMB shares to local machines and stores each file as an object in S3, with a local cache.
FSx for Lustre
AWS · HPCA high-performance parallel file system for training and simulation jobs. It can be linked to a bucket, presenting its objects as files and exporting results back.
Directory buckets
S3 Express One ZoneNot a mount, but the closest S3 gets to a file system on its own: real directories, appending to objects, and an atomic RenameObject call. Single Availability Zone only.
What survives the translation#
The two AWS options take opposite approaches. Mountpoint is a thin, fast translator that refuses operations S3 can’t do directly. S3 Files is a real file system that syncs to the bucket in the background.
| You try to | Mountpoint for S3 | S3 Files |
|---|---|---|
| Read a file, or part of one | Yes | Yes; small hot files in about a millisecond |
| Write a new file | Yes, written once from start to end | Yes |
| Edit an existing file | No; only replace it whole, with --allow-overwrite | Yes; the bucket gets a new object version |
| Append | Only on Express One Zone, with --incremental-upload | Yes |
| Rename a file or folder | Only on directory buckets | Yes; instant on the mount, copied object by object in the bucket |
| Lock a file | No | Yes, advisory locks |
| `chmod`, `chown`, symlinks | No; permissions are fixed at mount time | Yes; stored as object metadata |
| See the change in the bucket | When the file is closed | After 60 seconds without writes to the file |
| Runs where | Any Linux machine with AWS credentials | Inside a VPC: EC2, Lambda, ECS, EKS |
- S3 Files requires versioning on the bucket. If a file changes in the bucket and on the mount at the same time, the bucket wins and your copy is moved to a lost-and-found folder.
- Neither can read objects in Glacier Flexible Retrieval or Deep Archive until they are restored.
- Renaming a folder with millions of objects through any mount is slow and costs one copy and one delete request per object, because the bucket itself has no folders.
Mount a bucket#
Mountpoint runs on the machine; S3 Files is created once, then mounted like any NFS share.
# Mountpoint for Amazon S3: a client on this machine
mount-s3 my-bucket /mnt/s3
# S3 Files: create a file system linked to the bucket, then mount it
aws s3files create-file-system --bucket arn:aws:s3:::my-bucket \
--role-arn arn:aws:iam::111122223333:role/S3FilesAccess
aws s3files create-mount-target --file-system-id fs-0a1b2c3d \
--subnet-id subnet-0123abcd
sudo mount -t s3files fs-0a1b2c3d:/ /mnt/s3files
echo hello > /mnt/s3files/notes/today.txt # appears as notes/today.txt in the bucketRetrieval speed by class#
Each colour is a request for an object stored in a different class.
Storage classes at a glance#
| Class | Best for | First byte | Availability (designed) | Zones | Minimum duration | Minimum billed size | Retrieval fee |
|---|---|---|---|---|---|---|---|
| S3 Standard | Frequently accessed data | Milliseconds | 99.99% | ≥ 3 | None | None | None |
| S3 Intelligent-Tiering | Unknown or changing access patterns | Milliseconds; opt-in archive tiers take minutes to hours | 99.9% | ≥ 3 | None | None; objects under 128 KB aren’t tiered | None, plus a small monthly fee per monitored object |
| S3 Express One Zone | Latency-critical data next to your compute | Single-digit milliseconds | 99.95% | 1 | 1 hour | None | Per GB |
| S3 Standard-IA | Data read about once a month that must come back instantly | Milliseconds | 99.9% | ≥ 3 | 30 days | 128 KB | Per GB |
| S3 One Zone-IA | Re-creatable data read about once a month | Milliseconds | 99.5% | 1 | 30 days | 128 KB | Per GB |
| S3 Glacier Instant Retrieval | Archives read about once a quarter, instantly | Milliseconds | 99.9% | ≥ 3 | 90 days | 128 KB | Per GB |
| S3 Glacier Flexible Retrieval | Backups and archives read about once a year | Minutes to hours, after a restore | 99.99% once restored | ≥ 3 | 90 days | +40 KB metadata per object | Per GB; bulk restores are free |
| S3 Glacier Deep Archive | Retention for years, read less than once a year | Hours, after a restore | 99.99% once restored | ≥ 3 | 180 days | +40 KB metadata per object | Per GB |
- Every class is designed for 11 nines of durability. The One Zone classes keep data in a single Availability Zone, so losing that zone can lose the data.
- Minimum duration: if you delete, overwrite or transition an object sooner, you’re still billed for the full period.
- Minimum billed size: smaller objects are billed as 128 KB. The two Glacier archive classes add 40 KB of metadata per object: 32 KB billed at the archive rate and 8 KB at the Standard rate.
- Express One Zone stores data in directory buckets and doesn’t support lifecycle transitions.
Intelligent-Tiering, tier by tier#
Intelligent-Tiering moves each object between tiers based on when it was last read, and moves it back to Frequent Access when it’s read again. There are no retrieval fees.
Frequent Access
defaultWhere new objects start. Millisecond access.
Infrequent Access
after 30 daysObjects nobody has read for 30 consecutive days. Still millisecond access, at a lower storage price.
Archive Instant Access
after 90 daysObjects nobody has read for 90 consecutive days. Still millisecond access, and cheaper again.
Archive Access
opt-in · 90+ daysOptional, for data your application can wait for. Objects must be restored first, which takes minutes to hours.
Deep Archive Access
opt-in · 180+ daysOptional. Restores finish within 12 hours, as with Glacier Deep Archive.
Getting archived objects back#
Objects in Glacier Flexible Retrieval or Glacier Deep Archive, or in Intelligent-Tiering’s opt-in archive tiers, can’t be read directly. You first call RestoreObject, which makes a temporary readable copy, and choose how fast that should happen.
| Stored in | Expedited | Standard | Bulk |
|---|---|---|---|
| Glacier Flexible Retrieval, or the Archive Access tier | 1–5 minutes | 3–5 hours | 5–12 hours, free |
| Glacier Deep Archive, or the Deep Archive Access tier | Not available | Within 12 hours | Within 48 hours |
- Expedited times apply to objects under 250 MB, and Expedited requests may be turned away at busy times unless you buy provisioned capacity.
- Standard retrievals are free for objects in Intelligent-Tiering.
- Restore requests are limited to 1,000 per second per account. To restore millions of objects, use S3 Batch Operations.
Choosing a class#
Read often, or you don’t know
Standard · Intelligent-TieringStart in S3 Standard. If access patterns are unknown or change over time, Intelligent-Tiering finds the savings for you without retrieval fees.
Read about once a month
Standard-IACheaper storage with a per-GB retrieval fee. Use One Zone-IA only for data you could re-create, such as replicas or derived files.
Read a few times a year, instantly
Glacier Instant RetrievalMedical images, news archives, uploads from years ago: rarely read, but when they are, someone is waiting.
Read rarely, can wait hours
Glacier Flexible · Deep ArchiveBackups, compliance archives and raw data kept for years. Deep Archive is S3’s cheapest class and an alternative to tape.
Latency is the bottleneck
Express One ZoneML training, interactive analytics and other request-heavy jobs running in the same Availability Zone. AWS quotes up to 10x faster access than S3 Standard.
Lots of small objects
watch outIn the IA classes and Glacier Instant Retrieval, objects under 128 KB are billed as 128 KB, and Intelligent-Tiering doesn’t tier them. Bundle small files, or leave them in Standard.
Automate it with a lifecycle rule#
Lifecycle rules move objects to colder classes as they age and can delete them at the end. Save this as lifecycle.json and apply it with aws s3api put-bucket-lifecycle-configuration --bucket my-bucket --lifecycle-configuration file://lifecycle.json.
{
"Rules": [
{
"ID": "age-out-logs",
"Filter": { "Prefix": "logs/" },
"Status": "Enabled",
"Transitions": [
{ "Days": 30, "StorageClass": "STANDARD_IA" },
{ "Days": 90, "StorageClass": "GLACIER_IR" },
{ "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
],
"Expiration": { "Days": 2555 }
}
]
}Other features worth knowing#
Versioning
Keeps every version of an object, so an overwrite or delete can be undone. Pair it with a lifecycle rule that expires old versions.
Object Lock
Write once, read many: objects can’t be deleted or overwritten until a date you set. Used for compliance and ransomware protection.
Replication
Copies new objects to another bucket in the same or another Region, optionally into a cheaper storage class.
Strong consistency
Since December 2020, a read after a successful write or delete always sees the change, for every object in every Region.
Event notifications
Trigger a Lambda function, an SQS queue, an SNS topic or an EventBridge rule when objects are created or deleted.
S3 Tables
Table buckets that store Apache Iceberg tables and run compaction and snapshot clean-up for you, for a higher storage price plus per-object monitoring and compaction fees.
Very large objects
A single object can be up to 50 TB, raised from 5 TB in December 2025. Upload anything over about 100 MB in parallel parts with multipart upload.
The same idea at other providers#
Every major cloud offers hot-to-archive tiers. The names differ, and so do the details: Google’s Archive class is still readable in milliseconds, while Azure’s Archive tier must be rehydrated first.
| Access pattern | AWS S3 | Google Cloud Storage | Azure Blob Storage |
|---|---|---|---|
| Frequent | Standard | Standard | Hot |
| About monthly | Standard-IA (30-day minimum) | Nearline (30-day minimum) | Cool (30-day minimum) |
| About quarterly | Glacier Instant Retrieval (90 days) | Coldline (90 days) | Cold (90 days) |
| Yearly or less | Glacier Flexible Retrieval (90 days), Deep Archive (180 days) | Archive (365 days), readable in milliseconds | Archive (180 days), offline until rehydrated |
| Automatic tiering | Intelligent-Tiering | Autoclass | Lifecycle rules on last access time |
| A real file system view | S3 Files mount; directory buckets for real directories | Hierarchical namespace buckets; Cloud Storage FUSE to mount | Data Lake Storage hierarchical namespace; BlobFuse2 or NFS 3.0 to mount |
See it in a real stack
Small lakehouse on DuckLake →Worth exploring
kubectl apply a Function manifest that points at code in S3. It explains why you might (one GitOps and RBAC model for pods and functions) but, being AWS’s own post, not the drawbacks.Where it came from2006–2026
In 2005 Amazon’s retail business had a storage problem of its own: product images, videos and other data that had to be kept cheaply and reliably at a scale that kept growing. Werner Vogels later wrote that “the majority of our data needed an object (or key-value) store”, and that the block and file storage on the market couldn’t offer low cost with high reliability.
AWS launched S3 on 14 March 2006 with a one-paragraph announcement. It stored objects of 1 byte to 5 GB under a key you chose, reached over REST or SOAP, for $0.15 per GB-month plus $0.20 per GB transferred, with no minimum fee. Behind it sat about 1 PB of capacity on roughly 400 storage nodes in 15 racks across three data centres. Its stated design principles were decentralization, asynchrony, autonomy and failure tolerance, so that no single machine could become a bottleneck or a single point of failure.
S3’s bucket-and-key HTTP API became the interface many other object stores copy. At its 20th birthday in March 2026 it held more than 500 trillion objects across hundreds of exabytes, served over 200 million requests a second and charged about 2 cents per GB. AWS says code written against it in 2006 still works unchanged.
Why it’s built this way
- A flat key-value store over HTTP, not a file system
- Most of Amazon’s own data was whole objects fetched by key. Leaving out directories, partial writes and locks let S3 spread data over many commodity machines and serve it to any program on the internet.
- Cheap commodity hardware that expects failure
- Building from commodity parts kept costs low, so the system was designed around machines failing: every object is stored in several places and no single node is in charge.
- Availability first, strong consistency later
- Caches in S3’s metadata layer kept it highly available but meant a read could, rarely, return stale data. In December 2020 a cache coherence protocol made every read see the latest write, at no extra cost.
- Pay per GB, with no minimum
- Billing only for what was stored and transferred meant a developer could start with one object and grow without buying capacity up front.
Timeline
- 2006
Launches on 14 March at $0.15 per GB-month; objects up to 5 GB
- 2012
Glacier launches for archives at $0.01 per GB-month (August)
- 2018
Intelligent-Tiering moves objects between tiers automatically
- 2020
Strong read-after-write consistency for every object, at no extra cost (December)
- 2023
Express One Zone offers single-digit millisecond latency
- 2025
Maximum object size rises from 5 TB to 50 TB (December)
- 2026
Turns 20 with 500+ trillion objects; S3 Files mounts buckets over NFS (April)
- Amazon press release: Amazon Web Services Launches (March 2006)
- AWS News Blog: Amazon S3 (launch post, 2006)
- All Things Distributed: Happy 15th birthday, Amazon S3
- All Things Distributed: Diving deep on S3 consistency
- What’s New: Amazon S3 now delivers strong read-after-write consistency (December 2020)
- AWS News Blog: Twenty years of Amazon S3 and building what’s next (March 2026)
- AWS What’s New: Announcing Amazon Glacier (August 2012)
- AWS What’s New: S3 Intelligent-Tiering storage class (November 2018)
- AWS What’s New: Announcing the Amazon S3 Express One Zone storage class (November 2023)
- AWS What’s New: Amazon S3 increases the maximum object size to 50 TB (December 2025)
- AWS News Blog: Launching S3 Files, making S3 buckets accessible as file systems (April 2026)
Sources49 · facts checked 5 October 2026
- S3 User Guide: What is Amazon S3?
- S3 User Guide: Organizing objects in the console by using folders
- S3 User Guide: Performance design patterns (median latencies in the tens of milliseconds)
- Amazon S3 pricing (requests, data transfer, free bulk and Intelligent-Tiering retrievals)
- Amazon S3 storage classes
- S3 User Guide: Understanding and managing Amazon S3 storage classes
- S3 User Guide: How S3 Intelligent-Tiering works
- S3 User Guide: Understanding archive retrieval options
- S3 User Guide: Restoring an archived object
- S3 User Guide: Managing the lifecycle of objects
- S3 User Guide: S3 Express One Zone (up to 10x faster than S3 Standard)
- S3 User Guide: Directory buckets overview
- S3 User Guide: Appending data to objects in directory buckets
- S3 User Guide: S3 Lifecycle for directory buckets (no transitions)
- AWS What’s New: S3 Express One Zone supports atomic renaming of objects (June 2025)
- S3 User Guide: Working with Amazon S3 Files
- S3 User Guide: How S3 Files synchronization works
- S3 User Guide: S3 Files limits and unsupported features
- S3 User Guide: Getting started with S3 Files (CLI tutorial)
- AWS News Blog: Launching S3 Files, making S3 buckets accessible as file systems (April 2026)
- S3 User Guide: Mountpoint for Amazon S3
- Mountpoint for Amazon S3: file system behaviour
- s3fs-fuse README: limitations
- rclone docs: rclone mount
- JuiceFS docs: Architecture
- AWS Storage Gateway docs: What is Amazon S3 File Gateway
- FSx for Lustre docs: Using data repositories with FSx for Lustre
- Amazon EBS volume types: latency by type
- EFS User Guide: Performance specifications
- S3 User Guide: Retaining multiple versions of objects with S3 Versioning
- S3 User Guide: Locking objects with Object Lock
- S3 User Guide: Replicating objects within and across Regions
- S3 User Guide: Amazon S3 Event Notifications
- S3 User Guide: Working with S3 Tables and table buckets
- S3 User Guide: Uploading and copying objects using multipart upload
- AWS What’s New: Amazon S3 now delivers strong read-after-write consistency (December 2020)
- AWS What’s New: Amazon S3 increases the maximum object size to 50 TB (December 2025)
- Cloudflare R2 docs: S3 API compatibility
- MinIO README: S3-compatible object storage
- Cloud Storage docs: Interoperability with Amazon S3 (XML API)
- Cloud Storage docs: Storage classes
- Cloud Storage docs: Autoclass
- Cloud Storage docs: Hierarchical namespace
- Cloud Storage docs: Cloud Storage FUSE overview
- Azure docs: Access tiers for blob data
- Azure docs: Lifecycle management overview (last access time)
- Azure docs: Data Lake Storage hierarchical namespace
- Azure docs: What is BlobFuse2?
- Azure docs: NFS 3.0 protocol support for Blob Storage