serverlessawslambdacost-optimization

Provisioned concurrency break-even math: when warmth pays for itself

Provisioned concurrency trades a usage bill for a capacity bill. There is a clean break-even point based on utilization, and most teams sit on the wrong side of it. Here is how to compute yours.

The C3X Team··7 min read

Quick answer

Provisioned concurrency bills $0.0000041667 per GB-second just to keep an environment warm, plus a reduced duration rate of $0.0000097222 per GB-second when it runs, against the on-demand rate of $0.0000166667. Because the duration rate is about 42 percent cheaper, provisioned concurrency breaks even at roughly 60 percent utilization of the warm capacity you reserve. Below that, you pay more than on-demand; above it, you pay less and get no cold starts as a bonus. Most teams provision for peak, run at 10 to 20 percent average utilization, and end up paying two to four times the on-demand price for the privilege.

Provisioned concurrency is sold as a latency feature, and it is. But it is also a billing model change, and the change is bigger than most teams realize. On-demand Lambda charges only when code runs. Provisioned concurrency charges continuously for reserved warm environments and then charges a discounted rate for execution on top. Whether that is cheaper or more expensive comes down to one number: how busy the reserved capacity actually is.

The two price lists

Componentx86 rateArm rate
On-demand duration$0.0000166667 per GB-s$0.0000133334 per GB-s
Provisioned concurrency (warm)$0.0000041667 per GB-s$0.0000033334 per GB-s
Duration on provisioned$0.0000097222 per GB-s$0.0000077778 per GB-s
Requests$0.20 per million, both models

Note that the warm charge runs for the entire time the provisioned concurrency is configured, 24 hours a day unless you schedule it down. One provisioned environment at 1024 MB costs 1 GB times 2,592,000 seconds in a 30 day month times $0.0000041667, which is $10.80 per month, before a single request is served.

Deriving the break-even

Let U be utilization: the fraction of reserved warm-seconds during which the environment is actually executing. Per warm-second, provisioned concurrency costs 0.0000041667 plus U times 0.0000097222. On-demand costs U times 0.0000166667 for the same work. Setting them equal gives U equal to 0.0000041667 divided by (0.0000166667 minus 0.0000097222), which is about 0.60.

So the rule is simple: provisioned concurrency is cheaper only above roughly 60 percent utilization, and the same ratio holds on Arm. Below that, on-demand wins on price and you are paying a premium for predictable latency.

UtilizationProvisioned cost per warm hour (1 GB)On-demand equivalent
10%$0.0185$0.0060
30%$0.0255$0.0180
60%$0.0360$0.0360
90%$0.0465$0.0540
100%$0.0500$0.0600

Why real utilization is so low

Utilization of a provisioned environment equals average concurrency divided by provisioned concurrency. Average concurrency is invocations per second times average duration in seconds. A function handling 50 requests per second with a 100 ms duration has an average concurrency of 5. If you provision 20 to cover the peak, utilization is 25 percent and you are paying about 1.4 times the on-demand price.

Worse, teams typically provision for peak concurrency across the whole day, while traffic follows business hours. A function with a 4 to 1 peak-to-trough ratio provisioned at peak runs at well under 30 percent average utilization over 24 hours. That is the common case, and it is why provisioned concurrency bills surprise people.

Making the numbers work

Three moves push utilization up. Schedule it: use Application Auto Scaling to set provisioned concurrency to zero or a floor outside business hours. Cutting 16 hours a day of warm charges removes two thirds of the capacity cost and lifts effective utilization dramatically. Provision the floor, not the peak: cover the steady base of concurrency with provisioned capacity and let on-demand absorb the spikes, since Lambda spills over automatically. And target only the functions that need it, typically the synchronous, user-facing ones behind an API, not asynchronous consumers where a 500 ms cold start is invisible.

There is also a savings plan angle. Compute Savings Plans cover Lambda duration and provisioned concurrency, so a one-year no-upfront commitment shaves roughly 12 to 17 percent off both rates. That does not change the break-even ratio, since both sides scale, but it lowers the absolute number.

What spillover does to the estimate

Provisioned concurrency is not a ceiling. When demand exceeds the provisioned level, Lambda serves the extra requests on standard on-demand environments at the full $0.0000166667 per GB-second rate, with cold starts. This is helpful because it means under-provisioning degrades gracefully rather than failing, but it also means a bill can contain both models at once and a quick estimate that assumes all traffic lands on provisioned capacity will be wrong. Model the two streams separately: the provisioned share at the reduced rate plus the warm charge, and the spillover share at on-demand rates. For most workloads the cheapest configuration provisions somewhere between average and peak concurrency, accepting cold starts on the top slice of traffic that arrives least often.

A worked example

An API-backed function at 1024 MB serves 20 million requests a month at 180 ms average. On-demand: 20 million times 0.18 seconds times 1 GB equals 3.6 million GB-seconds, which is $60.00, plus $4.00 in request charges, so $64.00. Average concurrency is about 1.39. Provisioning 10 environments costs 10 times $10.80 equals $108.00 in warm charges plus $35.00 of discounted duration, roughly $147.00 all in, more than double. Provisioning 2 instead costs $21.60 warm, covers the base load, and lets on-demand handle the rest for around $70 total. The shape of the reservation matters more than the decision to reserve, the same lesson that shows up in anyprovisioned concurrency analysis. Price both configurations against the resource catalog before committing.

FAQ

At what utilization does provisioned concurrency break even?

Around 60 percent. Provisioned concurrency costs $0.0000041667 per GB-second to stay warm plus $0.0000097222 per GB-second of execution, against an on-demand rate of $0.0000166667. Solving for the utilization where the two are equal gives 0.0000041667 divided by the 0.0000069445 rate difference, about 0.60. The same ratio holds for Arm functions.

How much does one provisioned concurrency environment cost per month?

A single 1024 MB provisioned environment costs 1 GB times 2,592,000 seconds in a 30 day month times $0.0000041667, which is $10.80 per month before serving any traffic. A 512 MB environment is $5.40 and a 2048 MB environment is $21.60. Execution on top of that bills at the reduced $0.0000097222 per GB-second rate.

Why is my provisioned concurrency bill higher than on-demand?

Almost always because utilization is low. Teams provision for peak concurrency and leave it configured 24 hours a day while traffic follows business hours. A function with average concurrency of 5 provisioned at 20 runs at 25 percent utilization and pays roughly 1.4 times the on-demand price. At 10 percent utilization the premium is about three times.

How do I calculate the concurrency I actually need?

Average concurrency equals invocations per second multiplied by average duration in seconds. A function handling 50 requests per second at 100 ms has average concurrency of 5. Provision close to that steady base rather than the peak, and let on-demand spill-over absorb spikes, since Lambda automatically handles requests above the provisioned level at standard rates.

Can I schedule provisioned concurrency to cut cost?

Yes. Application Auto Scaling can set provisioned concurrency on a schedule, dropping it to zero or a low floor outside business hours. Removing 16 hours a day of warm charges eliminates roughly two thirds of the capacity cost and sharply raises effective utilization, which is often the single largest saving available on a provisioned concurrency bill.

How does C3X help evaluate provisioned concurrency?

C3X prices Lambda from Terraform, including provisioned concurrency settings, so the monthly capacity charge appears in the pull request rather than on next month's invoice. That makes it straightforward to compare a provisioned configuration against on-demand at your expected traffic, and to see the difference between provisioning the peak and provisioning the floor before you deploy either.

What to do next

See the capacity bill before you reserve it. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.