SaveMyCert
Log in
5 of 5 free questions left today·for 30 a day
Design Cost-Optimized Architectures

Cost-Optimized Compute: Spot vs Reserved vs Savings Plans, and Lambda vs EC2

24 min readSAA-C03 · Design Cost-Optimized ArchitecturesUpdated

Cost-optimized compute is compute that meets every stated requirement — performance, availability, interruption tolerance, location — at the lowest total price. SAA-C03 Task 4.2 tests it through four decisions: how to pay (On-Demand, Reserved Instances, Savings Plans, Spot, and how to layer them and size the commitment); what to run on (Lambda, Fargate or EC2, and which instance family, size and generation); how capacity follows demand (horizontal versus vertical scaling, scheduled versus dynamic scaling, hibernation, non-production schedules); and where the work runs (CloudFront edge caching and edge functions, Local Zones, Outposts and Wavelength, and the right load balancer). It also covers the cost tools that make those decisions visible across accounts: Compute Optimizer, Cost Explorer, AWS Budgets, the Cost and Usage Report, cost allocation tags and consolidated billing. Questions nearly always ask for the MOST cost-effective design: several options run the workload, and one pays the least without breaking a requirement. By the end of this lesson you will map any workload shape to a purchase mix and a compute service, size a commitment correctly, and explain why each losing option overpays or breaks a constraint.

What you’ll learn
  • Choose among On-Demand, Standard and Convertible Reserved Instances, Compute and EC2 Instance Savings Plans, and Spot, and know which discounts reach Fargate and Lambda
  • Size a commitment to the measured hourly floor — after existing Reserved Instances, after right-sizing — knowing it bills every hour of the term
  • Build an Auto Scaling group with a mixed instances policy, and an ECS capacity provider strategy that mixes FARGATE and FARGATE_SPOT
  • Right-size with Compute Optimizer, pick the instance family by bottleneck, and use cost allocation tags, Cost Explorer, Budgets and the CUR for the right jobs
  • Compare Lambda, Fargate and EC2 by utilization, and pick scheduled, dynamic or no scaling — or hibernation — for a given demand pattern
  • Choose between CloudFront Functions and Lambda@Edge, between Local Zones, Outposts and Wavelength, and between ALB, NLB and Gateway Load Balancer

The four ways to pay for EC2: On-Demand, RIs, Savings Plans, Spot

EC2 can be paid for in four ways, and every compute cost question starts from this menu. On-Demand is the baseline: full price, per-second billing, no commitment — right for unpredictable, short-lived or unproven workloads. Everything else is a discount bought with either a commitment or a tolerance for interruption.

Reserved Instances discount a specific instance configuration for a 1- or 3-year term. Standard RIs give the deepest discount (up to 72%) but lock the instance family and cannot be exchanged for a different family or OS. They can still be modified — for example switching Availability Zone or scope, or changing size within the same family for Linux — and an unwanted Standard RI can be listed on the Reserved Instance Marketplace. Convertible RIs give a shallower discount (up to 66%) in return for the right to exchange into other families, sizes or operating systems during the term. Longer terms and more upfront payment (all, partial or no upfront) deepen the discount.

Savings Plans commit to a fixed amount of compute spend per hour for 1 or 3 years instead of to an instance configuration; eligible usage above the commitment bills On-Demand. Compute Savings Plans are the flexible variant: the discount (up to 66%) follows usage across instance family, size, Region, OS and tenancy, and it also applies to Fargate and Lambda. EC2 Instance Savings Plans commit to one instance family in one Region for a deeper discount (up to 72%, matching Standard RIs) and stay flexible across sizes, OS and tenancy within that family — but they cover EC2 only, so usage that moves to Fargate or Lambda leaves the plan.

InstrumentMax discountWhat it locksCovers Fargate/Lambda?
Standard RIUp to 72%Instance family (and Region or AZ); no exchangesNo
Convertible RIUp to 66%Nothing permanently — exchangeable to other families, sizes, OSNo
EC2 Instance Savings PlanUp to 72%One instance family in one RegionNo
Compute Savings PlanUp to 66%Only the hourly spend amountYes
SpotUp to 90%Nothing — but AWS can reclaim with a two-minute noticeFargate Spot exists; no Spot for Lambda

Flexibility and depth trade against each other: the instruments that lock a family pay the most, the ones that follow you anywhere pay less. Compute databases are a separate menu — RDS and other database services have their own reserved pricing and AWS now also sells Database Savings Plans, covered in the database cost lesson.

