Low-utilisation m5, c5 and r5 instances with a cheaper same-size successor
What does ZopNight detect here?
EC2's m5, c5 and r5 families have same-size current-generation successors (m6i, c6i and r6i) at a lower on-demand rate. ZopNight recommends the swap only for instances averaging under 10% CPU over 30 days, pricing the saving from real catalog rates and abstaining below $5 a month.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-092 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | ec2_cross_family.go |
Where it applies
The cheapest migration in EC2
A same-size generation swap (m5.xlarge to m6i.xlarge, c5.2xlarge to c6i.2xlarge, r5.large to r6i.large) keeps the vCPU count, the memory and the x86 architecture, and pays a lower on-demand hourly rate for newer silicon. There is no re-architecture: stop the instance, change the type, start it. The per-instance delta is small in percentage terms, which is exactly why the rule prices it from the real catalog instead of waving at a marketing figure.
Every gate between a candidate and a finding
- The instance is running and its type starts with m5, c5 or r5.
- Average CPUUtilization, reported natively by EC2 to CloudWatch, is under 10% over the 30-day window. When the CPU series is missing this suppressor cannot run and the rule proceeds. CPU here is an optional veto against migrating a busy box, not required evidence.
- CloudWatch-agent memory data, when present, gets its own veto: high measured memory use blocks the recommendation, since a memory-tight box should not be touched on CPU evidence alone.
- A monthly cost figure exists, both SKU on-demand rates are known, the successor’s rate is genuinely lower, and the computed saving clears $5 a month. Any gap in the rate data means abstain, never an estimated fraction.
The arithmetic
savings = monthly cost x (1 - successor rate / current rate)Both rates are live on-demand catalog prices for the exact SKUs in the instance’s region, and the recommendation quotes them per hour.
See your candidates
aws ec2 describe-instances \ --filters Name=instance-state-name,Values=running \ "Name=instance-type,Values=m5.*,c5.*,r5.*" \ --query 'Reservations[].Instances[].[InstanceId,InstanceType]' --output tableInstances it deliberately skips
- m4, c4 and r4 types: those are pre-Nitro families owned by a separate rule, so one instance never receives two migration findings.
- ECS-managed instances, since their priced monthly blends in a management fee that would overstate the saving, and the fleet is not individually resizable anyway.
- Anything whose swap would change CPU architecture: a cold resize keeps the x86 boot volume, so Graviton targets are never suggested by this rule.