AWS Cost Optimization Checklist: 15 Ways to Reduce Your AWS Bill

Fifteen practical checks we run first when reviewing an AWS account, from budgets and tagging to right-sizing, Savings Plans, storage and network costs.

Most AWS bills grow quietly. A test server nobody switched off, snapshots from a project that ended last year, a database sized for a launch peak that never came back. None of these look dramatic on their own, but together they often make up a large share of the monthly invoice.

This checklist covers the 15 checks we run first when we review an AWS account. They are grouped by area, start with the quickest wins, and do not require re-architecting your applications.

Start with visibility

You cannot reduce what you cannot see. Before changing any resources, make sure you know where the money goes and who owns each cost.

1. Turn on Cost Explorer and set AWS Budgets alerts

Cost Explorer shows spend by service, account, region and tag. AWS Budgets sends an alert when actual or forecast spend crosses a threshold you choose. Set at least one budget per account, with alerts at 80% and 100% of the expected monthly spend, so surprises reach you in days instead of at the end of the month.

2. Tag every resource and activate cost allocation tags

Agree on a small set of tags, for example owner, environment and project, and apply them to everything. Then activate them as cost allocation tags in the Billing console. Untagged resources are usually where forgotten spend hides, and tags turn a single bill into a cost per team or product.

3. Review AWS Compute Optimizer and Trusted Advisor

AWS Compute Optimizer analyses CloudWatch metrics and recommends better-sized EC2 instances, Auto Scaling groups, EBS volumes and Lambda functions. Trusted Advisor flags idle load balancers, unassociated Elastic IP addresses and other waste. Both are a free starting list of actions.

Compute: usually the biggest line on the bill

4. Right-size EC2 instances

Many instances run at 5–15% average CPU because they were sized for a guess. Check CPU, memory and network over at least two weeks, then move to the smallest instance type that keeps a comfortable margin. Right-sizing one instance size down roughly halves its on-demand cost.

5. Move suitable workloads to Graviton instances

AWS Graviton instances use ARM processors and, according to AWS, deliver up to 40% better price performance than comparable x86 instances. Most Linux workloads built on Java, Python, Node.js, Go or containers run on Graviton with little or no change. Managed services such as RDS, ElastiCache and OpenSearch also offer Graviton options.

6. Commit to steady usage with Savings Plans

For capacity that runs around the clock, Savings Plans trade a one- or three-year commitment for a lower hourly rate. AWS states savings of up to 72% compared with On-Demand prices for EC2 Instance Savings Plans, and Compute Savings Plans also apply to Fargate and Lambda. Commit only to your proven baseline, not your peak, and review coverage every quarter.

7. Use Spot Instances for interruptible work

Spot Instances use spare AWS capacity at discounts of up to 90% compared with On-Demand. They can be reclaimed with two minutes’ notice, so they suit CI runners, batch jobs, data processing and stateless containers in Auto Scaling groups or Kubernetes node pools that mix Spot and On-Demand capacity.

8. Switch off non-production outside working hours

Development and test environments rarely need to run at night or at weekends. Running them 12 hours a day on weekdays instead of 24/7 cuts their compute hours by about 64%. Use the AWS Instance Scheduler, a simple scheduled Lambda function, or scale Kubernetes node groups down to zero.

Storage: small items that add up

9. Delete unattached EBS volumes and old snapshots

When an instance is terminated, its volumes are not always deleted with it. Search for volumes in the available state and snapshots older than your retention policy. Amazon Data Lifecycle Manager can then create and expire snapshots automatically.

10. Migrate gp2 volumes to gp3

gp3 volumes cost up to 20% less per GB than gp2 and let you set IOPS and throughput independently of size. The change can be made on a running volume without downtime, which makes it one of the easiest savings on the list.

11. Add S3 lifecycle rules and Intelligent-Tiering

Move logs and backups that are rarely read to cheaper storage classes such as S3 Standard-Infrequent Access or Glacier, and expire objects you no longer need. For data with unpredictable access patterns, S3 Intelligent-Tiering moves objects between tiers automatically. Also clean up incomplete multipart uploads, which are billed but invisible in the console.

Network: the costs people forget

12. Reduce NAT Gateway data processing charges

Every gigabyte that passes through a NAT Gateway is charged on top of the hourly fee. Traffic from private subnets to S3 or DynamoDB is a common culprit. Add VPC gateway endpoints for S3 and DynamoDB: they have no extra charge and take that traffic off the NAT Gateway.

13. Serve content through CloudFront and limit cross-AZ traffic

Delivering static files and APIs through Amazon CloudFront is usually cheaper than serving data out of EC2 or S3 directly, and faster for users. Inside the VPC, data moving between Availability Zones is billed in both directions, so keep chatty services in the same zone where your availability design allows it.

Databases and serverless

14. Right-size databases and use the right pricing model

Apply the same right-sizing discipline to RDS and Aurora: check CPU, memory and connections before choosing the instance class. Stop development databases when they are not used, consider Aurora Serverless v2 for spiky workloads, and buy Reserved Instances for production databases that run all year.

Make it a routine

15. Review costs every month with the people who own them

Cost optimization is not a one-off project. Hold a short monthly review: compare spend with budget, look at the largest changes, check Savings Plans coverage, and agree on two or three actions with each owner. This simple habit, often called FinOps, is what keeps savings from slowly disappearing again.

Quick-win summary

CheckEffortWhere it helps
Budgets and alertsLowCatches surprises early
gp2 to gp3 migrationLowEBS storage costs
Delete unused volumes, snapshots and IPsLowStorage and idle charges
Schedule non-productionLowCompute for dev and test
VPC gateway endpointsLowNAT Gateway charges
Right-sizingMediumEC2 and RDS costs
Savings PlansMediumSteady compute usage
Graviton and SpotMediumCompute price per workload

Where to start

If you only have one afternoon, set up budgets, migrate gp2 volumes to gp3, delete unattached volumes and old snapshots, and schedule non-production environments. Those four steps are low risk and usually pay off in the very next invoice.

At Hetzbit, cost reviews are part of our AWS cloud and managed services. We assess your accounts, build a cost baseline, apply the safe changes first, and report savings every month. If you would like a second pair of eyes on your AWS bill, talk to our engineers.

Frequently asked questions

How much can AWS cost optimization save?

It depends on how the account has grown. Accounts that have never been reviewed often have significant waste in idle resources, oversized instances and missing commitments. The first assessment gives you a concrete estimate before any change is made.

Will these changes cause downtime?

Most do not. Budgets, tagging, gp3 migration, lifecycle rules and Savings Plans have no impact on running workloads. Right-sizing an EC2 instance needs a short restart, so plan it in a maintenance window.

Should we buy Savings Plans or Reserved Instances?

For EC2, Fargate and Lambda, Savings Plans are usually the more flexible choice. Reserved Instances are still the way to commit for services such as RDS, ElastiCache and OpenSearch.

Work with Hetzbit

Want engineers to handle AWS cloud for you?

Tell us what you run today. A Hetzbit engineer will review it with you and suggest concrete next steps.

Start a conversation

Tell us what you run today. We'll help you run it better.

A 30-minute call with an engineer, not a sales script. You leave with concrete next steps, whether or not we work together.