Development··3 min read

How I Cut Our AWS Bill by 500,000 Won a Month

A few unglamorous configuration changes that significantly reduced our AWS costs.

The Moment I Opened the 1.8 Million Won Invoice

I was sorting company expenses when I opened the AWS invoice. It had been auto-charging so I'd never looked closely. 1.8 million won a month. For a B2B SaaS with 3,000 DAU. 1.8 million won.

Something was seriously wrong.

Test Instances Had Been Running for Three Months

I opened Cost Explorer and broke costs down by service. EC2 was 45% of the total. Looking at the instance list, two t3.xlarge instances spun up three months ago for testing were still running. CPU utilization: 0.3%.

Shutting them off saved 160,000 won a month. When I asked in Slack "who spun these up?", nobody claimed them.

(Embarrassing, but shockingly common.)

RDS Was Wearing Way Too Expensive a Suit

I checked the RDS instance we were running on db.r5.xlarge. CloudWatch showed average CPU at 12%. Memory usage: 8GB out of 32GB.

Downgraded to db.r5.large. Cost went from 350,000 won to 180,000 won a month. Monitored for two weeks -- no performance difference. No idea why we went with xlarge in the first place.

Two Years of Logs Sitting in S3

We'd been dumping log files to S3 with no lifecycle policy. Two years of logs in Standard storage. 2.3TB total.

Set up a policy: transition to Glacier after 90 days, delete after 365 days. S3 cost went from 80,000 won to 20,000 won a month.

NAT Gateway Was the Hidden Killer

This one I genuinely didn't know about. The NAT Gateway was eating 150,000 won a month.

Lambda functions in our Private Subnet were routing through the NAT Gateway every time they called external APIs, and data processing charges were piling up. Added VPC Endpoints and pulled Lambda functions that didn't need external access out of the VPC. Saved 110,000 won a month.

A lot of people overlook NAT Gateway costs. Definitely worth checking.

Reserved Instances -- Why Weren't We Already Doing This?

Production servers run 24/7, obviously, so I switched them to 1-year Reserved Instances. 40% off versus On-Demand. Applied Savings Plans on top. Combined: another 120,000 won a month saved.

Honestly, we should've done this ages ago. We just hadn't because it was one of those "I'll get to it" things.

Result: Two Days of Work, 520,000 Won Saved Monthly

Monthly costs went from 1.8 million won to 1.28 million won. Exactly 520,000 won saved. Time invested: about two days. No dramatic architecture changes -- just turning off unused resources and right-sizing.

Since then, I review AWS costs on the first week of every month. Takes 10 minutes. Also set up Budget Alerts so Slack notifies me when projected costs exceed a threshold.

(Cloud costs snowball the moment you stop paying attention.)

Related Posts