For 11 consecutive months, our primary production Auto Scaling Group (ASG) serving API traffic never scaled down below 40 EC2 instances (c6i.2xlarge) during off-peak weekend hours. Traffic routinely dropped by 82% between 01:00 UTC and 06:00 UTC, yet the fleet remained pinned at peak daytime capacity.
This resulted in an estimated $14,200/month in unnecessary EC2 and EBS compute spend.
A custom CloudWatch step scaling policy was configured with the metric AWS/EC2 CPUUtilization. However, the alarm statistic had been set to Minimum rather than Average during an initial provisioning terraform script.
Every 5 minutes, an internal log-shipping cron executed on a single worker node for 18 seconds, spiking that one instance's CPU to 22%. Because the CloudWatch Alarm evaluated Minimum(CPUUtilization) < 15%, and the cron ensured at least one instance stayed above 15% across interleaved sampling windows, the scale-in condition was never satisfied.
PredefinedMetricType: ASGAverageCPUUtilization set to 60.0%.RequestCountPerTarget vs GroupInServiceInstances to alert on capacity-traffic divergence.
Spin the Roulette to roll a random Cloud Challenge to build or an Engineering Decision Record (EDR) to read and analyze.
Create an account to verify scenarios, run automated test suites, and save completed builds to your profile.
Welcome back! Sign in to verify solutions and view your cloud progress.
BuildRoulette started with a simple observation: there are a lot of places to learn cloud, but knowing something and being able to build, troubleshoot, and make decisions with it are two completely different things.
Built by Oyinkansola — less memorization, more doing; less “here's what this service does,” more “here's a problem, figure it out.”
Build something. Break something. Figure it out.