On-Demand Capacity Reservations are not a discount. They guarantee capacity of a given type in one Availability Zone and bill at the On-Demand rate whether instances use them or not; you combine them with a Savings Plan or regional RI to get a discount on top. Buy one for guaranteed capacity (for example, a launch event or DR), never to cut cost.

One more lever sits under the menu: where you run. EC2 prices differ by Region, so workloads with no latency or residency constraint — batch, analytics, DR standby — can run in a cheaper Region, while user-facing tiers stay near their users. Placement interacts with commitments: Standard and Convertible RIs and EC2 Instance Savings Plans are bound to one Region, so moving steady work to another Region strands them, while a Compute Savings Plan follows usage into any Region. Read the usage pattern, then match commitment, flexibility need, interruption tolerance and placement freedom to the option.

The layered mix: commitments under the baseline, Spot on top

The canonical Task 4.2 answer is a layered mix, because real workloads are not one shape: measure the steady 24/7 baseline and cover it with a Savings Plan or Reserved Instances; run the predictable-but-variable layer above it On-Demand behind Auto Scaling; and push interruptible work — batch, queue processing, CI, analytics — onto Spot. Each layer gets the deepest discount its reliability requirement allows, and no layer overcommits.

Workload shapeOption mixWhy it wins
Steady, always-on baseline (runs 24/7 for years) on a stable familyEC2 Instance Savings Plan or Standard RIs sized to the baselineDeepest commitment discount (up to 72%) on usage you were going to buy anyway
Steady baseline, but instance needs may change or move to containers/serverlessCompute Savings Plan (or Convertible RIs for EC2-only change)Discount (up to 66%) survives family, size, Region and OS changes, and follows usage to Fargate and Lambda
Predictable daily/seasonal variation above the baselineOn-Demand behind Auto Scaling (scheduled or dynamic)Pay full rate only for the hours the extra capacity runs
Interruption-tolerant batch, queue, CI or analytics workSpot (diversified across pools)Up to 90% off; a two-minute reclaim costs only a retried task
Unpredictable, short-term or unproven workloadOn-DemandNo commitment to regret; measure first, commit later

Sizing the commitment

A commitment is sized to the measured hourly floor, not the average or the peak, because it bills the same amount every hour of the term, used or not, and an hour's unused commitment cannot carry over. That has three consequences the exam leans on:

  • It cannot follow a schedule. A Savings Plan is one hourly amount for the whole term; there is no business-hours-only or nightly-window plan (AWS no longer sells Scheduled Reserved Instances). Part-time capacity is On-Demand or Spot, not committed.
  • Flexibility moves the discount, not the bill. A Compute Savings Plan's discount follows instances when you resize or re-family them, but the committed dollars per hour do not shrink. Downsize after buying and part of the commitment goes unused for the rest of the term — so right-size first. Cost Explorer's Savings Plans and RI purchase recommendations are calculated from your recent usage (a 7-, 30- or 60-day lookback), so on an over-provisioned fleet they recommend an oversized commitment.
  • Existing RIs come first. AWS applies Reserved Instance discounts before Savings Plans (and EC2 Instance Savings Plans before Compute Savings Plans). A new plan should be sized to the steady usage your current RIs leave uncovered; sizing it to the whole floor pays for commitment with nothing to discount until the RIs expire.

The exam presents the mix as a multi-part workload description; the correct option layers all three, and distractors commit to the peak, run everything On-Demand, put the un-interruptible tier on Spot, or size a new commitment over usage that is already reserved.

Spot done safely: mixed instances policies in Auto Scaling

Spot's discount is only usable if the architecture absorbs interruptions, and the exam expects you to know the machinery, not just the caveat. Spot fits work that is stateless, fault-tolerant, or checkpointable: batch and big-data processing, containerized workers, CI/CD builds, rendering, queue-driven jobs where a killed task simply returns to the queue. It never fits databases, stateful sessions, or anything a two-minute notice would corrupt — an option putting the web tier's only capacity or an RDS workload on Spot is self-eliminating.

The safe pattern is an Auto Scaling group with a mixed instances policy, which blends purchase options and instance types in one group. You set an On-Demand base — a fixed number of instances that are always On-Demand — and an On-Demand percentage above base, with the remainder Spot. A queue-processing fleet might run a small On-Demand base so work never fully stalls, with the bulk on Spot for the discount.

The second half of the policy is diversification. Each combination of instance type and Availability Zone is a separate Spot capacity pool, and pools run dry independently. Specifying multiple instance types (and sizes and generations) across multiple AZs gives the group many pools to draw from, so one pool's reclamation doesn't drain the fleet; the price-capacity-optimized allocation strategy then launches Spot from the pools with the best balance of low price and low interruption likelihood. A single-type, single-AZ Spot request is the fragile distractor. Complementary tactics: handle the two-minute interruption notice to checkpoint or drain, keep work idempotent and queue-driven so retries are free, and let capacity rebalancing proactively replace at-risk instances.

