Back to Blog
    Cost Optimization

    AWS Reserved Instances vs Spot Instances: Which Should You Choose?

    Kostiantyn DementievJuly 15, 20256 min read

    Short answer: Reserved Instances for the workloads that never turn off. Spot for the ones that can be killed and restarted without anybody noticing. Most accounts want both, applied to different tiers of the same application.

    The gap between On-Demand and the cheapest correct pricing model is large enough to matter: up to 75% for a Reserved Instance, up to 90% for Spot. The reason teams leave that money on the table is rarely ignorance of the discount. It is uncertainty about which workloads can safely take it.

    Reserved Instances: predictable savings

    Reserved Instances discount up to 75% in exchange for committing to a specific instance family in a specific region for one or three years. The discount is automatic, applied against matching usage on your bill. There is nothing to deploy.

    Good fit for Reserved

    • Production databases
    • Web servers with steady traffic
    • Always-on application servers
    • Long-running batch processes
    • Anything that has not been resized in a year

    Think twice about

    • Development environments
    • Seasonal applications
    • Experimental workloads
    • Anything you are mid-way through right-sizing

    Reserved Instance types

    TypeFlexibilityDiscountBest for
    StandardLowUp to 75%Stable workloads
    ConvertibleHighUp to 54%Applications still changing shape

    Spot Instances: maximum savings

    Spot sells you spare EC2 capacity at up to 90% off On-Demand. The catch is in the terms: AWS can reclaim the instance with two minutes of warning whenever it needs the capacity back.

    Read this before you switch

    Spot Instances are not simply cheaper instances. They are a different failure model, and they require the application to tolerate it. Never move a stateful workload to Spot without first proving it survives an abrupt termination.

    Spot practices that hold up

    1. Diversify instance types

    Spread across several instance types and availability zones. Configure Auto Scaling Groups with 3 to 5 candidate types so a shortage in one pool does not take the fleet down.

    2. Handle the interruption notice

    Poll the instance metadata service for the termination warning and drain connections inside the two minute window. Untested drain logic is the same as no drain logic.

    3. Keep state off the instance

    Anything that must survive goes to EBS, S3, RDS, or ElastiCache. Instance store on a Spot node is scratch space, nothing more.

    Decision framework

    Four questions decide the pricing model for any given workload:

    Assess the workload

    • Runtime duration: how long does it run, and does it ever stop?
    • Fault tolerance: can it survive sudden termination without data loss?
    • Flexibility: will it run on more than one instance type?
    • Time sensitivity: is there a deadline that a restart would blow?

    Hybrid is the normal answer

    Most well-tuned accounts run both models inside one application:

    Example: a web application

    • Database: Reserved, because it is always on
    • Base web capacity: Reserved, sized to the traffic floor
    • Scale-out capacity: Spot, absorbing the peaks
    • Background jobs: Spot, with retries

    Cost comparison example

    One m5.large running continuously for a year, at us-east-1 list pricing:

    Pricing modelHourly rateAnnual costSavings
    On-Demand$0.096$841Baseline
    Reserved (1 year, Standard)$0.062$54335%
    Spot (average)$0.029$25470%

    Spot pricing moves, so treat that row as an average rather than a quote. Check the Spot price history for your instance family and region before you plan around it.

    How to roll this out

    Start with Reserved

    Pull three to six months of usage data, find the flat line underneath your daily pattern, and reserve 60 to 70% of it. That is the part of your bill you are certain to pay next year regardless.

    Then add Spot, carefully

    Begin where an interruption is invisible: CI runners, batch jobs, dev environments. Once the drain logic has been exercised in anger a few times, extend it to the scale-out tier of production.

    Not sure how much of your fleet should be Reserved or Spot? Our AWS cost audit maps it out for you, with pricing fixed before we start.

    From a real engagement

    On a data governance SaaS (NDA), commitment coverage plus right-sizing took 46% off the monthly AWS bill. The split looked much like the example above: Reserved for the databases and the traffic floor, Spot for batch and scale-out. Application performance was unchanged.