ECS vs EKS: Which AWS Container Service?
ECS vs EKS isn't really a price fight. By the time you run 10+ environments, the control-plane fee is rounding error. The real gap is operational: who patches the nodes, how fast a new container starts, and whether you can stop dev to $0 at night.
Short answer: choose ECS if you want containers without owning Kubernetes; choose EKS if the Kubernetes ecosystem is worth running a platform team for. Below — the full comparison with verified pricing, real operational math, and a framework to decide.
- ✓AWS-only shop
- ✓No dedicated platform team
- ✓Cost-sensitive — Fargate eliminates node management
- ✓Want per-environment isolation (ECS clusters are free)
- ✓SOC2/HIPAA — simpler audit surface
- ✓Want to stop dev envs to $0 (Fargate leaves no nodes)
- ✓Multi-cloud strategy (EKS Anywhere)
- ✓Need K8s operators (Istio, ArgoCD, cert-manager)
- ✓Team already knows Kubernetes
- ✓100+ services with complex scheduling
- ✓GPU orchestration with K8s-native tooling
Table of contents
How clusters differ
ECS clusters are free — teams create one per environment because there's no cost to doing so. EKS clusters cost $73/mo each, so teams consolidate multiple environments into shared clusters with namespace isolation.
ECS clusters are free and lightweight — teams create one per environment because there's no cost to doing so. EKS clusters cost $73/mo each, so teams consolidate multiple environments into shared clusters with namespace isolation.
Pricing — the control plane tax
ECS charges $0 for the control plane at any scale. EKS charges $0.10/hr per cluster — $73/month. You can't pause an EKS cluster — either pay or delete it. The fee is small at scale but reveals a structural difference.
“EKS charges $0.10 per hour per cluster — $73 per month. That's the base fee before a single container runs. ECS charges $0 for the control plane regardless of scale.”
— aws.amazon.com/eks/pricing + aws.amazon.com/ecs, verified June 2026
At $73/mo, the EKS control plane fee isn't the deciding number — it's a rounding error at fleet scale. But it reveals a structural difference: you can't pause an EKS cluster — either pay or delete it. ECS reaches true $0 when environments are stopped. That pattern repeats across every dimension below.
ECS: control plane costs $0 — at any scale. Clusters are lightweight logical groupings, not billed resources. Create one per environment (prod, staging, dev1, dev2, qa, demo...) — hard isolation, no cost.
EKS:$0.10/hour ($73/month) per cluster. Teams consolidate environments into shared clusters with namespace isolation. Typical: 1 cluster per active prod region + 1 shared non-prod cluster (dev, staging, QA in namespaces). Extra clusters for compliance (SOC2/HIPAA) or client-specific isolation. You can't pause a cluster — you either pay or delete it.
Key difference:With ECS Fargate, you stop services and pay $0 — no lingering resources. With EKS, you can't pause a cluster. You either keep paying the $73/mo control plane (even with zero workloads) or you delete the cluster and recreate it later — a multi-hour operation.
Source: aws.amazon.com/eks/pricing (verified June 2026).
Off-hours scheduling — stopping dev at night
ECS Fargate: EventBridge → $0 instantly. EKS: K8s CronJob + Karpenter, minimum 1-2 nodes remain for kube-system. Residual cost: $73 control plane + $70-140 for kube-system nodes even when all workloads are stopped.
Dev environments don't need to run 24/7. With ECS Fargate, stopping an environment is one API call and costs $0 when stopped. With EKS on EC2, you can't fully stop a cluster — the control plane and kube-system nodes keep billing even when all workloads are scaled to zero.
Operational load comparison
What your team actually manages day-to-day. Estimated ops FTE based on the operational surface of each service.
Engineering time — hours that actually go into each
The monthly bill is one thing. The engineering time to keep things running is another — and it compounds every month.
- —Terraform module maintenance (1-2 hrs)
- —Monitoring alerts + CloudWatch dashboards (1 hr)
- —IAM role updates per new service (30 min)
- —That's it. No control plane, no nodes, no addons.
- —K8s version upgrades every 14 months (4-8 hrs each, amortised: 1-2 hrs/mo)
- —Node patching + AMI rotation — monthly (2-4 hrs)
- —Addon updates: CoreDNS, kube-proxy, VPC CNI, CSI (1-2 hrs/mo)
- —RBAC configuration: namespaces, service accounts, IRSA (2-4 hrs/mo)
- —Helm chart maintenance + operator upgrades (2-4 hrs/mo)
- —Karpenter/CA config + scaling policy tuning (1-2 hrs/mo)
- —Debugging: pod scheduling failures, node drain issues, CrashLoopBackOff (4-16 hrs/mo — spikes with incidents)
Bin-packing — the hidden EC2 tax
EC2 instances come in fixed sizes. Containers never fill them perfectly — 15-30% of capacity is typically idle. Fargate bills per vCPU/GB-second — zero idle. Datadog: 65%+ containers use under half of requested resources.
“Over 65% of containers use less than half of their requested CPU and memory. Instance-level waste compounds on EC2 — fixed sizes never match containers perfectly. Fargate bills per vCPU/GB-second: zero idle.”
— Datadog Container Report 2023, 2.4 billion containers analysed
When you run containers on EC2 instances, you pay for the whole instance regardless of utilisation. Datadog's Container Report 2023 (2.4 billion containers analysed): over 65% of containers use less than half of their requested CPU and memory. Below: the same 7 services on EC2 vs Fargate — exactly why instance sizing matters.
Spot pricing comparison
Both services support Spot for fault-tolerant workloads. Fargate Spot is typically ~70% off, flat — not hourly-bid. EC2 Spot varies by instance type and availability zone.
- —$0.01214/vCPU-hr — ~70% off, flat — not hourly-bid
- —Interruption not published. Gradual price adjustment — no hourly bidding
- —Flip to Spot and forget. No diversification, no mixing strategies needed
- —$0.067–0.166/hr (us-east-1, 7-day scan, Jun 2026). Varies hourly
- —Interruption <5% historically — but some types/AZs hit >20%. Source →
- —Requires diversification: 3+ instance types + 2+ AZs. Common mix: 80% Spot + 20% On-Demand
Sources:
- EC2 Spot prices from AWS CLI
describe-spot-price-history(us-east-1, 7 days ending June 9, 2026) - Cross-verified with instances.vantage.sh
- Interruption rates from AWS Spot Instance Advisor
Scale-up latency — how fast do new containers start?
Fargate: 30-90s from AWS capacity pool. EKS+Karpenter: 60-150s (node under 60s + pod schedule). EKS+Cluster Autoscaler: 3-5 min (ASG launch + boot + join). With Fargate you never wait for nodes.
With Fargate, new tasks start against the AWS capacity pool — no node provisioning delay. With EKS on EC2, a traffic spike might mean waiting 1-5 minutes for a new node before your pod starts, unless you overprovision ($$$).
Real cost comparison
Three scenarios with Fargate On-Demand pricing as baseline. EKS costs more at every scale due to control plane + kube-system overhead + bin-packing waste. At 1 env: 32% more. At 20 envs: 5% more — compute dominates but ops overhead doesn't shrink.
Three scenarios using Fargate On-Demand pricing ($0.04048/vCPU-hr + $0.00444/GB-hr) as a fair baseline for both. Assumptions: 0.5 vCPU + 1 GB per service (typical web workload), 730 hrs/mo. EKS overhead: $0.10/hr control plane + est. ~15–30% bin-packing waste (midpoint 25%) from EC2 fixed instance sizes (includes kube-system DaemonSet overhead per node — kube-proxy, VPC CNI — and instance sizing slack).
ECS = Fargate compute only — pay per vCPU/GB-second, zero overhead. EKS = same compute + $73/mo per cluster control plane + ~15–30% EC2 sizing waste (midpoint 25%; fixed instances don't fit containers perfectly). Full methodology ↓
On pure compute this is often a wash — sometimes EKS even wins, as the numbers can show. That's exactly the point: the decision isn't the monthly compute figure. It's the operational surface and fleet management sitting on top of it. ↓ Operational load comparison
Cost calculator
interactive1 shared EKS cluster for all environments — the most consolidated edge case. Play with instance sizes to see how overhead changes. EKS total = EC2 instances + $73/mo control plane.
Full comparison — 20 dimensions
Every dimension from control plane cost and node management through Spot pricing, scale-up latency, off-hours scheduling, IAM integration, and observability — all with verified source tags.
Every dimension with its source tagged below the row label.
Already running 10+ ECS environments?
The ECS-vs-EKS decision is behind you. The open question is whether the fleet you already run is actually managed. At fleet scale, these are the gaps most teams discover:
- —Dev and staging environments running 24/7 when they're idle 70% of the week
- —No per-environment cost attribution — you see one total bill, not which env costs what
- —Scheduling done by hand — or not at all — instead of stopping to $0 off-hours
- —Environment sprawl — nobody's sure which of the 30 clusters are still needed
If any of that sounds familiar, the numbers below are worth 15 minutes →
- — You don't need the K8s ecosystem
- — Per-environment isolation at zero cost
- — You want to stop dev envs and pay $0
- — You don't have a dedicated platform team
- — Fargate eliminates node management entirely
- — You need the K8s ecosystem (operators, Helm, Istio)
- — Multi-cloud is a requirement (EKS Anywhere)
- — Your team already knows Kubernetes deeply
- — GPU orchestration with K8s-native tooling
- — You have platform engineers to manage the overhead
If you're already on ECS at scale, the real question isn't ECS vs EKS — it's whether your fleet is actually managed. Most teams at 10+ environments discover they're leaving money on the table: idle dev environments, invisible per-env costs, and scheduling that never got automated.
Fleet Audit — free, read-only, 15 minutes. Runs locally in your browser against your AWS account. No data leaves your machine. Shows every environment with real costs and scheduling savings.
Full methodology: formulas, data sources, and how every number was verified
- Datadog Container Report 2023 — 2.4B containers analysed, 65%+ overprovisioned
- Vantage instance comparison — Spot price cross-reference
- EC2 Spot prices: AWS CLI
describe-spot-price-history— us-east-1, 7-day window ending June 9, 2026 (c5.xlarge, c5.2xlarge, m5.xlarge, m5.2xlarge) - ALB sharing: verified via AWS CLI on live production ECS deployment — 1 Application Load Balancer serving 3 clusters (dev, staging, prod) via 3 target groups
- Kube-system overhead: calculated from AWS EKS addon default specs (CoreDNS, kube-proxy, VPC CNI, CSI driver)
- Bin-packing waste: Datadog's 65% overprovisioning finding applies at the container level (both ECS and EKS). The ~15–30% instance-level waste (midpoint 25%) is a separate estimate for EC2-specific slack: fixed instance sizes vs variable container shapes + kube-system DaemonSet overhead per node. Eliminated entirely on Fargate.
- Cost scenarios: compute calculated with Fargate On-Demand rates for fair comparison. EC2 waste factor converts instance cost to Fargate-equivalent
- Ops FTE estimates are directional — actual depends on team expertise, automation level, and compliance requirements