One mechanical note: modern Spot has no bidding. You pay the current Spot price, which AWS adjusts gradually on long-term supply and demand, and interruptions are driven by capacity, not by being outbid — so answer options built around "bidding strategies" are dated distractors.

Exam questions describe a fault-tolerant processing fleet and ask for MOST cost-effective yet resilient: the answer combines a mixed instances policy, a modest On-Demand base, Spot for the rest, and diversified types across AZs. Options are graded on exactly those pieces — all-Spot with one instance type fails resilience; all-On-Demand fails cost.

Right-sizing: Compute Optimizer, families, generations, and Graviton

Purchase options discount the meter rate; right-sizing shrinks the meter itself, and the exam treats an oversized instance as waste no discount excuses. Right-sizing means matching the instance family to the workload's bottleneck and the size to its measured utilization. Families at Associate level are recognition work: general purpose (m) for balanced web and application tiers, compute optimized (c) for CPU-bound batch, encoding, and high-performance web serving, memory optimized (r, x) for in-memory caches and databases, storage optimized (i, d) for high local-disk I/O, and accelerated (g, p) for GPU work. A memory-bound workload on compute-optimized instances is mis-sized in kind, not just in size — the fix is the right family, sometimes at a smaller size and lower price.

The evidence comes from monitoring, and the recommendation engine is AWS Compute Optimizer: it analyzes CloudWatch utilization history and recommends specific instance-type changes, flagging over-provisioned and under-provisioned resources across EC2, Auto Scaling groups, EBS, and Lambda. When a scenario asks how to "identify underutilized instances" or "get right-sizing recommendations," Compute Optimizer is the purpose-built answer; the other cost tools (Cost Explorer, Budgets, the CUR, cost allocation tags) answer different questions, compared in the next section.

Two evergreen rules finish the section. Newer generations deliver better price-performance — a current-generation instance typically does the same work cheaper than its predecessor, so "upgrade the instance generation" is a legitimate cost answer, not just a performance one. And Graviton (AWS-designed Arm processors) offers better price-performance again for compatible workloads — Linux, open-source stacks, containers, and managed services; Compute Optimizer even flags Graviton candidates. On the exam, right-sizing answers beat "negotiate a bigger discount on the oversized fleet": fix the size, then discount what remains — a commitment bought on an over-provisioned fleet locks in the waste for one to three years, because its hourly amount stays the same after you downsize. Expect questions that show low CPU utilization on a large instance and grade you on downsizing (or re-family-ing) before any purchase-option change, and tool-swap distractors that offer Budgets to "identify underutilized instances" or Compute Optimizer to "alert on overspend."

Cost visibility across accounts: tags, consolidated billing, and the right tool

The cost tools each answer one question, and Task 4.2 tests whether you pick the right one. Compute Optimizer recommends; Cost Explorer analyzes; AWS Budgets alerts; the Cost and Usage Report itemizes; cost allocation tags attribute.

NeedToolWhat it does not do
Find over- or under-provisioned EC2, Auto Scaling groups, EBS, Lambda, ECS on FargateAWS Compute OptimizerDoes not alert on spend or report by team
Explore spend trends, filter and group by service, account or tag; Savings Plans/RI recommendations and coverage/utilization reportsAWS Cost ExplorerRecommendations reflect current usage — they do not know you plan to downsize
Get notified when actual or forecast cost or usage crosses a threshold (optionally run an action)AWS BudgetsDoes not produce cost breakdown reports
Most granular line-item billing data, delivered to S3 for Athena/QuickSight analysisAWS Cost and Usage Report (CUR / Data Exports)Not an alerting or recommendation tool
Break cost down by team, project or environmentCost allocation tagsA tag does nothing for billing until it is activated

Cost allocation tags must be activated. Tagging resources is not enough: a user-defined tag key appears in Cost Explorer and the CUR only after it is activated as a cost allocation tag in the Billing console — in an organization, by the management account — and by default only for costs incurred from activation onward. The management account can request a cost allocation tag backfill of up to 12 months to apply an activated tag to earlier costs, for resources that carried the tag at the time.

