Serverless pricing looks cheap on paper and surprises teams at scale. Understanding the billing model before you commit prevents architecture regrets.
AWS Lambda charges on three dimensions: requests ($0.20 per million), compute ($0.0000166667 per GB-second), and data transfer (first 1GB free, then $0.09/GB out to internet). A function that runs 1M times/month at 200ms average duration with 512MB memory costs: $0.20 (requests) + $0.0000166667 × 0.2 × 0.5 × 1,000,000 = $1.67 (compute) = ~$1.87/month. That's genuinely cheap. Add a 5TB daily data pipeline and the math changes.
Cloudflare Workers charges $5/month for 10M requests (Workers Paid), then $0.30 per additional million. CPU time is capped at 30ms per request on free, 50ms on paid. Workers have no cold starts (V8 isolates vs containers), making them ideal for latency-sensitive edge logic. Cost advantage over Lambda at high volumes: Workers at 100M requests = $32; Lambda at 100M requests (100ms, 512MB) = ~$103.
Vercel charges per function invocation for non-Edge functions. Edge Functions run on Cloudflare's network and are billed like Workers. The Vercel overhead is convenience: automatic deploys, preview URLs, and Next.js integration. At high scale, the markup over raw Cloudflare becomes significant.
The crossover point where containers beat serverless: sustained workloads above ~70% CPU utilization. A 1 vCPU container at $20/month handling 2M requests is cheaper than Lambda for any function running >300ms average. Serverless wins for bursty, unpredictable, low-average workloads.