Work in this order, because each step makes the next one cheaper and safer:
- See it: turn on the free billing tools and alerts.
- Delete it: remove what nobody uses.
- Shrink it: rightsize, schedule and modernise what is left.
- Commit to it: only then buy Savings Plans for the steady baseline.
Respondents to Flexera's 2026 State of the Cloud survey estimated 29% of their cloud infrastructure spend was wasted, the first rise in five years. In an account that has never been reviewed, a fifth to a third is a realistic target.
Prices below are the US East figures AWS uses in its own examples, in US dollars. London (eu-west-2) and other regions are often a little higher. Check the AWS pricing pages in the sources for your region.
Step 1: See where the money goes (free)
- Cost Explorer. Group by service, then by usage type. The usage type is where the surprises live: NAT gateway bytes, public IPv4 hours, snapshot storage.
- Cost Anomaly Detection. Free. Accounts that switched on Cost Explorer from March 2023 get a default monitor that emails a daily summary when a service's spend runs well above normal. If yours predates that, set it up in five minutes.
- A budget with an alert. One monthly budget for the whole account, alerting at 80% and 100% of forecast, catches runaway costs in days rather than at month end.
- Tags. Tag resources by environment (production, staging, dev) and owner, and activate them as cost allocation tags. Untagged spend is spend nobody owns.
Step 2: Quick wins that rarely need downtime
| Fix | The charge | Typical effect |
|---|---|---|
| Unattached EBS volumes and old snapshots | Charged per GB every month whether used or not | Often the first few hundred dollars found in any review |
| Public IPv4 addresses | $0.005 an hour each, in use or idle, since February 2024 | About $3.65 a month each. Twenty spare addresses is around $876 a year |
| gp2 volumes to gp3 | gp3 is $0.08 per GB-month against $0.10 for gp2 | 20% off block storage, changed live with Elastic Volumes |
| Log retention | Ingesting logs is $0.50 per GB on the Standard class, then storage every month | New log groups keep data forever by default. Set 30 to 90 days for most |
| S3 traffic through a NAT gateway | NAT processing is $0.045 per GB, plus $0.045 an hour per gateway | A gateway endpoint for S3 and DynamoDB is free and skips the NAT charge |
Public IPv4 is the new hidden line
Since 1 February 2024 AWS has charged for every public IPv4 address, attached or not. It is small per address and easy to miss across load balancers, test servers and forgotten Elastic IPs. Public IP Insights in the VPC console lists them all.
gp3: the easiest 20% on AWS
gp3 includes 3,000 IOPS and 125 MB/s at any size, and AWS designed it to replace gp2 for every use. The change happens live without detaching the volume. One check first: big gp2 volumes over 1 TB get more baseline IOPS and throughput from their size, so match that by provisioning extra IOPS and throughput on the gp3 volume. Even then it usually works out cheaper.
NAT gateways cost money just to exist
Each NAT gateway costs about $33 a month before it moves a single byte ($0.045 an hour). A dev environment copied from production with one gateway in each of three zones is around $99 a month for nothing. Use one gateway in non-production, and route S3 and DynamoDB traffic through free gateway endpoints everywhere.
Step 3: Check for Extended Support charges
This is the one we see catch people out most. When a database or Kubernetes version reaches the end of standard support, AWS keeps it running but adds a fee, automatically.
- RDS and Aurora (MySQL and PostgreSQL). Charged per vCPU per hour, on every instance including replicas and Multi-AZ standbys, and Reserved Instance discounts don't apply. AWS's own example: a 2 vCPU db.r5.large costs an extra $1,752 a year in years one and two, then $3,504 in year three. MySQL 5.7 moved to year-three pricing on 1 March 2026, at $0.200 per vCPU-hour in US East (Ohio).
- EKS. A cluster on a Kubernetes version in extended support costs $0.60 an hour instead of $0.10, an extra $365 a month per cluster. Extended support is switched on by default, so clusters drift into it unless you set the upgrade policy or keep upgrading.
The fix is an upgrade, which needs testing. It is usually the single largest saving on accounts running older databases.
Step 4: Rightsize, schedule and modernise
Rightsize
Look at at least two weeks of CPU and memory for each server and database. Anything sitting under 20% most of the time is a candidate for the next size down. AWS Compute Optimizer gives recommendations for EC2, EBS, Lambda and more. Install the CloudWatch agent if you want memory included, because EC2 doesn't report it by default.
Switch off what only runs in office hours
Dev, test and staging servers rarely need to run at night or weekends. Running them 12 hours a day on weekdays is 60 of the week's 168 hours, which cuts their compute cost by about 64%. A scheduled job or the AWS Instance Scheduler handles it.
Move to Graviton where you can
AWS says its Arm-based Graviton instances give up to 40% better price performance than comparable x86 instances, and its testing whitepaper puts them at 10 to 20% cheaper per hour on average in the same family. Most Linux workloads in Java, Python, Node, Go and containers move with little or no code change. Build multi-architecture images and test before switching. If you need to stay on x86, AWS's own comparison shows AMD instances about 10% cheaper than the Intel equivalents.
Tier your S3 storage
S3 Intelligent-Tiering moves objects nobody has opened for 30 days to a tier 40% cheaper, and after 90 days to one 68% cheaper, with no retrieval fees and a small monitoring charge. Objects under 128 KB aren't tiered. Add lifecycle rules to delete old object versions and incomplete multipart uploads, which build up silently.
Turn down the logging
Debug logging left on in production is a common surprise. Drop to info level, set retention on every log group, and move logs you keep only for audit to the Infrequent Access class, which halves the ingestion price but doesn't support live alarms.
Step 5: Commit to the baseline
Once the account is clean, look at the spend that stays flat every hour of every day. That is what to commit to.
- Compute Savings Plans: up to 66% off on-demand, applied across EC2, Fargate and Lambda in any region. The flexible default for most small businesses.
- EC2 Instance Savings Plans and Standard Reserved Instances: up to 72% off, in exchange for sticking to one instance family in one region.
- Spot: up to 90% off for work that can be interrupted with two minutes' notice, such as batch jobs, CI runners and test environments. AWS says Spot is interrupted less than 5% of the time on average.
The biggest discounts need three-year terms or upfront payment. For a growing small business, a one-year, no-upfront Compute Savings Plan covering 60 to 80% of the steady baseline is a sensible start. Cost Explorer recommends an hourly commitment from your last 30 or 60 days of usage.
A worked example
An illustrative account spending $4,000 a month: a small web product with production, staging and dev environments, never reviewed. Your numbers will differ.
| Area | Monthly spend | Change | Monthly saving |
|---|---|---|---|
| EC2, production | $1,500 | Rightsize and move to Graviton (15%), then a Compute Savings Plan on the rest (25%) | $544 |
| EC2, dev and test | $400 | Run 12 hours on weekdays only | $256 |
| RDS | $700 | Rightsize one oversized instance | $100 |
| EBS | $300 | gp2 to gp3, delete orphaned volumes and snapshots | $110 |
| NAT and data transfer | $350 | S3 gateway endpoint, one NAT in non-production | $120 |
| CloudWatch | $200 | Retention on every log group, audit logs to Infrequent Access | $70 |
| Public IPv4 | $40 | Release unused addresses | $20 |
| Everything else | $510 | No change | $0 |
| Total | $4,000 | New bill about $2,780 | $1,220 (about 30%) |
That is about $14,600 a year. If this account were also running MySQL 5.7 on a Multi-AZ instance, the database upgrade alone could add several hundred dollars a month on top.
Mistakes to avoid
- Committing before cleaning up. A three-year plan on oversized servers is three years of paying for the wrong thing.
- Deleting without a snapshot or a check. Confirm with the owner, snapshot anything uncertain, and set a date to delete the snapshot.
- Rightsizing on averages alone. Look at peaks too. A server idle 23 hours a day may need its size for the month-end run.
- One-off clean-ups. Without alerts, tags and an owner, the bill creeps back within a year.
Want it done for you?
Our tech cost review covers AWS, Azure, Google Cloud, software subscriptions and AI spend for £1,500, using read-only access. You get a costed list of cuts with the saving, effort and risk for each. If we don't find savings worth at least the fee over the next year, you don't pay.
Questions
How much can a small business usually save on AWS?
Flexera's 2026 State of the Cloud survey put estimated waste at 29% of infrastructure and platform spend. In accounts that have never been reviewed, a saving of a fifth to a third is common. Accounts that are already tidy will see less.
Should I buy Savings Plans first?
No. Clean up and rightsize first, then commit to the usage that is left. Buying a plan before cleaning up locks in a discount on waste for one or three years.
Will cutting costs cause downtime?
Most quick wins do not. Deleting unattached volumes, changing gp2 to gp3, setting log retention and adding S3 gateway endpoints are done without restarts. Rightsizing, Graviton moves and database upgrades need testing and a planned change window.
Does this apply to Azure and Google Cloud?
The ideas do: idle resources, oversizing, old storage, logging, network charges and commitment discounts exist on every cloud. The product names and prices differ.
Sources
- Flexera, 2026 State of the Cloud Report key findings
- AWS, New Cost Explorer users now get Cost Anomaly Detection by default
- AWS, Public IPv4 address charge and Public IP Insights
- AWS, Amazon VPC pricing (NAT gateway and public IPv4)
- AWS, Amazon EBS General Purpose volumes (gp3 and gp2)
- AWS, Migrate EBS volumes from gp2 to gp3
- AWS, Amazon RDS for MySQL pricing (Extended Support)
- AWS, Estimating the charges for Amazon RDS Extended Support
- AWS, Amazon EKS pricing
- AWS, Amazon EKS cluster upgrade policy
- AWS, Amazon CloudWatch pricing
- AWS, CloudWatch Logs Infrequent Access log class
- AWS, Getting started with Graviton
- AWS, Graviton performance testing whitepaper
- AWS, Optimize your x86-based EC2 workloads (AMD instances)
- AWS, S3 Intelligent-Tiering
- AWS, Compute Savings Plans and Reserved Instances
- AWS Well-Architected, Select the best pricing model (Spot)
Prices and figures were checked on 31 October 2026 and are AWS list prices in US dollars. AWS changes prices and features regularly. This guide is general information, not financial advice.