🎉 DevOps Interview Prep Bundle is live — 1000+ Q&A across 20 topicsGet it →
All Articles

AWS Lambda vs Containers vs Kubernetes — How to Choose (2026)

Should you run your workload on Lambda, ECS/containers, or Kubernetes? Here's the honest comparison with real-world guidance on when each makes sense.

DevOpsBoys4 min read
Share:Tweet

One of the most common architecture decisions: where do I run this? Lambda, containers on ECS/EKS, or Kubernetes? Here's the decision framework.


The Quick Answer

WorkloadUse
Event-driven, short tasks, variable trafficLambda
Long-running services, steady trafficContainers (ECS/EKS)
Complex microservices needing orchestrationKubernetes (EKS)
Mix of all threeUse all three — they're complementary

AWS Lambda

What It Is

Serverless compute — you deploy a function, AWS runs it when triggered. You pay per invocation and per 100ms of execution time. No servers to manage.

When Lambda Wins

Event-driven workloads:

  • S3 object created → process image → save thumbnail
  • API Gateway request → validate input → query DynamoDB → return response
  • SQS message arrives → process order → update database
  • CloudWatch event (cron) → nightly cleanup job

Variable/spiky traffic:

  • Traffic goes from 0 to 10,000 req/s? Lambda scales automatically. EKS takes 2–5 minutes to scale new nodes.

Micro-operations:

  • Functions that run for < 15 minutes (Lambda's max)
  • Simple, stateless processing

Cost at low scale:

  • Lambda Free Tier: 1 million invocations/month free, 400,000 GB-seconds free
  • A function that runs 1 million times at 200ms each: ~$2/month
  • An EKS cluster: ~$75/month (control plane) + EC2 nodes

Lambda Limitations

  • 15-minute max execution time — long-running jobs don't fit
  • 512MB–10GB memory — no GPU, limited compute
  • Cold starts — first invocation after idle takes 100ms–3s extra (language-dependent)
  • No persistent local state — each invocation is stateless
  • Vendor lock-in — AWS-specific triggers, IAM, packaging
  • Harder to test locally — SAM CLI helps but isn't perfect
  • Debugging complexity — distributed traces require X-Ray or OpenTelemetry

Lambda Cold Start Mitigation

python
# Keep Lambda warm with Provisioned Concurrency (cost money)
# Or initialize expensive connections outside the handler
 
import boto3
# Initialize ONCE at module load time (shared across invocations)
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('my-table')
 
def handler(event, context):
    # table is already initialized — no cold start overhead here
    return table.get_item(Key={'id': event['id']})

Containers (ECS / Docker on EC2)

What It Is

Your application packaged as a Docker image, running on EC2 instances (or Fargate for serverless containers). ECS is AWS's container orchestration service — simpler than Kubernetes.

When ECS/Containers Win

Long-running services:

  • Web APIs that need to be always available
  • Background workers that run indefinitely
  • WebSocket servers, streaming services

Steady, predictable traffic:

  • If you consistently need 5 containers running, ECS is more cost-effective than Lambda

Lift-and-shift:

  • Existing app in Docker → ECS with minimal changes

Fargate for simplicity:

  • ECS on Fargate = no EC2 nodes to manage, still containers
  • Slightly more expensive than EC2 nodes but much less operational work

ECS vs EKS

ECSEKS (Kubernetes)
Learning curveLowHigh
AWS-native features✅ Deep integrationGood
PortabilityLow (AWS-specific)✅ Kubernetes is portable
EcosystemLimited✅ Vast K8s ecosystem
Custom networkingLimited✅ Full CNI control
Advanced schedulingLimited✅ Node affinity, taints
ComplexitySimpleComplex

Use ECS if: You're AWS-only, team is small, you want simplicity. Use EKS if: You need Kubernetes features, multi-cloud portability, or your team already knows K8s.


Kubernetes (EKS)

When Kubernetes Wins

Complex microservice architectures:

  • 10+ services with interdependencies
  • Advanced traffic management (canary, blue-green)
  • Service mesh requirements (mTLS, circuit breaking)

Advanced scheduling needs:

  • GPU nodes for ML workloads
  • Spot instance + on-demand mix (Karpenter)
  • Topology spread constraints
  • Custom resource quotas per team/namespace

Multi-cloud or on-prem + cloud:

  • Kubernetes runs everywhere — same manifests work on EKS, GKE, AKS, on-prem

GitOps and platform engineering:

  • ArgoCD, Flux, Backstage — the best platform engineering tools are Kubernetes-native

The full DevOps toolchain:

  • Prometheus + Grafana, cert-manager, external-secrets, KEDA, Karpenter — all Kubernetes-native

Kubernetes Real Cost

Many teams underestimate Kubernetes operational costs:

CostMonthly
EKS control plane~$75
Minimum 3 nodes (t3.medium)~$100
Load balancer (ALB)~$20
EBS volumes for PVCsVariable
Total minimum~$200–250/month

For small apps, this is overkill. For 10+ services, it's highly efficient.


The "Use All Three" Pattern

Most mature AWS architectures use Lambda + Containers + Kubernetes together:

User Request
    ↓
CloudFront (CDN)
    ↓
API Gateway + Lambda  ← simple CRUD, auth, webhooks
    ↓
EKS Services          ← core business logic, stateful services
    ↓
Lambda                ← async jobs triggered by SQS/SNS
    ↓
DynamoDB / RDS / S3

Lambda handles the edges (webhooks, event processing, simple APIs). Kubernetes handles the core services. Each tool does what it's best at.


Decision Framework

Start with Lambda if:

  • Prototyping or early-stage
  • Clear event-driven use case
  • < 15 minute execution time
  • Variable or unpredictable traffic

Switch to containers when:

  • Lambda limits become a problem (execution time, memory, cold starts)
  • Services are always running (Lambda wastes money for constant traffic)
  • Your team needs Docker-first workflows

Add Kubernetes when:

  • Multiple services need coordinated deployment
  • You need advanced features (service mesh, custom scheduling, GitOps)
  • Platform engineering is a priority
  • Team has Kubernetes expertise or wants to develop it

Cost Comparison Example

For an API handling 10 million requests/month at average 100ms execution:

PlatformCost/month
Lambda (128MB)~$2
ECS Fargate (0.25 vCPU)~$15–25
EKS on t3.small~$80–100 (incl. control plane)

Lambda wins at low scale. At 100M requests/month, the math shifts toward containers.


The short answer: Lambda for events and spikes, containers for services, Kubernetes for platforms. Most production AWS architectures use all three.

🔧

Today I Fixed

Short real fixes from production — posted daily

Browse fixes
Newsletter

Stay ahead of the curve

Get the latest DevOps, Kubernetes, AWS, and AI/ML guides delivered straight to your inbox. No spam — just practical engineering content.

Related Articles

Comments