Consolidated billing in AWS Organizations combines member accounts into one bill. Usage is pooled for volume pricing, and Reserved Instance and Savings Plans discount sharing is on by default: a plan applies first to the account that bought it, then to matching usage in other accounts, so one account's idle commitment covers another's steady usage without buying more. The management account can turn sharing off for individual accounts — then their commitments apply only inside the purchasing account. That is the answer to "reduce cost across many accounts without changing workloads": join the accounts to an organization and keep sharing on, rather than buying a new commitment in every account.

Lambda vs Fargate vs EC2: pay-per-request against always-on

Choosing the compute service is itself a cost decision, and the axis is utilization. Lambda bills per request and per GB-second of execution — you pay exactly for work performed, and idle costs zero. EC2 bills per second the instance runs, busy or not. Fargate sits between: serverless containers billed per vCPU-second and GB-second while the task runs, with no instances to manage but no per-request granularity either.

The decision list the exam rewards:

  • Low, spiky, or unpredictable volume → Lambda. An API called a few thousand times a day, a nightly trigger, an event handler: per-request billing crushes an always-on instance that idles between calls. Constraints to respect: a 15-minute execution ceiling and an event-driven model — work that exceeds them disqualifies Lambda regardless of cost.
  • Sustained, high-utilization workloads → EC2. When compute runs hot around the clock, always-on capacity is cheaper per unit of work than paying serverless premiums per invocation — and EC2 stacks with Savings Plans, RIs, and Spot for further discounts.
  • Containers without cluster management → Fargate. Fargate removes the instance fleet (and the cost of managing and patching it) and never leaves you paying for unused instance headroom; it wins for intermittent or modest container workloads. At high sustained scale, EC2-backed containers become cheaper: you can bin-pack many tasks per instance — container density is precisely the utilization-optimization the guide names — and run the fleet on Spot or commitments. Compute Savings Plans discount Fargate and Lambda; EC2 Instance Savings Plans and RIs do not; there is no Spot for Lambda.

Fargate has three cost levers of its own. First, it bills the vCPU and memory a task requests in its task definition, not what the containers use — a task averaging 20% of its requested CPU is mostly paid-for headroom, so right-size the task definition. Second, steady Fargate usage takes a Compute Savings Plan. Third, Fargate Spot (the FARGATE_SPOT capacity provider) runs interruption-tolerant tasks at a discount on spare capacity, with a two-minute warning (a SIGTERM to the task and an EventBridge event) before a task is stopped; it never falls back to regular Fargate on its own, so a customer-facing service should not run on Fargate Spot alone.

An ECS capacity provider strategy mixes the two. Base is the minimum number of tasks placed on one provider before anything else (only one provider in a strategy can have a base); weight is the ratio in which the tasks above the base are split. Put the base on FARGATE for an uninterruptible floor and the larger weight on FARGATE_SPOT so most burst tasks run discounted — for example, FARGATE base 4 weight 1 with FARGATE_SPOT weight 4 keeps 4 regular tasks, then places four of every five additional tasks on Spot and one on regular Fargate. Swapping the weights would keep the same floor but send most burst tasks to full-price Fargate. Weights without a base give only a ratio, never a guaranteed floor.

Lambda has its own right-sizing lever: memory. The memory setting also scales CPU proportionally, and cost is memory × duration — so more memory that finishes a CPU-bound function proportionally faster can cost the same or less while running quicker, and an oversized allocation on an I/O-bound function is pure waste. Compute Optimizer recommends Lambda memory settings.

Exam scenarios state a traffic pattern and often an operational constraint ("no servers to manage"). Read utilization first — "a few requests per minute" points at Lambda, "consistently 70% busy" points at EC2 with commitments — then let the constraints eliminate what remains.

Scaling as a savings lever: scale in, schedule, hibernate

Elasticity saves money because capacity you release stops billing; the scaling questions in Task 4.2 are about matching the scaling method to the demand pattern. Horizontal scaling (more or fewer instances behind a load balancer) beats vertical scaling (a bigger instance) for both cost and availability: small instances added and removed in small steps track demand closely and can span Availability Zones, while a single vertically sized instance must be big enough for the peak all day, needs a stop/start to resize, and is one AZ's worth of availability. Horizontal scaling needs a stateless tier (sessions in ElastiCache or DynamoDB, not on the instance).

The half of Auto Scaling that saves money is scale-in. Which policy drives it depends on whether demand follows the clock:

Demand patternScaling methodWhy
Unpredictable peaksDynamic scaling — target tracking on a metric such as average CPU or requests per targetAdds and removes instances as the metric moves, wherever the peak lands
Sharp ramps at known times (business-day starts, month-end runs), especially with slow-starting instancesScheduled actions that raise capacity before the ramp and lower it afterwardsTarget tracking reacts only after load has risen, so instances that take minutes to become ready arrive after the ramp has started
Recurring daily/weekly cyclesPredictive scaling (often with target tracking for the remainder)Forecasts the cycle from history and launches capacity ahead of it
Environment used only in known windowsScheduled stop/start of the whole environmentStopped instances stop billing for compute (EBS keeps billing)

