aliteq.

Serverless explained: what Cloudflare Workers and AWS Lambda really bill you for

There is still a server. You just stop owning it. Here is how Workers and Lambda differ in how they run your code, start cold, and charge you, with the real list prices and the one month our own site hit the free plan's limit.

0xLaxUpdated 3d ago9 min readWeb story
Flat illustration of a person holding up a coral stopwatch in front of a large empty cloud with one lit window
Share

If you have heard "just deploy it serverless" and nodded along, this page is for you. I run aliteq.com on one of these platforms, so I will tell you what that was like, including the month it went wrong. The prices come from each vendor's own pages, read on 3 October 2026.

What does serverless actually mean?

Serverless means a provider runs your code on demand and bills you for what it uses. There are still servers, owned by someone else. You do not pick a machine, patch it or leave it idling overnight. You upload a function, and the platform starts it when a request comes in.

Compare that with the old way. A rented server costs the same whether it serves one visitor or none. A serverless function costs nothing while nobody calls it. Our guide to what hosting is and what it costs covers the rented-server model if you want the contrast.

The trade is control. You get a short-lived function with limits on time, memory and size. In return you get no servers to babysit and a bill that tracks your traffic.

How do Workers and Lambda run your code?

Workers runs your code in a V8 isolate, a lightweight sandbox inside a runtime that is already running. Lambda runs your code in a Firecracker microVM, a stripped-down virtual machine. Both keep customers apart. They pay the startup cost in different places.

Cloudflare's docs describe isolates as "lightweight contexts that provide your code with variables it can access and a safe environment to be executed within." They add: "Instead of creating a virtual machine for each function, an isolate is created within an existing environment. This model eliminates the cold starts of the virtual machine model."

AWS's Firecracker site describes microVMs as "lightweight virtual machines" that boot in under 125 ms with under 5 MiB of overhead per VM. It also says Firecracker is "the same Firecracker virtualization powering 15 trillion+ monthly Lambda function invocations." So Lambda is a real virtual machine per function environment, made small and fast.

A V8 isolate means your Worker is JavaScript or WebAssembly code. A microVM means Lambda can run several language runtimes and container images. That is a real difference if your code is not JavaScript.

What is a cold start, and who has one?

A cold start is the delay when the platform has to prepare a fresh environment before it can run your code. A warm start reuses an environment that is already set up. Lambda has cold starts and tells you so. Cloudflare says isolates remove the virtual-machine kind.

AWS's guide says a cold start is the time Lambda spends to download "your code, starts the environment, and runs any initialization code outside of the main handler." It adds: "You are charged for this time." It also says: "Cold starts typically occur in under 1% of invocations. The duration of a cold start varies from under 100 ms to over 1 second."

For Lambda, AWS lists two fixes: Provisioned Concurrency, which "pre-initializes execution environments", and SnapStart, which snapshots the initialized environment when you publish a version.

I am not printing a Workers cold-start number. Cloudflare's docs make the claim in words and I did not measure it. What I can say from our own site: a heavy page rendered from nothing is slow on any platform, because the cost is your code, not the sandbox.

What are the limits?

Each platform caps how long a function runs, how much memory it gets and how big it can be. The two sets of limits are shaped differently, so read them before you pick one.

Workers vs Lambda limits (read 3 Oct 2026)

Runs code in

Cloudflare Workers
V8 isolate
AWS Lambda
Firecracker microVM

Longest run

Cloudflare Workers
No duration limit for HTTP requests; CPU time up to 5 minutes (default 30 seconds) on Paid
AWS Lambda
15 minutes (900 seconds)

Memory

Cloudflare Workers
128 MB per isolate
AWS Lambda
128 MB to 10,240 MB, your choice

Code size

Cloudflare Workers
64 MiB uncompressed
AWS Lambda
250 MB unzipped package; container images up to 10 GB

Default concurrency

Cloudflare Workers
No account request limit on Paid
AWS Lambda
1,000 concurrent executions per Region (soft limit)

Free plan

Cloudflare Workers
100,000 requests a day, 10 ms CPU per request
AWS Lambda
Free tier of 1M requests and 400,000 GB-seconds a month

Two things catch beginners. Workers gives you 128 MB, fixed. If you need a few gigabytes for an image or a model, that is Lambda's territory. And the Workers free plan caps CPU at 10 ms per request, which matters in the next section.

