Amazon S3

Virtually unlimited object storage — PUT and GET whole files over HTTP while AWS handles the durability.

Verified against AWS documentation · 2026-09-09

Key facts

  1. 01Objects sit in a flat bucket, not folders — "photos/2026/cat.jpg" is one long key and the slashes are cosmetic
  2. 0211 nines durability across 3+ AZs by default; bucket names are globally unique and the Region is locked at creation
  3. 03Storage class is set per object, not per bucket — Lifecycle rules transition and expire objects automatically as they age
  4. 04New buckets are secure by default: Block Public Access on, ACLs off, SSE-S3 encryption on every object
  5. 05Limits: 0 bytes to 50 TB per object (raised from 5 TB in Dec 2025 — older exam material still says 5 TB), 5 GB max single PUT, multipart above that

Exam triggers

Phrases and scenarios that point here.

  • "Store any amount of data", "durable", "highly available", "static files" → S3 is the default storage answer
  • "Static website, no servers to manage" → S3 static website hosting, usually with CloudFront in front
  • "Retain for 7 years", "cheapest possible archive", "rarely accessed" → Lifecycle into Glacier classes; unknown access pattern → Intelligent-Tiering
  • "Recover accidentally deleted files" → Versioning; "nobody can delete it, not even an admin" → Object Lock

Not this service

  • Several EC2 instances need the same files mounted as a drive → EFS
  • A disk for one instance's OS or a database's data files → EBS

Use cases

  1. 01Hosting a static site or SPA — drop the build output in a bucket, put CloudFront in front, and there's no web server to patch or scale
  2. 02Storing user uploads — the app hands out a presigned URL and the file goes browser-to-S3, never touching your servers
  3. 03Data lake landing zone — raw CSV and Parquet land in a bucket and Athena queries them in place, with no database to load first
  4. 04Backups and log archive — nightly database dumps and CloudTrail/ALB logs pile up here, with a Lifecycle rule dropping them into Glacier after 90 days
  5. 05Handoff between systems — a batch job writes a file, S3 Event Notifications fire Lambda, the next stage picks it up; the bucket is the integration point

How it's charged

  1. 01Storage is per GB-month at the object's storage class rate — and with Versioning on, every version is a separately billed object
  2. 02Requests are billed on top: PUT, COPY, POST and LIST cost more than GET, DELETE is free, and millions of tiny objects can cost more in requests than in storage
  3. 03Data in is free; data out to the internet is per GB (first 100 GB/month free across AWS). Out to another AWS service in the same Region, or to CloudFront, is free
  4. 04Cold classes trade storage price for retrieval price: per-GB retrieval fees plus minimum storage durations — 30 days for IA, 90 for Glacier Instant and Flexible, 180 for Deep Archive. Delete early and you still pay the remainder
  5. 05Standard-IA, One Zone-IA and Glacier Instant Retrieval have a 128 KB minimum billable object size, so a bucket of 10 KB thumbnails bills as if each were 128 KB. Lifecycle transitions are charged per request too

Commonly confused with

References