Keeping a group fixed at peak size around the clock "to be safe" is the waste the exam wants removed — removing overnight capacity saves more than discounting it with a commitment.

Required availability differs by workload class, and paying production prices for non-production reliability is a design error. Production earns multi-AZ, redundant capacity; development, test, QA and batch tiers can run single-AZ, smaller, on Spot where work can be rerun, and only when in use. Commitments fit neither: a Savings Plan or RI bills every hour, so reserving an environment that runs a few hours a day pays for the idle hours.

Hibernation is the specialist lever: a hibernated instance saves its RAM contents to its encrypted EBS root volume, so on start it resumes with in-memory data and long-initializing processes already warm. While hibernated you pay for storage (including the RAM image), not compute. It fits intermittently used instances with expensive warm-up; a plain stop loses the memory, and staying running costs full price. Its prerequisites decide whether it is even possible:

  • Hibernation must be enabled when the instance is launched; it cannot be turned on for an existing instance, running or stopped.
  • Instance RAM must be less than 150 GiB on Linux (16 GiB or less on Windows), on a supported instance family and AMI (bare metal is not supported).
  • The root volume must be an encrypted EBS volume (gp2/gp3/io1/io2), large enough to hold the RAM image plus the OS and applications — space for the RAM is allocated at launch.
  • Spot Instances can hibernate only from a persistent Spot request.

A workload whose in-memory dataset needs more RAM than those limits allow cannot use hibernation; the design has to reduce warm-up another way (for example, loading from a faster store) or accept running time.

Edge offload: CloudFront caching, CloudFront Functions and Lambda@Edge

Some compute savings come from not doing the work in your fleet at all, and CloudFront is the main edge offload. Caching static and cacheable dynamic content at edge locations means those requests never reach the origin, so the origin fleet is sized for cache misses rather than total traffic, and data transfer from AWS origins to CloudFront is free. A scenario where "most requests fetch the same content and the EC2 fleet keeps scaling" is a CloudFront answer wearing a compute costume.

Request logic can also run at the edge, and the two options differ sharply in cost and capability:

CloudFront FunctionsLambda@Edge
EventsViewer request and viewer response onlyViewer request/response and origin request/response
RuntimeLightweight JavaScript, sub-millisecond executionNode.js or Python, longer timeouts
Network/body accessNo network calls, no request bodyNetwork calls and body access
Cost at high volumeA small fraction of Lambda@Edge per invocation, no duration chargePer-request plus duration charges
Typical useURL rewrites and redirects, header manipulation, cache-key normalization, token/HMAC checksLogic needing external calls, larger code, origin selection, body inspection

Where a function runs decides how often it runs. Viewer events fire on every request, including cache hits, so a longer cache TTL reduces origin fetches but not viewer-function invocations. Origin events fire only on cache misses, after the cache lookup — cheaper, but logic that must run on every request (an auth check) or must shape the cache key (query-string normalization) cannot move there. High-volume, simple, no-network logic on viewer events is the CloudFront Functions case.

Hybrid and edge placement: Local Zones, Outposts, Wavelength

Hybrid and edge compute options are chosen by where the compute must physically sit and who operates the facility; the cost question is whether a constraint makes in-Region compute the wrong buy.

OptionWhere it runs / who runs the sitePricing shapePick it when
AWS Local ZonesAWS-operated infrastructure in a metro area, extended from a parent RegionPay per use, like the RegionUsers or offices in that metro need single-digit-millisecond latency, with no hardware to house
AWS OutpostsAWS hardware installed in your data center or colocation; you provide space, power and networkMulti-year term commitmentData must be processed on premises (residency, data gravity, low latency to on-prem systems)
AWS Wavelength ZonesInside telecom carriers' 5G networksPay per useUltra-low latency to mobile and connected devices on that carrier's 5G network

When both a Local Zone and Outposts would meet a latency goal, the deciding facts are residency and who houses the hardware: no residency need and no wish to buy, house or power equipment points to a Local Zone; a requirement that data stays on premises points to Outposts.

AWS Snowball Edge, still named in the exam guide as a hybrid compute option for disconnected or remote sites, is no longer available to new customers (since 7 November 2025); existing customers can keep using it. For a new account it is not a current choice — AWS points new customers to AWS DataSync for data transfer, and Outposts remains the on-premises compute option.

