Introduction#
One of the most common architectural questions in AWS is deceptively simple:
Should this run on Lambda, Fargate, or EC2?
AWS marketing often suggests that newer services automatically replace older ones. In reality, each compute option solves different problems, with very different operational trade-offs.
This article compares AWS Lambda, Fargate, and EC2 from a production engineer’s perspective — not from a slide deck.
Mental Model: What Each Compute Type Really Is#
Before comparing details, it helps to frame them correctly.
AWS Lambda#
- Event-driven, ephemeral compute
- No control over the underlying system
- Optimized for short-lived, stateless workloads
AWS Fargate#
- Managed container runtime
- You control the container, AWS controls the host
- Best for long-running services without host management
Amazon EC2#
- Full virtual machines
- Maximum control and responsibility
- Best for predictable, stateful, or specialized workloads
None of these is “better” by default — they are tools with different costs.
Operational Responsibility Comparison#
| Area | Lambda | Fargate | EC2 |
|---|---|---|---|
| OS Management | None | None | Full |
| Patching | AWS | AWS | You |
| Scaling | Automatic | Automatic | Manual / ASG |
| Debugging | Logs & traces only | Containers | Full system access |
| Startup Control | None | Limited | Full |
The more control you need, the further right you go.
Performance Characteristics#
Cold Starts#
- Lambda: Cold starts are real and unavoidable
- Fargate: Slower startup than EC2, but predictable
- EC2: Always warm once running
For latency-sensitive APIs, this often matters more than raw performance.
CPU and Memory Behavior#
- Lambda ties CPU and network throughput to memory
- Fargate offers explicit CPU/memory sizing
- EC2 gives full flexibility, including specialized instance types
If you need consistent performance, EC2 or Fargate is often simpler.
Cost Model: Where People Get It Wrong#
Lambda Costs#
Lambda is cheap when:
- Execution time is short
- Invocations are bursty
- Idle time is high
Lambda becomes expensive when:
- Functions run frequently
- Execution time is long
- Traffic is steady
Fargate Costs#
Fargate shines when:
- Services run continuously
- Load is moderate but constant
- You want container isolation without host management
You pay while the container is running, not per request.
EC2 Costs#
EC2 is often cheapest when:
- Workloads are steady
- Instances are well-utilized
- Reserved Instances or Savings Plans are used
But cost savings come with operational overhead.
Debugging and Troubleshooting Reality#
Lambda#
- Logs and metrics only
- No shell access
- Limited post-mortem options
Fargate#
- Container logs
- Easier reproduction locally
- Still no host access
EC2#
- SSH access
- Full system inspection
- Traditional debugging workflows
When things go wrong at 3 a.m., this difference matters.
Security and Isolation#
- Lambda provides strong isolation by default
- Fargate isolates at the container level
- EC2 security depends heavily on your setup
Lambda reduces attack surface — but also reduces visibility.
Typical Use Cases (That Actually Work)#
Choose Lambda When#
- Event-driven processing
- Spiky or unpredictable traffic
- Simple APIs or background jobs
- Minimal operational tolerance
Choose Fargate When#
- Long-running services
- Containerized workloads
- You want fewer ops tasks than EC2
- Moderate, predictable traffic
Choose EC2 When#
- Stateful systems
- Custom networking or storage
- Specialized hardware requirements
- Deep debugging is required
Common Anti-Patterns#
“Lambda for Everything”#
Leads to:
- Unexpected costs
- Complex retry behavior
- Painful debugging
“EC2 by Default”#
Leads to:
- Unnecessary ops burden
- Overengineering
Good architectures mix compute types intentionally.
A Simple Decision Framework#
Ask these questions:
- Is the workload event-driven and short-lived? → Lambda
- Is it a long-running containerized service? → Fargate
- Do I need full control or predictability? → EC2
If you’re unsure, prototype — and measure.
Final Thoughts#
AWS offers multiple compute models because no single one fits all workloads. Strong cloud architectures are not about chasing the newest service, but about choosing the right level of abstraction.
Understanding the trade-offs between Lambda, Fargate, and EC2 is a core skill for modern cloud engineers.
Need Help Choosing or Operating AWS Compute?#
If you need support designing, migrating, or operating AWS workloads on Lambda, Fargate, or EC2,
visit https://techz.at — we help teams choose the right abstraction and run it reliably in production.
