Cost OptimizationEC2RDSS3AWS

7 AWS Changes That Cut Our Client's Bill by 40%

MakFam Solutions 4 min read

7 AWS Changes That Cut Our Client’s Bill by 40%

When a SaaS startup came to us with a $4,200/month AWS bill and 18 months of runway left, we had a clear mandate: cut costs without breaking anything. Six weeks later, their bill was $2,450 — a 42% reduction — and response times actually improved.

Here’s exactly what we did.

The Starting Point

Before touching anything, we spent a week auditing. The AWS Cost Explorer and Trusted Advisor findings were sobering:

  • 60% of EC2 instances running at less than 10% CPU utilization
  • Three RDS instances with no connections after 6pm
  • S3 buckets storing 800GB of access logs from 2021
  • No Reserved Instances despite running the same workload for 14 months
  • CloudWatch Log retention set to “Never expire”

The biggest wins were obvious. Here’s how we tackled them in order of impact.

1. Right-Size EC2 Instances

The biggest line item was compute: $1,800/month across 12 instances. CloudWatch metrics told the real story — these instances were massively overprovisioned.

We used AWS Compute Optimizer to get specific recommendations, then tested each change in staging before applying to production:

  • 6x t3.larget3.medium (saved $180/month)
  • 2x m5.xlargem5.large (saved $210/month)
  • 1x r5.2xlarger5.xlarge (saved $140/month)

Total savings: ~$530/month

The r5 instance was running a memory-intensive process we moved to Lambda, which also improved latency.

2. Purchase Reserved Instances

The client had been running the same production workload on On-Demand instances for 14 months. We purchased 1-year Standard Reserved Instances for the 3 instances we knew would run 24/7.

Reserved Instances offer 30-40% discount over On-Demand with 1-year commitment, 60%+ with 3-year.

Total savings: ~$320/month

3. Implement S3 Intelligent Tiering + Lifecycle Policies

The S3 audit revealed three issues:

  1. 800GB of old log files with no lifecycle policy
  2. No tiering on infrequently accessed data
  3. Versioning enabled but no expiration on old versions

We added lifecycle rules to:

  • Delete objects older than 90 days in the logs bucket
  • Move objects to S3 Standard-IA after 30 days in the data bucket
  • Expire non-current versions after 30 days
aws s3api put-bucket-lifecycle-configuration \
  --bucket my-data-bucket \
  --lifecycle-configuration file://lifecycle.json

Total savings: ~$95/month

4. Schedule Non-Production Instances

The staging environment ran 24/7, but engineers only used it 9am-6pm weekdays. We used AWS Instance Scheduler to automatically stop instances outside business hours.

The math: 12 hours off per weekday + full weekends = ~65% of the week idle.

Total savings: ~$180/month

5. Optimize RDS

Three RDS instances needed attention:

Multi-AZ for dev: Dev and staging didn’t need Multi-AZ. Disabling it cut the database cost in half for those environments.

Read replica right-sizing: A db.r5.large read replica handling only reporting queries — replaced with db.t3.medium.

Aurora Serverless v2: The reporting database had spiky usage (heavy on Monday mornings, quiet the rest of the week). Aurora Serverless v2 scaled to zero during off-hours.

Total savings: ~$210/month

6. Clean Up Unused Resources

A systematic audit found:

  • 8 unattached EBS volumes (snapshots kept, volumes deleted)
  • 3 unused Elastic IPs ($3.60/month each, but the principle matters)
  • 12 old AMIs and their associated snapshots
  • 4 Elastic Load Balancers with no targets

This sounds small, but unattended resources compound. Setting up monthly AWS Config rules to flag orphaned resources prevents future drift.

Total savings: ~$45/month

7. Fix CloudWatch Log Retention

CloudWatch Logs with “Never expire” retention is a slow leak. We audited all log groups and set appropriate retention:

  • Application logs: 30 days
  • Access logs: 7 days
  • Audit/compliance logs: 365 days
  • Debug logs: 3 days

Total savings: ~$70/month

The Result

ChangeMonthly Savings
EC2 right-sizing$530
Reserved Instances$320
RDS optimization$210
Non-prod scheduling$180
S3 lifecycle policies$95
CloudWatch log retention$70
Unused resource cleanup$45
Total$1,450/month

From $4,200 to $2,750/month — and we found additional savings in month two by applying the same patterns to their data pipeline.

What You Should Do This Week

  1. Open Cost Explorer → set to last 3 months → sort by service
  2. Run Trusted Advisor (Business/Enterprise Support required for full checks)
  3. Check EC2 Compute Optimizer for rightsizing recommendations
  4. Audit your S3 buckets for lifecycle policies

Most AWS bills have 20-30% waste. The question is just whether you find it before your runrate does.


Want a free audit of your AWS infrastructure? Get in touch — we’ll identify your top 5 cost reduction opportunities at no charge.

J

MakFam Solutions

Cloud infrastructure and AI consultant with 6+ years of AWS expertise. Helping small and medium businesses build scalable, secure cloud systems.