Choosing the load balancer: ALB vs NLB vs Gateway Load Balancer

The load balancer is chosen by protocol and job first, cost second — the wrong type either cannot carry the traffic or needs extra services around it.

Application Load BalancerNetwork Load BalancerGateway Load Balancer
Layer743
ProtocolsHTTP, HTTPS, gRPC (and WebSockets)TCP, UDP, TLSAll IP traffic (GENEVE to the appliances)
AddressesNode IPs change over timeOne static IP per Availability Zone; can be your Elastic IPsReached through Gateway Load Balancer endpoints in route tables
Cost-relevant strengthHost/path routing lets one ALB front many servicesVery high throughput and connection rates at low latencyScales and fails over a fleet of inline appliances transparently
Typical answer forWeb apps and microservicesUDP (games, VoIP), fixed IPs for allow-lists, extreme TCP volumeThird-party firewalls, IDS/IPS, deep packet inspection

The cost patterns: "one load balancer per microservice" resolves to one ALB with host- or path-based routing rules, removing a fleet of hourly charges. "UDP plus a short list of fixed IPs" is a single NLB — an ALB cannot carry UDP, and adding Global Accelerator for fixed IPs is an extra service the NLB makes unnecessary. "Inspect all traffic with third-party appliances without changing application load balancers" is a Gateway Load Balancer, which keeps each flow on the same appliance and replaces failed ones; ALB and NLB treat targets as destinations, not inline hops.

Worked scenario: layering the purchase mix

Scenario. A retail company runs its e-commerce platform on EC2. Analysis shows a steady floor of 20 instances running 24/7 all year; daytime traffic adds up to 25 more instances that scale away overnight; and a nightly 3-hour analytics job runs on a separate fleet that can tolerate restarts, since it reprocesses from checkpoints in S3. The platform team also expects to move the web tier to a newer instance family within the year. What is the MOST cost-effective purchasing design?

Reasoning: Decompose by layer and match each to the cheapest option its requirements allow. The 20-instance floor is guaranteed usage — full-price On-Demand for it burns money, and Spot is disqualified because the floor must never disappear. A commitment is right; the planned family change decides which kind. Standard RIs and EC2 Instance Savings Plans lock the instance family, so the expected migration would strand their discount. A Compute Savings Plan gives up a little depth (up to 66% against 72% for the family-locked options) in exchange for following usage across families, sizes, and even to Fargate if the tier is containerized later — with Convertible RIs as the second-best commitment thanks to exchanges. The daytime layer is variable: On-Demand behind Auto Scaling, with target tracking (or scheduled scaling, since the pattern is daily) adding and, crucially, removing capacity — committing to this layer would pay for reserved capacity that idles most of the day. The analytics fleet announces its own answer: checkpointed, restartable, batch — Spot, at up to 90% off, diversified across instance pools so a reclaim delays rather than derails the job.

Eliminating the distractors: "Buy 45 Standard RIs" commits to peak — 25 of them idle overnight, and the family lock fights the migration plan. "Run everything On-Demand for flexibility" pays full price for a floor that has not varied all year. "Use Spot for the entire platform" puts the un-interruptible baseline on reclaimable capacity — a requirement violation, not a saving. "Compute Savings Plan for all 45 instances plus the batch fleet" over-commits: the commitment is billed hourly whether used or not, and it cannot be scheduled for daytime only, so sizing it beyond the steady baseline recreates the idle-reservation problem the layering exists to avoid.

Worked scenario: a Spot fleet that survives interruptions

Scenario. A media company transcodes uploaded videos. Jobs arrive on an SQS queue; each takes 5–20 minutes; a failed job is simply retried, and results land in S3. The current design is an Auto Scaling group of one large On-Demand instance type scaling on queue depth. Finance wants the cost cut substantially; engineering insists the queue must keep draining even during capacity disruptions. What should the architect propose?

Reasoning: Check Spot's admission test first: queue-driven, idempotent, checkpoint-free-but-retryable work with results in S3 is the textbook interruption-tolerant workload, so the up-to-90% discount is available if the design absorbs reclaims. The naive proposal — switch the ASG to Spot with the same single instance type — fails engineering's constraint: one instance type in each AZ is one capacity pool, and when that pool is reclaimed or unavailable, the whole fleet stalls at once. The robust answer is a mixed instances policy: keep a small On-Demand base so the queue always drains even in a Spot drought, set a high Spot percentage above base, and diversify across several instance types, sizes, and generations in multiple AZs — many pools, so reclamations hit a slice of capacity, not all of it. Use the price-capacity-optimized allocation strategy to favor deep, cheap pools, enable capacity rebalancing, and handle the two-minute interruption notice to stop pulling new messages and let in-flight work finish or return to the queue (SQS visibility timeout makes the retry automatic). Since transcoding is CPU-bound, the same review should right-size the "one large" type — a modern compute-optimized generation, with Graviton evaluated for the codec stack.

