Cloud Storage Options

AWS (and other cloud platforms) offer multiple storage types, each with different characteristics and costs. Picking the right type for the right data is one of the larger cost levers.

This page covers the major options and the patterns that work.

The three categories

Object storage (S3, GCS, Azure Blob)

Use for:

S3 is the universal default. If unsure, start with S3.

Block storage (EBS for EC2, persistent disks for GCE)

Use for:

File storage (EFS, FSx, Azure Files)

Use for:

S3 storage classes

The biggest cost lever in S3:

ClassUse caseCost (rough)
StandardHot data$0.023/GB-month
Intelligent-TieringUnknown access patternsAuto-moves; small monitoring fee
Standard-IA (Infrequent Access)Warm; <1 access/month$0.0125/GB-month
One Zone-IASame; one AZ only$0.01/GB-month
Glacier Instant RetrievalArchive; rare access; instant$0.004/GB-month
Glacier Flexible RetrievalArchive; minutes-hours retrieval$0.0036/GB-month
Glacier Deep ArchiveLong-term archive; 12-hour retrieval$0.00099/GB-month

The cost difference is 23x between Standard and Deep Archive. For data that's truly cold, the savings are real.

Lifecycle rules

Automate the transition:

- After 30 days → Standard-IA
- After 90 days → Glacier
- After 1 year → Glacier Deep Archive
- After 7 years → Delete

Lifecycle rules are free. Set them up; they save real money on long-tail data.

Storage class trade-offs

S3 patterns

Versioning

Protect against accidental deletes/overwrites. Slightly higher cost (multiple versions stored).

Encryption

Always encrypt. SSE-S3 (AWS-managed keys) or SSE-KMS (your KMS keys). Enable at bucket level.

Static website hosting

S3 + CloudFront for static sites. Cheap, fast, scales automatically.

Pre-signed URLs

Generate time-limited URLs for direct upload/download without going through your application. See FileUploadPatterns.

Cross-region replication

For disaster recovery. Asynchronous replication to another region. Useful for compliance and DR.

EBS patterns

Volume types

For most workloads, gp3 is right.

Snapshots

Point-in-time copies stored in S3. Use for:

Snapshots are incremental — only changed blocks are stored. Cost is roughly proportional to actual data, not volume size.

EFS patterns

EFS is expensive. Use only when you actually need shared POSIX semantics. For most "share files across instances" needs, S3 with code that fetches/uploads is cheaper.

The use case where EFS earns its cost: legacy applications you can't refactor that expect a shared filesystem.

Cost optimization

Lifecycle to colder classes

Most data follows a power-law: heavily-accessed at first, rarely accessed later. Lifecycle rules capture this naturally.

Delete what you don't need

Old logs, old backups, old build artifacts. Set retention; delete what's past retention.

Compression

Pay for less data. Gzip text files; Parquet/ORC for analytical data.

Multi-part uploads with abort

Incomplete multipart uploads accumulate; configure lifecycle to abort after N days.

Inventory and analyze

S3 Inventory provides reports of what's stored. S3 Storage Lens provides usage and cost analytics. Use them.

Common failure patterns

Further Reading