Bedrock Provisioned Throughput Underutilized
What does ZopNight detect here?
Underutilized Bedrock Provisioned Throughput means invocations exist but output stays under 100,000 tokens per day across the 30-day window, far below one Model Unit's capacity. ZopNight recommends shrinking to the 1-MU floor, pricing savings as the per-MU-hour rate times the removed units times 730 hours, abstaining on committed-term PTs.
Signal and threshold
| Field | Value |
|---|---|
| Rule IDs | RC-1602 |
| Category | rightsizing |
| Severity | medium |
| Metric | none — pure configuration read |
| Source | bedrock_pt_underutilized.go |
Traffic present but output tokens thin
- resource.Type: bedrock-pt
- MetricsAware: Invocations (must show activity) and OutputTokenCount (Sum-stat datapoints), both taken from Bedrock’s invocation and token counters
The per-day output token floor
bedrockPTUnderutilizedLookbackDays=30, bedrockPTUnderutilizedTokensPerDayFloor=100000Costing the model units above the one-unit floor
Concrete or abstain, now a quantified rightsizing rec (as of this PR). Sums per-period OutputTokenCount Datapoints across the 30-day window and divides by lookback days to derive per-day output throughput. The detection signal (invocations exist but per-day output tokens fall below the floor, and a single MU on Claude 3 Sonnet handles ~250k output tokens/min at peak) gates the rec. When it fires, the rule prices the Model-Unit reduction off the real no-commitment per-MU-hour rate the aggregator now resolves under the foundation-model-id key (discoverer ListFoundationModels harvest, exact-matched to the offer-file display token; see aggregator docs/COST.md): savings = perMURate × (currentMU − 1) × 730h (target = the 1-MU floor, since traffic sits far below a single MU’s capacity), capped at the resource’s own monthly cost; optimized = cost − savings. bedrock_pt_underutilized.go implements SKURatesAware (SetSKURates), mirroring RC-1610’s LookupSKURate consumption. The rule abstains, never emitting a $0 or fabricated rec, when: the per-MU rate isn’t ingested; the PT is already at the 1-MU floor (RC-1603 on-demand migration is the lever there); or the PT is on a committed term (bedrockResourceIsCommittedTerm, billed at a rate other than the captured no-commitment one, mirroring RC-1610). 1-month/6-month/Custom commitment-term PT resources remain unresolvable regardless (no per-term price dimension in the offer file). Emit + abstain matrix pinned in bedrock_pt_underutilized_test.go (TestBedrockPTUnderutilized_EmitsQuantifiedSaving + the abstain cases).
Sizing model units to peak token throughput
- Review InputTokenCount/OutputTokenCount over the past 14 days
- Calculate the smallest MU count that comfortably covers peak token throughput
- Adjust ModelUnits via UpdateProvisionedModelThroughput or recreate at lower MU
- Confirm steady-state latency stays within SLA
Invocations plus output token count
Invocations, OutputTokenCount (30-day lookback, Sum-statistic)