EBS Provisioned IOPS Over-Allocation
What does ZopNight detect here?
Over-provisioned io1 and io2 volumes pay for IOPS the workload never uses. ZopNight recommends a 25% IOPS reduction floored at the 3,000 gp3 baseline, pricing the reclaim at AWS's published per-IOPS rates (io1 at $0.065 per IOPS-month, io2 tiered down to $0.032) and requires 30-day utilization metrics.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-075 |
| Category | rightsizing |
| Severity | low |
| Metric | none — pure configuration read |
| Source | ebs_iops_overalloc.go |
Where it applies
Which io1 and io2 volumes qualify
- InstanceType = io1 / io2 (volume type; only provisioned-IOPS volumes qualify)
- iops (provisioned IOPS, in resource Metadata): required; rule abstains when absent
Pricing the reclaimed IOPS at published rates
savings is the per-provisioned-IOPS charge reclaimed by dropping from the current IOPS to the recommended target IOPS (a 25% reduction floored at the 3000 gp3 baseline), priced at AWS’s published per-IOPS rates: io1 flat $0.065/IOPS-mo, io2 tiered ($0.065 first 32K, $0.046 32K–64K, $0.032 64K+). These rates are mirrored byte-for-byte from the aggregator cost engine (backend/aggregator/internal/cost/calc_aws_storage.go) so recommender savings and aggregator spend agree. savings = iopsCost(current) − iopsCost(target), scaled onto the billed basis (× cost/iopsCost(current)) when the rack IOPS cost alone exceeds the billed monthly cost (committed-use/EDP discounts), then clamped to [0, currentCost].
Lowering IOPS toward peak, never raising it
this is an OVER-allocation (downsize) rule, so it emits only a lower iops target (25% reduction, floored at 3000). It never raises IOPS and never emits a throughput target, since doing either would mutate the volume in the wrong (cost-raising) direction. At/ below baseline it returns nil, so the resize template plans no workflow (advisory only).
- Review VolumeThroughputPercentage, VolumeReadOps and VolumeWriteOps among the volume metrics EBS sends to CloudWatch for peak usage patterns
- Reduce provisioned IOPS toward the observed peak (never below the 3000 gp3 baseline)
- Consider switching to gp3 if IOPS needs are < 16,000
- Modify volume via EC2 Console → Volumes → Actions → Modify
The provisioned IOPS utilization gate
EBSIOPSUtilPct (provisioned-IOPS utilization %, 30d): REQUIRED, fail-closed (D2)