# EBS Provisioned IOPS Over-Allocation

> 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.

Source: https://zop.dev/integrations/aws/recommendations/ebs-provisioned-iops-over-allocation
Updated: 2026-08-19

---

## 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](https://aws.amazon.com/ebs/pricing/): 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).
1. Review VolumeThroughputPercentage, VolumeReadOps and VolumeWriteOps among [the volume metrics EBS sends to CloudWatch](https://docs.aws.amazon.com/ebs/latest/userguide/using_cloudwatch_ebs.html) for peak usage patterns
2. Reduce provisioned IOPS toward the observed peak (never below the 3000 gp3 baseline)
3. Consider switching to gp3 if IOPS needs are \< 16,000
4. Modify volume via EC2 Console → Volumes → Actions → Modify

## The provisioned IOPS utilization gate

EBSIOPSUtilPct (provisioned-IOPS utilization %, 30d): REQUIRED, fail-closed (D2)
