AWS Rightsizing: How to Right Size EC2 Instances Without Breaking Production
July 2026 · Costanalyst
projected this month if unattended
Spend by team
Budget forecast
AWS rightsizing is the practice of matching each resource to the capacity it actually uses, then changing the instance type, size, family, or storage class to remove the paid-for headroom nobody consumes. You do it by pulling utilization data (CloudWatch metrics plus AWS Compute Optimizer or the Cost Explorer rightsizing recommendations), ranking candidates by dollars saved rather than by percentage, changing one workload at a time during a known-safe window, and watching real metrics for a full traffic cycle before moving on. Rightsize before you buy Reserved Instances or Savings Plans, because a commitment locks in whatever size you had on the day you signed.
Most AWS bills carry a layer of instances sized once, during a launch or a migration, from a guess. Nobody revisits them because nothing is broken. Below are the questions engineers and FinOps owners actually type when they go looking, in the order the work happens.
What is AWS rightsizing?
AWS rightsizing means adjusting a running resource so its provisioned capacity matches observed demand: downsizing an EC2 instance from an xlarge to a large, switching from a general purpose family to a compute or memory optimized one, moving an EBS volume from gp2 to gp3, or turning off something with no traffic at all. It is a sizing decision, not a discount.
It matters more than most cost levers because it compounds. An instance one size too large costs roughly twice what it needs to, every hour, and it inflates every commitment you buy on top of it. Discounts are a percentage off the wrong number. Rightsizing fixes the number.
Three flavors of savings usually show up the first time a team runs this:
- Oversized instances. Steady, low CPU and low memory on a box sized for a peak that never arrived, or for a load test that ended two years ago.
- Idle and orphaned resources. Instances with near zero network traffic, unattached EBS volumes, old snapshots, idle load balancers, and detached Elastic IPs. Pure waste, no performance question attached.
- Wrong family or generation. A memory-hungry service on a compute optimized family, or anything on an older generation when a newer one, including Graviton, does the same work at a lower hourly rate.
How does AWS Compute Optimizer work?
AWS Compute Optimizer is a free AWS service that analyzes CloudWatch utilization history and resource configuration, then classifies each resource as under-provisioned, over-provisioned, or optimized and proposes alternative configurations with projected utilization for each. You opt in at the account or organization level, and it needs a stretch of history before it says anything useful.
It covers EC2 instances, EC2 Auto Scaling groups, EBS volumes, Lambda functions, Amazon ECS services on AWS Fargate, commercial software licenses, and Amazon RDS. Each recommendation ships with ranked options, a risk assessment of performance impact, and the metrics behind the call, so you are not asked to trust a bare verdict.
Two things are worth knowing before you rely on the output:
- It only sees what CloudWatch collects. CPU, network, and disk come free. Memory does not. Without the CloudWatch agent installed and publishing memory metrics, Compute Optimizer reasons about memory from limited signals, which makes it conservative on memory-bound workloads.
- It needs lookback. Recommendations improve with history, and the enhanced infrastructure metrics option extends the analysis window at a cost. A service launched last week will not produce a trustworthy recommendation.
Cost Explorer also publishes rightsizing recommendations, drawn from the same analysis but presented in dollars, with estimated monthly savings per instance and the option to downsize within the family or terminate outright. That is the view to open for finance. For the engineering conversation, Compute Optimizer's projected utilization graphs are the more persuasive artifact.
Which metrics tell you an instance is oversized?
The reliable tell is sustained low CPU combined with low memory and low network over at least two weeks, including the busiest day in that window. High-percentile CPU that never approaches the box's capacity, memory well under its limit, and network throughput that rounds to nothing together mean you are paying for a size you never reach.
Look at the distribution, not the average. A low average CPU with regular near-saturation peaks is a workload correctly sized for its peak, not a rightsizing candidate. Compute Optimizer works from percentiles for this reason.
- CPUUtilization. The default CloudWatch metric. Check maximum and high percentiles over the full lookback, not the mean.
- Memory. Not published by default on EC2. Install the CloudWatch agent, or you will be guessing on exactly the dimension that kills a downsize.
- NetworkIn and NetworkOut. Near zero over weeks usually means the instance is idle, or its traffic moved and nobody terminated the old one.
- Disk throughput and IOPS. Some families cap EBS bandwidth by instance size, so a smaller instance can quietly throttle a storage-heavy workload even when CPU looks fine.
- Burst credit balance. On T family instances, a healthy balance means room to move down; a depleted one means you are already constrained.
How do you rightsize without breaking production?
Change one thing at a time, start with non-production, move down one size per step rather than jumping two, and hold each change for a full weekly traffic cycle. Downsizing an EC2 instance requires a stop and start, so treat every change as planned maintenance with a documented rollback to the previous instance type.
A workable sequence: pick the ten candidates with the largest estimated monthly savings, not the worst utilization percentages, because dollars are what you will be asked about. Confirm memory metrics exist for each. Snapshot, or confirm the instance is rebuildable from your automation. Then make the change in one step and watch the endpoint for latency and error rates across a full business week before the next batch. The failure mode that matters is slow degradation under Monday morning load, not an immediate crash.
Guardrails that keep this boring:
- Never rightsize during a freeze or a launch. The savings will still be there next month. The blast radius will not be forgiven.
- Prefer family changes over blind downsizes. Moving a CPU-bound service from general purpose to compute optimized often keeps performance flat while cutting the hourly rate.
- Test Graviton separately. Graviton is an architecture change, not a size change. It needs a build and a soak test, and belongs in its own workstream.
- Handle stateless first. Auto Scaling groups and stateless app tiers roll back cleanly. Databases and stateful singletons come later, with more care.
- Write down the old type. The rollback is only easy if someone recorded what the instance was before Tuesday.
Storage is the low-risk starting point. Migrating gp2 volumes to gp3 is an online change that generally lowers cost per GB and lets you provision IOPS and throughput independently of volume size. Deleting unattached volumes and stale snapshots carries no performance risk, which is why continuous cloud waste detection pays off before anyone touches a compute instance.
Should you rightsize or buy a Savings Plan first?
Rightsize first, then commit. A Reserved Instance or Savings Plan is a one to three year promise to keep spending at a level. Commit while your fleet is oversized and you have locked in the oversized fleet: when you later downsize, you either strand the commitment or keep running waste to absorb it. That order is the difference between compounding two savings levers and canceling one with the other.
The practical sequence: eliminate idle resources, rightsize what remains, let the new baseline run a few weeks so the usage floor is real, then buy commitments against that floor. Compute Savings Plans flex across instance family, size, region, and even between EC2, Fargate, and Lambda, which makes them safer if more sizing changes are coming. Our comparison of Reserved Instances versus Savings Plans covers where each fits.
How often should you rightsize?
Treat it as a monthly review, not an annual project. Compute Optimizer refreshes as new utilization data arrives, so a standing monthly pass over the top recommendations by dollar impact keeps drift from accumulating. Add an event trigger too: any major release, traffic shift, or migration puts the affected services back in the queue.
The one-time cleanup produces the biggest single number, then it decays. New services launch oversized, old ones lose traffic, and within two quarters the same waste is back in a different account. Teams that hold their savings run rightsizing analysis as a recurring habit with an owner, not a fire drill after a bad invoice.
What does AWS rightsizing not cover?
Rightsizing addresses compute and storage sizing. It does not touch data transfer charges, managed service pricing tiers, licensing, Kubernetes pod requests and limits, or anything outside AWS, and it cannot tell you which team owns the instance you are about to shrink.
- Data transfer. NAT gateway processing, cross-AZ traffic, and egress are architecture problems, and often a larger line item than the instances themselves.
- Kubernetes. Node sizing is visible to AWS; container requests and limits are not. Pod-level bin packing is a separate exercise.
- Other clouds and SaaS. Azure, GCP, and vendor subscriptions are invisible to AWS tooling, even when they move faster than infrastructure spend.
- Ownership. A recommendation with no team attached sits in a backlog. Allocation turns a list into completed changes.
This is where a layer above the native tools helps: one view across clouds and SaaS, findings in dollars, attributed to the team that owns them, paired with anomaly alerts so a regression shows up before the invoice. Costanalyst connects read-only, never changes a resource and never moves money, from $99 per month. Our roundup of AWS cost optimization tools lays out the field.
Where to start
Opt into AWS Compute Optimizer, install the CloudWatch agent on your top spending instances so memory data exists, and open the Cost Explorer rightsizing recommendations sorted by estimated monthly savings. Delete unattached volumes and idle resources this week. Then take the ten largest compute candidates through a one-change-at-a-time cycle over the next month.
After that, make it routine. Pair ongoing AWS cost optimization with the broader levers in our guide to reducing your AWS bill, and only then commit to Savings Plans against the smaller baseline you just built. Sizing first, discounts second, every time.
See where your cloud and SaaS money is leaking
Connect your cloud and SaaS spend read-only and see your savings in dollars. Transparent pricing, no card to start.