What do they charge, and what is the difference?

Workers charges for requests and for CPU time. Lambda charges for requests and for GB-seconds, which is memory multiplied by how long your code runs. The key difference is what happens while your code waits for a database or another API.

Cloudflare's limits page says CPU time "measures how long the CPU spends executing your Worker code. Waiting on network requests (such as fetch() calls, KV reads, or database queries) does not count toward CPU time." On Lambda, AWS bills from "the time your code begins executing until it returns", so a wait is billed because the function is still running.

Comparison table of Cloudflare Workers and AWS Lambda. Workers runs code in V8 isolates and bills requests at $0.30 per million after 10 million included, plus $0.02 per million CPU milliseconds after 30 million, with a $5 monthly minimum on the paid plan.
US East list prices for Lambda x86. Read 3 October 2026. · aliteq research

The price list, in one place:

  • Workers Paid: $5 a month minimum. 10 million requests and 30 million CPU milliseconds included. Then $0.30 per extra million requests and $0.02 per extra million CPU milliseconds. No charge for duration or for bandwidth.
  • Workers Free: 100,000 requests a day, 10 ms of CPU per request.
  • Lambda, x86: $0.20 per million requests and $0.0000166667 per GB-second for the first 6 billion GB-seconds a month. Arm is cheaper per GB-second at $0.0000133334. Free tier: 1 million requests and 400,000 GB-seconds a month.

Cloudflare also says static asset requests are free and unlimited, and it does not bill the subrequests your Worker makes.

What does one month cost on each?

At low volume Lambda is cheaper, mostly because it has no monthly fee. At 100 million requests the winner depends on how much memory you give Lambda and how long each request waits. Workers' bill barely moves with either.

My assumption: every request uses 7 ms of CPU, which is the figure Cloudflare uses in its own pricing examples. Lambda runs each request for 100 ms of wall-clock time unless I say otherwise. The formulas:

  • Lambda: GB-seconds = requests x seconds x (memory in MB / 1024). Compute = (GB-seconds minus 400,000) x $0.0000166667. Requests = (requests minus 1 million) / 1 million x $0.20.
  • Workers: $5 + (requests minus 10 million) / 1 million x $0.30 + (requests x 7 ms minus 30 million) / 1 million x $0.02.
Bar charts of monthly cost for the same traffic. At 1 million requests: Workers Paid $5.00, Lambda $0.00. At 10 million: Workers $5.80, Lambda $1.80. At 100 million requests: Workers $45.40; Lambda $33.97 at 128 MB and 100 ms, $96.47 at 512 MB and 100 ms, and $117.30 at 128 MB when each request waits 500 ms.
Our arithmetic from list prices, US East x86. Excludes Lambda's front door (API Gateway or function URL), data transfer and logs. · aliteq research

Read the chart this way. At 1 million requests, Lambda costs $0 because the whole month fits inside its free tier. Workers Paid costs its $5 minimum. At 100 million requests with 128 MB and a quick 100 ms, Lambda is $33.97 against $45.40 for Workers. Raise Lambda to 512 MB and it becomes $96.47. Make each request wait 500 ms on a slow database and the 128 MB function becomes $117.30. Workers stays at $45.40 for all of them. Cloudflare's own pricing page prints that $45.40 for 100 million requests at 7 ms.

Two caveats matter. Lambda needs something in front of it to receive web requests, such as API Gateway or a function URL, and I did not price those. And 7 ms is a flattering average. Cloudflare's docs say server-side rendering "typically" uses 10 to 20 ms. If your app does that, the Workers CPU line grows.

If your AWS invoice is already confusing, the line items around your functions often cost more than the functions. See why your AWS bill is so high.

What happened when aliteq.com hit the free plan's limit?

Our site hit the Workers free plan's 10 ms CPU cap and started returning errors. It rendered most pages on demand, and a cold render takes more than 10 ms. Moving to the $5 paid plan on 27 September 2026 stopped the errors.

aliteq.com runs on Cloudflare Workers, built with OpenNext, with Supabase as the database. On the free plan, Cloudflare's analytics showed 20,662 CPU-limit errors in seven days. The count rose from 352 a day to 5,554 on 23 September. Traffic was about 100,000 requests a day, which is the free daily ceiling. Visitors, and search crawlers, saw error pages on our busiest pages.

