Amazon Simple Storage Service
S3
You need to store files that any number of machines can read and write, and you never want to think about disks running out of space.
Reach for it when
- Storing user uploads, profile pictures, and PDF invoices for a web application.
- Hosting static website assets such as HTML, CSS, JavaScript, and images directly.
- Serving as a data lake for large-scale analytics datasets from Athena or EMR.
Do not reach for it when
- Storing frequently updated transactional application data with low latency — use RDS or DynamoDB instead.
- Mounting a shared filesystem to legacy applications via standard POSIX protocols — use EFS instead.
- Managing structured application logs that need sub-second query and search capabilities — use CloudWatch Logs instead.
Alternatives, and how to choose
| Service | Pick it instead when |
|---|---|
| EFS | Choose it when you need a POSIX-compliant file system that can be mounted simultaneously by multiple EC2 instances. |
| EBS | Choose it when you need block storage with sub-millisecond latency mounted to a single EC2 instance. |
How you pay
- The model
- Pay per GB stored per month, plus fees for API request volume and external data transfer out.
- The line item that surprises people
- Enabling bucket versioning without lifecycle rules keeps every historic file version and deleted file billable forever.
What trips people up
- A bucket policy granting s3:GetObject on arn:aws:s3:::bucket grants nothing on objects; object paths need the /* suffix.
- The S3 consistent read model is immediate for new uploads but changes to existing keys can suffer from propagation delays.
- Bucket names are globally shared across all AWS customers; once a bucket name is taken, you cannot use it in any region.
Verify the live service
This page is a concept reference. Cost models are qualitative; confirm the current offering, Region and pricing before deploying.