TL;DR: Spot Instances are spare EC2 capacity AWS rents at up to 90% off — as long as they don't need it back, which they signal with a 2-minute warning. Since 2017 there's no bidding: you pay the current Spot price (set by long-term supply/demand) up to a max you choose. It's the single biggest cost lever in AWS for fault-tolerant, stateless, checkpointable workloads (batch, rendering, CI/CD, ML training) — and terrible for databases and strict-uptime customer-facing apps. Design for the constraints and it transforms the bill.
The numbers
- Typically 50–90% off On-Demand — e.g. m5.xlarge ~$0.192/hr On-Demand vs ~$0.038/hr Spot (~80%).
- 2-minute warning via instance metadata + a CloudWatch event; interruption frequency varies by type/region (AWS publishes it — some instances run for weeks uninterrupted).
- Max price protects you: exceed it and the instance terminates, so most teams set max = On-Demand price (you almost always pay far less and never overpay).
- Field examples: a nightly ETL checkpointing to S3 every few minutes cut compute 75%; a stateless REST API ran 70% of capacity on Spot behind an ALB (m5/m5a/m5n across 3 AZs) with seamless UX.
Do this
- Confirm the workload survives interruption — the golden rule: if it can handle a 2-minute-notice shutdown and resume, Spot is a candidate.
- Diversify with instance-type flexibility — allow c5.large, c5a.large, c5n.large across multiple AZs; independent Spot prices and interruption rates dramatically improve availability.
- Handle the 2-minute warning gracefully — finish or checkpoint the current task to persistent storage (S3/EFS/DB), deregister from load balancers, shut down cleanly; test it in dev, don't wait for the real thing.
- Set max price to On-Demand so a rare spike never terminates you or costs more than standard rates.
- Check the Spot Instance Advisor / interruption-frequency data and prefer current-gen types (m5/c5/r5/Graviton) with good availability.
Gotchas
- Databases and stateful apps without checkpointing are a bad fit — an interruption mid-write is data risk, not a cost win.
- Single-type, single-AZ requests are fragile — when that pool gets scarce or pricey your fleet collapses; diversification is the fix.
- Older generations have poor availability — stick to current-gen.
- The 2-minute window is the whole design constraint — architecture without graceful shutdown eventually loses work.
Skip this if
- It's a customer-facing production service with strict uptime, a database, or any stateful app that can't checkpoint — run it On-Demand or Reserved Instances.
- You want the operational complexity handled for you — Spot Fleet and EC2 Fleet manage diversified Spot capacity at scale, Auto Scaling Groups mix Spot with an On-Demand baseline, AWS Batch with Spot orchestrates batch, and Fargate Spot brings the same model to serverless containers. Cover the steady baseline with Savings Plans.