Eliminating the distractors: "Reserved Instances for the transcoding fleet" mismatches shape — the fleet scales with queue depth, and commitments only pay on steady utilization. "All Spot, single type, no base" is the fragility trap engineering vetoed. "Move transcoding to Lambda" hits the 15-minute execution ceiling for the longest jobs and mispays for sustained CPU-heavy work. The mixed-instances design is the only option that is simultaneously the cheapest and still meets the always-draining requirement — which is the entire skill Domain 4 measures.

Tip. SAA-C03 tests this task with MOST cost-effective scenarios where several designs run the workload and one pays least without breaking a requirement. The flagship shape is the layered purchase mix — a baseline, a variable peak and a batch tier — graded on matching commitments, On-Demand with Auto Scaling, and Spot to the right layers. Expect commitment-sizing traps (a plan cannot be scheduled, its hourly amount does not shrink when you downsize, existing RIs are applied first, Cost Explorer recommendations mirror today's over-provisioned usage), Compute versus EC2 Instance Savings Plans decided by a move to Fargate or Lambda, Spot and Fargate Spot resilience details (On-Demand base, diversified pools, capacity provider base and weight), Lambda-vs-Fargate-vs-EC2 choices decided by utilization, target tracking versus scheduled scaling, hibernation prerequisites, cost-tool and consolidated-billing questions, CloudFront Functions versus Lambda@Edge, Local Zones versus Outposts, and ALB versus NLB versus Gateway Load Balancer. When two options both work, the one that right-sizes first, commits only to the steady floor and pushes interruptible work to Spot usually pays least. Distractor patterns: committing to peak, Reserved capacity for part-time workloads, Spot under stateful or baseline tiers, Capacity Reservations offered as a saving, per-service load balancers, and serverless proposed for a sustained, always-hot workload.

Key takeaways
  • Layer the purchase mix: commitments sized to the steady baseline, On-Demand behind Auto Scaling for the variable layer, Spot (up to 90% off) for interruptible work — never commit to peak, never put un-interruptible work on Spot.
  • Depth versus flexibility: Standard RIs and EC2 Instance Savings Plans go up to 72% but lock a family; Compute Savings Plans go up to 66% but follow usage anywhere, including Fargate and Lambda, which no EC2-only instrument covers.
  • A commitment is one hourly amount billed every hour of the term: it cannot be scheduled, its flexibility moves the discount but not the bill, RIs are applied before Savings Plans — so right-size first and size the plan to the uncovered floor.
  • Spot is safe only for stateless, retryable or checkpointable work, in an ASG mixed instances policy (On-Demand base, many types across AZs, price-capacity-optimized); on ECS, put the base on FARGATE and the larger weight on FARGATE_SPOT.
  • Pick the cost tool by job: Compute Optimizer recommends, Cost Explorer analyzes (its purchase recommendations follow current usage), Budgets alerts, the CUR itemizes, and tags count only after activation in the management account; consolidated billing shares commitments by default.
  • Pick compute by utilization: Lambda for low or spiky volume, EC2 with commitments for sustained load, Fargate for containers without cluster management — and Fargate bills the vCPU and memory a task requests.
  • Match scaling to demand: target tracking for unpredictable load, scheduled actions for clock-predictable ramps with slow-starting instances, scheduled stop/start for non-production; hibernation (enabled at launch, Linux RAM under 150 GiB, encrypted EBS root) for intermittent instances with long warm-up.
  • Offload and place wisely: CloudFront caching shrinks the origin; CloudFront Functions beat Lambda@Edge for simple high-volume viewer logic; Local Zones (AWS-run metro) vs Outposts (your premises) vs Wavelength (5G); one ALB for many HTTP services, NLB for UDP and static IPs, GWLB for inline appliances.

Frequently asked questions

What is the difference between Spot, Reserved Instances, and Savings Plans?

They discount EC2 in exchange for different concessions. Reserved Instances and Savings Plans trade a 1- or 3-year commitment for a discount: Standard RIs and EC2 Instance Savings Plans go up to 72% but lock an instance family, while Convertible RIs and Compute Savings Plans go up to 66% and allow change — Compute Savings Plans also cover Fargate and Lambda. RIs commit to an instance configuration; Savings Plans commit to an hourly spend amount billed every hour of the term. Spot trades reliability instead: up to 90% off spare capacity that AWS can reclaim with a two-minute notice, so it suits only interruption-tolerant work like batch processing, CI and queue-driven jobs.

Should I choose Savings Plans or Reserved Instances?

For most EC2 commitments today, Savings Plans. A Compute Savings Plan (up to 66% off) keeps its discount when you change instance family, size, OS or Region and also covers Fargate and Lambda; an EC2 Instance Savings Plan matches the Standard RI discount (up to 72%) if you can commit to one family in one Region. Convertible RIs allow exchanges between EC2 configurations; Standard RIs cannot be exchanged, though they can be modified (Availability Zone, scope, or size within the family for Linux). If you already hold RIs, remember they are applied before any Savings Plan, so size a new plan to the steady usage the RIs leave uncovered. When usage may move to containers or serverless, only the Compute Savings Plan follows it.

When should I use Spot Instances?

Use Spot when the workload can be interrupted and resumed or retried without harm: batch and big-data processing, video transcoding, CI/CD builds, rendering, containerized workers, and queue-driven jobs where a killed task returns to the queue. AWS reclaims Spot capacity with a two-minute notice, so never use it for databases, stateful applications, or the only capacity behind user-facing traffic. Run Spot inside an Auto Scaling group mixed instances policy — a small On-Demand base, diversified instance types across Availability Zones, and the price-capacity-optimized allocation strategy — so a reclaimed pool costs you a slice of capacity, not the whole fleet.

What is an Auto Scaling mixed instances policy?

It is an Auto Scaling group configuration that combines purchase options and instance types in one fleet. You set an On-Demand base (instances that are always On-Demand), an On-Demand percentage above that base, and the remainder launches as Spot. You also list multiple instance types, sizes, and generations across Availability Zones — each type-AZ pair is a separate Spot capacity pool, and diversification means one pool's reclamation cannot drain the group. An allocation strategy such as price-capacity-optimized picks the cheapest pools least likely to be interrupted. It is the standard exam answer for cost-effective, fault-tolerant processing fleets.

Is Lambda cheaper than EC2?

It depends entirely on utilization. Lambda bills per request and per GB-second, so at low, spiky, or unpredictable volume — an endpoint hit thousands of times a day, an event handler idle most of the time — it costs far less than an EC2 instance that bills every second while idling. At sustained high utilization the economics flip: an instance running hot around the clock does more work per dollar than per-invocation billing, and EC2 stacks with Savings Plans or Spot discounts. Also check constraints: Lambda's 15-minute execution ceiling and event-driven model disqualify long-running or steady-state work regardless of price.

What is EC2 hibernation and when does it save money?

Hibernation stops an instance after saving its RAM contents to the encrypted EBS root volume; on start it resumes with memory state, caches and application warm-up intact instead of booting cold. While hibernated you pay for EBS storage, including the saved RAM, but not for compute. It saves money for intermittently used instances with expensive initialization. Prerequisites matter: hibernation must be enabled when the instance is launched (not added later), Linux instances need less than 150 GiB of RAM (Windows 16 GiB or less), and the encrypted EBS root volume must be large enough for the RAM image. Without a warm-up cost, a plain stop/start saves the same compute.

How does CloudFront reduce compute costs?

CloudFront caches content at edge locations, so requests served from cache never reach your origin. You size EC2 or containers for cache misses instead of total traffic, and data transfer from AWS origins to CloudFront is free. Simple request logic can also run at the edge: CloudFront Functions handle lightweight, no-network logic on viewer events at a small fraction of Lambda@Edge's per-invocation cost, while Lambda@Edge supports origin events and network calls. Viewer-event functions run on every request, including cache hits; origin-event functions run only on cache misses.

When should I use AWS Local Zones instead of AWS Outposts?

Use a Local Zone when users or offices in a metro area need single-digit-millisecond latency and you do not want to own or house hardware: Local Zones are AWS-operated extensions of a parent Region, paid per use. Use Outposts when the compute must run on your own premises — for data residency, data gravity or low latency to on-premises systems — accepting that you provide the space, power and network and sign a multi-year term. Wavelength Zones are different again: they sit inside telecom carriers' 5G networks for mobile and connected devices.

Source

This lesson covers the "Design Cost-Optimized Architectures" domain of the official SAA-C03 exam guide. Vendors revise their guides — check the source for the current version.

Test yourself on this topic
Practice now

Sign up free to mark lessons complete, bookmark topics and track your exam readiness.

Spotted a mistake in this lesson?