Most AWS bills do not blow up in one dramatic moment. They creep. A test server nobody shut down, a storage bucket that keeps growing, a database sized for a launch that ended eight months ago. Each one looks small. Together they can quietly take a big share of your monthly spend.
This AWS cost optimization checklist is built to stop that creep. It walks through the checks in the order that usually pays off fastest: see your spending clearly, remove what you do not use, shrink what is oversized, pay less for what you keep, and build habits so the savings last.
It is written for startups, small businesses, and engineering teams who want practical steps rather than theory. You do not need to be a FinOps specialist. You do need access to the AWS Billing console and about an hour to get started.
AWS covers this topic in the cost optimization pillar of the Well-Architected Framework, and the FinOps Foundation maintains a widely used framework for managing cloud spending. This guide borrows ideas from both and turns them into plain checks you can run this week.
One note before we start. Savings depend on your workload, your region, and how much waste you have today. Treat every percentage in this article as AWS’s published best case, not a promise.

What Is an AWS Cost Optimization Checklist?
An AWS cost optimization checklist is a structured list of review tasks that helps you find and remove unnecessary AWS spending. It covers visibility, idle resources, rightsizing, pricing commitments, storage, networking, and ongoing monitoring. Teams run it on a schedule, usually monthly or quarterly, so savings do not fade as workloads change.
Think of it as a regular health check for your bill. Instead of reacting when the invoice surprises you, you ask the same questions every time. What are we paying for? Do we still need it? Is it the right size? Are we paying the best price for it?
Why AWS Bills Grow Faster Than Expected
AWS makes it easy to start things. The pay-as-you-go model also means every running resource keeps billing until someone stops it. That is a strength when you are scaling and a trap when nobody is watching.
Here are the patterns that show up again and again:
- Forgotten resources. Unattached volumes, old snapshots, and unused Elastic IP addresses keep billing long after the project that created them is gone.
- Oversized servers. Someone picks a large instance to be safe during launch and nobody revisits the choice.
- Expensive defaults. Logs kept forever, steady workloads left on On-Demand pricing, and data stored in the most expensive tier.
- Hidden network charges. NAT gateways, cross-AZ traffic, and data transfer out rarely get the attention that compute does.
- No owner. When nobody is responsible for a service’s cost, nobody trims it.
The fix is not a one-time cleanup. It is a loop: measure, remove, resize, commit, and repeat.
Step Zero: Build Cost Visibility First
You cannot trim what you cannot see. Before you touch a single resource, set up the tools below. Most are built into AWS and cost little or nothing to switch on.
Check 1: Review AWS Cost Explorer
Open AWS Cost Explorer and group your spending by service, then by linked account, then by usage type. You can look back up to 13 months, which is enough to spot slow growth.
Your goal is simple: name your top five cost drivers. In most accounts, a handful of services make up the bulk of the bill, and that is where your first hour should go.
Check 2: Set Up AWS Budgets
AWS Budgets sends an alert when your actual or forecasted spending crosses a threshold you choose. A common starting point is an alert at 80 percent of your monthly target.
You can also track usage and Savings Plans coverage. Create one overall budget, then add one for each environment or team so the right people get the right alert.
Check 3: Turn On Cost Anomaly Detection
AWS Cost Anomaly Detection uses machine learning to flag spending that looks unusual for your account. It helps you catch a runaway job or a misconfigured service within days instead of at the end of the month.
Send the alerts to an email list or an SNS topic that someone actually reads. An alert nobody sees is just a log line.
Check 4: Use Cost and Usage Reports
The AWS Cost and Usage Reports are the most detailed billing dataset AWS provides. They are delivered to an S3 bucket, and you can query them with Amazon Athena.
You do not need them on day one. Turn them on early anyway, because they become valuable the moment Cost Explorer cannot answer a question.
Check 5: Tag Everything That Costs Money
Tags tell you who owns a resource and why it exists. Start with three: environment, owner, and project. Then activate them as cost allocation tags in the Billing console so they show up in your cost reports.
Untagged spending is the hardest to fix, because nobody feels responsible for it.
Check 6: Read Trusted Advisor and Cost Optimization Hub
AWS Trusted Advisor includes cost checks such as low-utilization EC2 instances, idle load balancers, and unassociated Elastic IP addresses. The checks you can see depend on your AWS Support plan, so confirm what your plan includes.
AWS Cost Optimization Hub pulls recommendations from across your accounts into one place, which saves you from hunting through separate consoles.
Compute Checklist: Trim the Biggest Line Item
For many teams, compute is the largest part of the bill, so Amazon EC2 cost optimization is usually the best place to start. The checks below move from the easiest wins to the ones that need testing.
Check 7: Find and Stop Idle EC2 Instances
Idle instances are the classic source of AWS cloud waste. Look for servers with consistently low CPU and almost no network traffic over several weeks. Development and staging machines are the usual suspects.
If a machine is truly unused, terminate it. If it is only needed during work hours, schedule it to stop at night and on weekends with Instance Scheduler on AWS. A stopped instance stops compute charges, but its attached EBS volumes keep billing until you delete them.
Check 8: Rightsize with AWS Compute Optimizer
Rightsizing AWS resources means matching the size of an instance to what it actually uses. AWS Compute Optimizer analyzes your utilization metrics and suggests better instance types for EC2, Auto Scaling groups, EBS volumes, and Lambda functions.
By default it looks at a recent window of metrics, so run it after a normal busy period rather than a quiet holiday week. Memory is not visible to it unless you install the CloudWatch agent, so add that first for important servers.
A simple example: an instance that sits below 20 percent CPU and uses a small share of its memory is a strong candidate for a smaller size. Move down one size at a time, test, and watch performance before going further.
Check 9: Test AWS Graviton Instances
AWS Graviton processors are designed by AWS and use the Arm architecture. AWS states that Graviton-based instances can deliver up to 40 percent better price performance than comparable x86-based instances, and savings vary by workload.
The catch is compatibility. Your software and container images must support Arm. Many modern stacks do, and managed services such as Amazon RDS, Amazon ElastiCache, AWS Lambda , and AWS Fargate offer Graviton options. Start with one non-critical service, benchmark it, then expand.
Check 10: Put Auto Scaling to Work
A fixed fleet sized for your busiest hour wastes money the other 23. Amazon EC2 Auto Scaling adds capacity when demand rises and removes it when demand falls.
Use target tracking, such as keeping average CPU near a set value, for most workloads. Add scheduled scaling when your traffic follows a predictable pattern, like a weekday business rush.
Check 11: Use Spot Instances for Interruptible Work
Amazon EC2 Spot Instances use spare AWS capacity at a steep discount. AWS advertises savings of up to 90 percent compared with On-Demand prices.
The tradeoff is that AWS can reclaim the capacity with short notice. That makes Spot a good fit for batch jobs, CI runners, data processing, and stateless workers. It is a poor fit for a single database or anything that cannot handle a sudden stop.
Check 12: Tune Lambda and Container Sizes
Serverless does not mean costless. AWS Lambda bills for memory and duration, so a function with too much memory costs more per run, while one with too little may run longer and cost more anyway. Test a few memory settings against real traffic.
The same logic applies to containers. If your ECS or EKS tasks request far more CPU and memory than they use, you are paying for room nobody needs.
Pricing Models: Savings Plans vs Reserved Instances vs On-Demand
Once your fleet is the right size, the next lever is how you pay for it. Rightsize first, then commit. If you do it the other way around, you lock in a discount on servers you did not need.
Check 13: Cover Your Steady Usage with Savings Plans
AWS Savings Plans give you a lower rate in exchange for a commitment to spend a set amount per hour over one or three years. AWS lists two main types for compute:
- Compute Savings Plans offer up to 66 percent savings. They apply across instance family, size, Region, operating system, and tenancy, and they also cover AWS Fargate and AWS Lambda.
- EC2 Instance Savings Plans offer up to 72 percent savings. They are tied to one instance family in one Region, which makes them less flexible.
Commit only to your steady baseline, the usage you are confident will exist a year from now. Do not size the commitment to your peak. AWS Cost Explorer includes Savings Plans recommendations based on your past usage, which is a sensible starting point.
Check 14: Know Where Reserved Instances Still Fit
Reserved Instances work in a similar way but are tied to specific configurations. They also apply to some services that Savings Plans historically did not cover, such as Amazon RDS and Amazon ElastiCache.
AWS has been adding database-focused commitment options too, so look at what is currently offered before you buy Reserved Instances for a database. Pricing options change, and the AWS pricing pages are the final word.
How the Options Compare
This table summarizes the main choices. The discounts are the maximums AWS publishes, so your real savings will depend on the instance type, term, and payment option.
| Option | Best for | Maximum published discount | Flexibility | Commitment |
| On-Demand | New or unpredictable workloads | None (baseline price) | Highest | None |
| Compute Savings Plans | Steady compute that may change over time | Up to 66% | High, including Fargate and Lambda | 1 or 3 years |
| EC2 Instance Savings Plans | Stable usage of one instance family in one Region | Up to 72% | Medium | 1 or 3 years |
| Standard Reserved Instances | Predictable workloads, some database services | Up to 72% | Low | 1 or 3 years |
| Spot Instances | Fault-tolerant, interruptible jobs | Up to 90% | Capacity can be reclaimed | None |
A practical blend for many small teams looks like this: a Compute Savings Plan for the baseline, On-Demand for the unpredictable part, and Spot for anything that can survive an interruption.
Storage, Database, and Network Checks
Compute gets the attention, but storage, databases, and networking often hide the surprises. These checks are easy to skip and easy to fix.
Check 15: Add S3 Lifecycle Policies
Amazon S3 storage optimization starts with a simple question: does this data still need the most expensive storage class? S3 Lifecycle rules move objects to cheaper classes as they age and delete them when they are no longer useful.
A good first set of rules does three things:
- Moves older data to an infrequent access or archive class
- Expires old object versions in versioned buckets
- Cleans up incomplete multipart uploads that nobody finished
Some storage classes have minimum storage durations and minimum billable object sizes. Read the Amazon S3 pricing page before you move millions of small files, or the move can cost more than it saves.
Check 16: Consider S3 Intelligent-Tiering
If you cannot predict how often data is read, S3 Intelligent-Tiering can do the sorting for you. It moves objects between access tiers automatically based on how they are used.
It adds a small per-object monitoring and automation charge, and small objects are handled differently. For large, unpredictable datasets it is often easier than writing and maintaining your own rules.
Check 17: Clean Up EBS Volumes and Snapshots
Hunt for volumes in the “available” state. They are attached to nothing and still billing. Then look at old snapshots, especially ones left behind by deleted images or retired servers.
While you are there, check your volume types. Amazon EBS gp3 volumes are priced lower per GB than gp2 and let you set IOPS and throughput separately from size. You can usually change a volume’s type in place with Elastic Volumes, without detaching it.
Check 18: Rightsize Databases and Pause What You Can
Amazon RDS instances are often sized for the scariest day of the year. Check CPU, memory, and connections over a full month, and step down if the headroom is huge.
For development and test databases, stop them when nobody is using them. Note that RDS restarts a stopped instance automatically after a limited number of days, so check the current rules. Also review backup retention and delete old manual snapshots you no longer need.
Check 19: Fix NAT Gateway and Data Transfer Charges
Network costs are the line item that surprises people most. A NAT gateway charges an hourly fee and a fee for every gigabyte it processes, so traffic from private subnets to AWS services can add up fast. Exact rates vary by Region, so confirm them on the Amazon VPC pricing page.
Three fixes help many teams:
- Add gateway VPC endpoints for S3 and DynamoDB, which carry no additional charge, so that traffic skips the NAT gateway.
- Keep chatty services in the same Availability Zone where it is safe to do so, since cross-AZ traffic is billed.
- Put a CDN such as Amazon CloudFront in front of content that users download often, which can reduce data transfer out from your origin.
Also review public IPv4 addresses. Since February 2024, AWS charges for every public IPv4 address, whether it is in use or idle. Release Elastic IPs you do not need.
Check 20: Control CloudWatch Costs
Monitoring can become its own cost problem. Amazon CloudWatch Logs charges for the data you ingest and the data you store, and log groups can be set to keep data forever unless you choose a retention period.
Set a retention period on every log group. Look for noisy debug logs in production, and be careful with custom metrics that have many unique dimensions. The CloudWatch pricing page explains each charge. Use CloudWatch cost monitoring in Cost Explorer to see which log groups drive the bill.
Check 21: Delete Orphans and Idle Load Balancers
Load balancers with no healthy targets, NAT gateways in unused VPCs, abandoned development environments, and old test databases all bill quietly. Trusted Advisor and Cost Optimization Hub often flag these. A monthly sweep of your tagged and untagged resources keeps this category small.
How to Run an AWS Cost Optimization Review, Step by Step
If you want the short version of everything above, follow these steps in order:
- Turn on Cost Explorer, AWS Budgets, and Cost Anomaly Detection.
- Tag your resources and name your top five cost drivers.
- Delete idle, unattached, and orphaned resources.
- Rightsize compute and databases using Compute Optimizer.
- Add Auto Scaling and schedule non-production environments to stop after hours.
- Buy Savings Plans to cover your steady baseline.
- Add S3 lifecycle rules, move volumes to gp3, and set log retention.
- Fix NAT gateway and data transfer charges, then review spending every month.
Common Mistakes to Avoid
Most failed cost projects fail for the same few reasons:
- Committing before rightsizing. You end up paying a discounted price for oversized servers.
- Sizing commitments to peak usage. Commit to the baseline and let On-Demand cover the rest.
- Deleting without checking ownership. Take a snapshot and ask the owner first. A cleanup that breaks production costs more than it saves.
- Judging usage from a quiet week. Look at a full business cycle, including month-end or seasonal peaks.
- Treating it as a one-time project. Waste returns as teams ship new things. The review has to repeat.
- Cutting reliability to cut cost. Do not remove redundancy that protects uptime. The goal is less waste, not less resilience.
How to Decide Where to Start
Your starting point depends on your bill and your team’s time.
- Small bill, small team: Do visibility, idle cleanup, gp3 volumes, and log retention first. These are low-risk and fast.
- Steady EC2, Fargate, or Lambda spend: Rightsize, then look at Compute Savings Plans.
- Large S3 footprint: Start with lifecycle rules or Intelligent-Tiering.
- High data transfer or NAT charges: Start with VPC endpoints and traffic paths.
Assign one owner for cost, even if it is part of their job and not the whole job. This is the heart of AWS cloud financial management and the FinOps principles: engineers, finance, and leadership look at the same numbers and share responsibility for them.
A Realistic 30-60-90 Day Roadmap
An AWS cost optimization roadmap does not need to be dramatic. A phased plan is easier to finish and easier to defend.
- Days 1 to 30: Build visibility, set budgets and anomaly alerts, tag resources, and delete obvious waste.
- Days 31 to 60: Rightsize compute and databases, schedule non-production environments, and fix storage and log settings.
- Days 61 to 90: Buy commitments for your baseline, tackle network costs, and set a monthly review with a named owner.
Final Conclusion
A good AWS cost optimization checklist turns a stressful bill into a routine. See your spending clearly, remove what you do not use, rightsize what you keep, pay less for steady usage with Savings Plans, and tidy up storage, networking, and logs. Then repeat it every month.
You do not need to do everything at once. Pick the three checks that match your biggest cost drivers and finish them this week. Savings vary by workload, so measure the result in Cost Explorer before you move on.
Your next step is small. Open Cost Explorer, name your top five cost drivers, and put thirty minutes on your calendar for a first review. Use this AWS cost optimization checklist as the agenda.