← Articles

April 4, 2026 · Tim Fraser, Cloud Operations Lead

AWS Cost Optimization: 7 Quick Wins You Can Do This Week

Most AWS cost optimization advice tells you to buy reservations, re-architect your application, or adopt FinOps practices. That's fine for the long term. But right now, today, there's money leaking out of your account — and you can stop it in an afternoon.

Here are seven things you can do this week. Each one includes what to check, how to fix it, roughly how long it takes, and what you can expect to save.

1. Delete unattached EBS volumes

Time: 15 minutes Typical savings: $50-200/month

When you terminate an EC2 instance, its EBS volumes don't automatically delete (unless you explicitly configured that). Over time, orphaned volumes accumulate. They sit there, costing money, attached to nothing.

Go to EC2 > Volumes and filter by state: Available. Available means unattached. Review each one — if it's been available for more than a week and nobody recognises it, snapshot it (for safety) and delete the volume. A 500GB gp3 volume costs about $40/month. Most accounts have several of these.

2. Release unused Elastic IPs

Time: 5 minutes Typical savings: $5-20/month

Since February 2024, AWS charges $3.65/month for every Elastic IP — whether it's attached or not. In-use IPs attached to running instances are also charged now, but unused ones are pure waste.

Go to EC2 > Elastic IPs. Any IP that shows no association can be released immediately. If you're not sure why it exists, check the allocation time — anything from months ago that's still unattached is safe to release.

3. Stop idle dev/test instances

Time: 20 minutes Typical savings: $100-500/month

Check EC2 > Instances and sort by launch time. Then cross-reference with CloudWatch > Metrics > EC2 — look at CPU utilisation over the past 14 days. Instances sitting at 1-2% CPU are either doing nothing useful or can be replaced with something much smaller.

For instances that are only needed during business hours, set up a simple schedule: use AWS Instance Scheduler or a Lambda triggered by EventBridge to stop instances at 7pm and start them at 7am on weekdays. That alone cuts compute costs for those instances by 70%.

4. Check for oversized RDS instances

Time: 20 minutes Typical savings: $200-1,000/month

RDS is one of the most commonly over-provisioned services. A db.r6g.xlarge costs roughly $550/month. A db.t4g.medium costs roughly $60/month. For many workloads — especially dev/staging databases or production databases serving low-traffic applications — the smaller instance is more than sufficient.

Go to RDS > Databases, click each instance, and check Monitoring. Look at CPU utilisation and freeable memory over 30 days. If CPU stays below 20% and you have gigabytes of free memory, you're paying for capacity you don't use. Schedule a maintenance window and downsize.

5. Enable S3 Lifecycle policies

Time: 15 minutes per bucket Typical savings: $50-300/month

If you have S3 buckets without lifecycle policies, you're paying S3 Standard rates ($0.023/GB/month) for data that could be in Infrequent Access ($0.0125/GB) or Glacier Instant Retrieval ($0.004/GB). Logs older than 30 days, backups older than 90 days, uploaded assets that are rarely re-accessed — all of this should transition automatically.

Go to S3 > Buckets, click each bucket, go to Management > Lifecycle rules, and create a rule. A sensible default: transition to IA after 30 days, to Glacier Instant Retrieval after 90 days, and expire after 365 days (adjust based on your retention requirements).

6. Review NAT Gateway usage

Time: 15 minutes Typical savings: $50-400/month

NAT Gateways charge $0.045/hour ($32/month) plus $0.045 per GB of data processed. If your private subnets route all outbound traffic through a NAT Gateway — container image pulls, API calls, log shipping — the data processing charges can be substantial.

Check VPC > NAT Gateways and look at the CloudWatch metrics for each one: bytes processed, packets dropped, active connections. If you have NAT Gateways in multiple AZs and one is processing very little traffic, you may be able to consolidate. Better yet, use VPC endpoints for high-volume AWS service calls (S3, DynamoDB, ECR) to bypass the NAT Gateway entirely.

7. Set up billing alerts

Time: 5 minutes Typical savings: Prevents the next surprise

This doesn't save money directly, but it prevents the $2,000 surprise next month. Go to AWS Budgets and create a monthly cost budget set to your current average spend. Add alerts at 80% and 100%. Also add a forecasted alert — this warns you mid-month if you're trending above budget, not after you've already exceeded it.

Five minutes now saves you from explaining an unexpected bill to your manager later.

The pattern here

Notice that every item above requires you to log into the AWS console, navigate to a specific service, filter or sort resources, check CloudWatch metrics, and make a judgment call. For seven checks, that's an afternoon. For an account with hundreds of resources across multiple regions, it's a week.

plainfra compresses this entire exercise into a single question. Connect your account and ask:

> "What quick wins do we have for reducing our AWS costs?"

plainfra scans for unattached volumes, idle instances, oversized databases, missing lifecycle policies, and unused IPs — then presents a prioritised list with estimated savings for each item. What takes an afternoon manually takes about 30 seconds.

And once you've cleaned things up, plainfra's weekly health reports make sure waste doesn't creep back. New orphaned volumes, idle instances that someone forgot to stop, buckets created without lifecycle policies — they all show up in next week's report, not next month's bill.

The quick wins are easy. Keeping them won is the hard part. plainfra handles both.

Try plainfra free → 50K tokens, 7 days, no charge. Or see the interactive demo →.