EC2 RI Coverage Below 50%
What does ZopNight detect here?
EC2 fleets where production instances run below 50% Reserved Instance coverage leave commitment discounts unclaimed. ZopNight infers 0% coverage from a missing CUR reservation label, requires 60 days of history and high uptime, and prices savings as actual monthly cost minus the live 1-year RI rate times 730.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-1506 |
| Category | discount |
| Severity | medium |
| Metric | none — pure configuration read |
| Source | ri_ec2_coverage.go |
Where it applies
Reading coverage from billing, not the tag
- resource.Status: running
- Production classification: isProdEnvTag or prod-looking name; dev/test env tag is an authoritative veto
- Coverage gate from the authoritative CUR-derived ReservationCoverage signal (EvaluationContext), not the phantom ri_coverage_pct tag. A Reservation/SavingsPlan label => already covered => abstain; absence of a label => no commitment => 0% coverage (the <50% gap this rule targets). Gating on the tag kept the rule permanently dead (P5, no producer). The ri_coverage_pct Tag is read only as a documented P5 last-resort to refine the displayed pct, never the firing gate.
- EvaluationContext: per-UID pricing, CommitmentEligible, SuppressCommitmentForUptime, live RI TierRates (CommitmentBreakEven)
The 50% coverage threshold
riEC2CoverageThreshold=50Break-even net for closing the coverage gap
concrete-or-abstain (discount/commitment). Savings = the real break-even net, nothing else: CommitmentBreakEven prices the RI at the published 1-year No Upfront rate times 730 hours and recommends only when that is less than the resource’s actual current monthly cost, so savings = currentCost − RI×730 (positive by construction), headline % from that live net. Abstains when break-even inputs are unavailable (live RI tier rates absent/non-positive); the prior cost × DeriveCommitmentFraction(tiers, 0.40) flat-fraction fallback is dropped (byte-pattern-identical to the sibling RC-014 fix). commitmentFallbackFraction is no longer applied. Gated by CommitmentEligible (≥60d history, high uptime, utilization) and long-off uptime suppression.
Choosing 1-year versus 3-year RIs
- Review EC2 RI recommendations in AWS Cost Explorer
- Evaluate 1-year vs 3-year commitment based on workload stability
- Consider Convertible RIs for flexibility
- Purchase RIs matching the instance family and region