Skip to main content
rightsizing · aws

Lambda reserved-concurrency ceilings far above observed peaks (checked, but never billed)

resource types
1
rule IDs covered
1
severity
low

What does ZopNight detect here?

Reserved concurrency above 100 with an observed peak leaving over half of it idle is a real over-allocation, yet AWS charges $0 for reserved concurrency; only the provisioned kind bills. With no dollar to recover, ZopNight evaluates every gate and then abstains rather than emit a zero-savings cost card.

Signal and threshold

How ZopNight evaluates Lambda reserved-concurrency ceilings far above observed peaks (checked, but never billed).
Field Value
Rule IDsRC-157
Categoryrightsizing
Severitylow
Metricnone — pure configuration read
Sourcelambda_concurrency.go

A rule whose conclusion is that there is nothing to charge for

Every gate in this rule runs. The function’s reserved concurrency must exceed 100; the native concurrent-executions metric must be present with adequate coverage; the observed peak must leave more than half the reservation idle; the function must carry a known positive cost. And then, with over-allocation genuinely established, the rule returns nothing, because reserved concurrency is free. AWS bills provisioned concurrency (the pre-warmed kind); a reservation is just a cap and a carve-out from the account pool, and lowering it changes no invoice line. A cost-shaped recommendation with no recoverable dollar is either a fabricated fraction or a $0 card, and the rule declines both.

Why an oversized reservation still deserves a look

The account has one regional concurrency pool (default 1,000), and every reservation carves its slice out of what all other functions share. A function reserving 500 it never uses is not wasting money; it is starving neighbours. Other functions throttle at peak because the pool was hoarded. That is an operational-capacity issue, and it is the real reason to trim reservations even though no bill changes.

Judge a reservation against its peak

Terminal window
aws lambda get-function-concurrency --function-name my-fn
aws cloudwatch get-metric-statistics \
--namespace AWS/Lambda --metric-name ConcurrentExecutions \
--dimensions Name=FunctionName,Value=my-fn \
--start-time "$(date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)" \
--end-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--period 3600 --statistics Maximum

A reservation several times the highest hourly peak is the over-allocation shape; size to peak plus real headroom, not to hope.

The neighbouring setting that does cost money

Confusion between the two concurrency knobs is common enough to flag: provisioned concurrency bills per GB-second whether the function runs or not, and an oversized provisioned figure is a genuine cost finding with real dollars. If a review of reservations turns up provisioned configs alongside, those are where the invoice actually moves. Check aws lambda list-provisioned-concurrency-configs --function-name my-fn while you are there. This page’s rule stays scoped to the free kind, and stays silent about it by design.

See it fire on your bill.

Connect an account read-only. The first findings land in minutes.

417 rule families across 353 resource types on 22 platforms. Every threshold, metric, and IAM action is documented on these pages before you grant anything.

417 rule families documented
353 resource types covered
read-only default access level
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·