Timeline of aliteq.com on Cloudflare Workers. On the free plan, with a 10 ms CPU limit per request, the site logged 20,662 CPU-limit errors in 7 days, peaking at 5,554 on 23 September. On 27 September the owner moved to Workers Paid at $5 a month and the errors dropped to zero. Link prefetch, which was 47% of invocations, was then turned off.
From aliteq.com's own Workers analytics, 20 to 27 September 2026. · aliteq research

After the upgrade the errors fell to zero. I also set a CPU limit of 5 seconds in our config, a guard so a runaway request cannot run up a bill. The documented ceiling is higher, but this is a limit you choose.

The next problem was cost, not errors. Before we turned off link prefetch, our site used about 145 to 190 million CPU milliseconds a month. The plan includes 30 million. The overage works out to about $2.30 to $3.20 by Cloudflare's price, since (145M minus 30M) x $0.02 per million is $2.30. Prefetch had been 47% of invocations and 43% of CPU. Switching it off cut that waste.

So the lesson is small and useful. Serverless did not fail. We hit a documented plan limit and then paid for work we did not need. If you are choosing a platform, read the CPU limit for the plan you will be on, not only the paid one.

Which one should you pick?

Pick Lambda if you want a no-fixed-fee start, need more than 128 MB of memory, or have code that is not JavaScript. Pick Workers if your app waits on databases and APIs a lot, or you want a flat $5 floor and no memory dial. Both are fine for a small project.

  • Hobby or early app under a million requests: both are free or nearly free. Lambda's free tier is bigger. Workers Free has the 10 ms CPU cap.
  • Server-rendered website or API with slow data calls: Workers' billing ignores waiting.
  • Heavy jobs that need gigabytes of memory or up to 15 minutes: Lambda.
  • A vibe-coded app on Lovable, Bolt or Replit: your builder hosts it somewhere you did not choose. Our guide to shipping a vibe-coded app explains where it lives.

One more habit works on either platform. A cache that answers repeat requests before your function runs is the cheapest request there is.

Quick answers

What does serverless mean?
It means a provider runs your function only when a request arrives and bills you for use, so you do not rent or manage a server. Servers still exist, but they belong to the provider. Cloudflare Workers and AWS Lambda are two of the best-known examples.
Is Cloudflare Workers cheaper than AWS Lambda?
It depends on your traffic and how long each request waits. At 1 million requests a month, Lambda is $0 inside its free tier and Workers Paid is its $5 minimum. At 100 million requests with a slow database wait of 500 ms, Lambda at 128 MB works out to $117.30 against $45.40 for Workers. These are list prices and exclude Lambda's front door.
What is a cold start?
It is the delay while a platform prepares a fresh environment for your code. AWS says Lambda cold starts occur in under 1% of invocations and run from under 100 ms to over 1 second, and that you are billed for that time. Cloudflare's docs say isolates eliminate the virtual-machine cold start.
What is the Workers free plan limit?
The free plan allows 100,000 requests a day and 10 milliseconds of CPU time per invocation. Paid raises CPU time to a default of 30 seconds, configurable up to 5 minutes, and charges a $5 monthly minimum. Our own site went over the free limit and returned errors until we upgraded.
How long can an AWS Lambda function run?
A single invocation can run for up to 15 minutes (900 seconds). Lambda functions can use 128 MB to 10,240 MB of memory. For Workers, HTTP requests have no wall-clock duration limit, but CPU time is capped, with a default of 30 seconds on the paid plan.
Can I run both?
Yes. Nothing stops you from running a website on Workers and a memory-heavy background job on Lambda. Compare each piece on its own bill rather than picking one platform for everything.

Found this useful? Share it

Share

Founder · Cloud & Infrastructure

0xLax

I'm Laxman. I started Aliteq in Kathmandu in 2019 as a PC hardware shop — building, repairing and selling machines — and ran it until 2024. These days Aliteq is a US-based company, I build AI apps, and aliteq.com is where I work out, in public, what things actually cost: servers, clouds, GPUs, and the software a small company ends up paying for. I write the infrastructure pieces myself because I've had the screwdriver in my hand.

Work out the hardware

The Aliteq brief

The tech worth knowing — hardware, AI, gaming, deals. No spam, unsubscribe anytime.

Keep reading