TL;DR: Spot is unused EC2 sold at 70–90% off with a 2-minute reclaim warning. That sounds fatal for game servers until GameLift's FleetIQ turns the 2-minute window into something players never see: it drains the instance, moves or finishes sessions, and brings replacement capacity online — steering toward the healthiest Spot pool and falling back to your On-Demand buffer only when Spot is genuinely thin. You write a graceful-shutdown hook; GameLift runs the fleet-level dance. Result: routinely 70–85% lower compute, negligible player impact.
The numbers
- Spot discount: typically 80–90% off On-Demand; narrows to 50–60% under extreme regional demand; capped at the On-Demand price — you can never pay more.
- Reclaim warning: 2 minutes — long enough to drain new traffic, fire a shutdown hook, and migrate sessions.
- Session-length → ratio: short (<10 min) → 90–95% Spot; medium (10–60 min) → 85/15, expect 70–80% off; long (1h+) → 60–70% Spot unless you checkpoint; persistent/MMO → 50–70% Spot only with stateless servers.
- Field examples: an AAA studio hit $2M+/yr savings post-rollout; a mobile studio with 2–5 min sessions ran 95% Spot scaling to near-zero off-peak.
Do this
- Start conservative at 70/30 Spot/On-Demand, watch interruption metrics 2–4 weeks, then dial Spot up on real numbers.
- Diversify aggressively — allow 5–10 instance types across families (c5, c5a, c5n, c6i, c7i…). Each type is its own Spot pool; pinning to one defeats FleetIQ entirely.
- Implement the graceful-shutdown hook: on interruption signal, stop accepting new players, finish or migrate the session, persist external state, exit clean. This is the most important code change.
- Wire CloudWatch alarms on
PercentInterrupted,ActiveInstances,IdleInstances; alarm above ~2–3% sustained (widen diversity or raise the On-Demand buffer). - Drill interruptions in staging — AWS lets you simulate them; discover broken shutdown logic in dev, not at peak.
Gotchas
- Diversification, not the Spot ratio, is the key knob. One instance type = nowhere to go when that pool dries up; 5–10 types = astronomically unlikely to all vanish at once.
- GameLift Anywhere fleets can't use Spot — the savings story only applies to AWS-hosted GameLift fleets.
- The "Spot is unreliable" reputation is stale — modern Spot + diversification + FleetIQ hits 99%+ effective availability. The teams that get burned pinned one type, ran 100% Spot with no buffer, or skipped the shutdown hook.
- Local server state is the real blocker — if interruption means lost progress, refactor to stateless (state in DynamoDB/Aurora/ElastiCache) before pushing Spot up.
Skip this if
- Latency-critical competitive/ranked/eSports modes — run those On-Demand or Reserved; save Spot for casual/practice (often 70–80% of traffic). See Spot Instances for the general Spot model.
- Very long sessions with no checkpointing — a 2-hour match restarting from scratch is a bad experience until you add save/resume.
- The team has no bandwidth to write interruption hooks — "just turn on Spot" without a shutdown path eventually bites.