Lambda pricing is designed by sociopaths. They flash "$0.20 per million requests" knowing damn well you can't use Lambda without API Gateway, which costs 17.5x more. It's like selling you a Ferrari engine for $200 then charging $3,500 for the steering wheel.
Where AWS Actually Fucks You
Here's where your money disappears:
API Gateway: The AWS Tax Collector
HTTP requests? That'll be $3.50 per million on top of Lambda's $0.20. Not negotiable. Lambda literally can't speak HTTP without it.
Simple CRUD functions hit you with the gateway tax hard. Lambda execution might cost $200/month but API Gateway adds another $400+ on top. That's 70% of your bill just for HTTP routing that other platforms include.
Google Cloud Functions doesn't have this scam. Same functionality costs way less because they don't charge separately for HTTP endpoints.
Data Transfer: Nickel and Dimed to Death
$0.09/GB after your first free GB. Return a 2MB image? That's $0.00018. Do it 5.5 million times and boom, you owe AWS $1,000.
If you're moving lots of data, AWS bandwidth charges add up fast. Cloudflare Workers includes unlimited bandwidth, which is huge for data-heavy applications.
CloudWatch Logs: Pay to Debug Your Own Shit
Lambda pukes logs everywhere. AWS charges $0.50/GB to store them, plus $0.03/GB monthly storage. You can't turn this off.
Need to debug in production? Turn on detailed logging and watch AWS charge you for every GB. I spent $47 last month just to track down a fucking timeout bug that turned out to be a DNS issue in their own infrastructure.
Azure Functions includes decent monitoring for free. AWS makes you pay extra to debug your own applications.
The Alternatives That Actually Work
Google Cloud Functions: HTTP Without the Scam
Deploy a function, get an HTTP endpoint. No bullshit gateway service charging 17x markup. Save $3.50 per million immediately.
Google's gotcha: rounds execution up to 100ms blocks. Function runs 51ms? You pay for 100ms. Function runs 187ms? You pay for 200ms.
For quick functions this sucks. For slower ones it's barely noticeable. Even with the rounding penalty, you save massive amounts by avoiding API Gateway costs.
Cloudflare Workers: Pricing That Makes Sense
Cloudflare Workers Performance Advantage
Cloudflare Workers costs $5/month for 10 million requests. That's it. No bullshit multipliers, no surprise fees, no gateway tax. Need more requests? $0.50 per additional million.
Plus there are no cold starts. Functions start in under 5ms because they use V8 isolates instead of containers. It's genuinely faster than Lambda.
The downside is the 128MB memory limit. If your function loads heavy libraries (ML models, image processing, whatever), it probably won't fit. You'll need to rewrite functions to use smaller dependencies, but the cost savings can be worth it.
Azure Functions: Microsoft's Version That Doesn't Suck
Azure Functions has a consumption plan similar to Lambda, but without the API Gateway tax for HTTP functions. They also throw in Application Insights monitoring for free, which saves you from having to pay for CloudWatch.
The killer feature is Durable Functions - you can build complex workflows without needing AWS Step Functions. If you're paying Step Function execution fees, Durable Functions can save serious money.
Performance: Why Cold Starts Matter
Cold starts are where Lambda really shows its age. I've seen benchmarks confirm:
- Node.js Lambda: Usually 100-500ms, but can spike to 2-3 seconds under load
- Python Lambda: 500ms-1.5s for Python 3.8, 2-4s for Python 3.9+ (runtime overhead)
- Java Lambda: Consistently awful, 3-8 seconds cold starts (JVM startup penalty)
- Google Cloud Functions: Similar to Lambda, maybe slightly worse for Python
- Cloudflare Workers: Genuinely 1-5ms because they don't use containers
The Cloudflare difference is real. V8 isolates start almost instantly compared to container-based alternatives. Recent analysis shows these performance gaps are getting worse, not better.
The Lambda CPU Scam
Here's something AWS doesn't make obvious: Lambda CPU allocation is tied to memory allocation. Allocate 128MB and you get 0.125 vCPU. Allocate 3GB and you get 2 full vCPUs.
This means if you have CPU-intensive functions, you need to overprovision memory to get enough CPU. I've seen functions that use 200MB of RAM but need 3GB allocated just to get decent CPU performance. You pay for the full 3GB.
Google Cloud Functions fixes this with 2nd gen functions that let you allocate CPU and memory separately.
Migration Reality Check
Here's what migration actually looks like:
Small projects (under 50 functions) usually take 3-6 months. Google Cloud Functions or Cloudflare Workers work well if you can handle the constraints.
Medium projects (50-200 functions) take 6-12 months and serious engineering time. Azure Functions or Google Cloud Functions are easier migration targets.
Large projects (200+ functions) are brutal. Most companies do a hybrid approach - keep functions that use lots of AWS services, migrate simple HTTP APIs first. Plan for 12-24 months of work.
Hidden Operational Costs
Lambda's ecosystem lock-in goes beyond pricing. You end up needing third-party monitoring tools because CloudWatch is garbage for debugging. That's another $200-500/month for Datadog or New Relic.
Azure Functions includes Application Insights, which is actually decent. Cloudflare Workers has a solid real-time dashboard built in. You don't need external monitoring for basic shit.
The real TCO includes all the operational overhead AWS creates by making everything more complex than it needs to be. Performance optimization tools exist but you shouldn't need them for basic serverless functions.