Containers · EKS · ECS

EKS vs ECS: which AWS container platform fits your team?

EKS vs ECS: which AWS container platform fits your team?

Amazon ECS (Elastic Container Service) and Amazon EKS (Elastic Kubernetes Service) both run containers on AWS. EKS gives you Kubernetes power and portability; ECS gives you lower operational overhead. After sixteen years and a lot of both, I think the right pick is mostly about your team, not your workload.

The short answer

Choose Amazon EKS if you want Kubernetes-native tooling such as Helm, ArgoCD and operators, if you need portability off AWS, or if your team already has Kubernetes skills. Choose ECS with Fargate if you want the shortest path to running containers reliably on AWS with the smallest possible cluster-operations burden.

If you are choosing under time pressure and cannot decide, pick ECS. The cost of starting simple and migrating later is real but bounded. The cost of running a Kubernetes cluster nobody on the team can debug at 2am is not.

What you are actually choosing between

The comparison is usually framed as a feature contest. It is not. Both platforms run OCI containers, both integrate with ALB, IAM, CloudWatch and VPC networking, and both support Fargate so you never have to touch an instance. On raw capability they overlap enormously.

What genuinely differs is how much control you are handed, and how much of that control you are then obliged to exercise. EKS hands you the full Kubernetes API and everything the CNCF ecosystem has built on top of it. That is real power, and every piece of it is something you now own, patch and evidence to an auditor. ECS hands you a smaller surface with fewer decisions, most of which AWS has already made for you.

Neither is the mature choice. Picking the one that matches your team’s capacity is the mature choice.

Side by side

DimensionEKSECS
EcosystemFull Kubernetes plus CNCF toolingAWS-native, deliberately smaller
PortabilityRuns anywhere Kubernetes runsAWS only
Ops overheadHigher: upgrades, add-ons, CRDsLower, especially on Fargate
Learning curveSteep, and ongoingGentle, mostly one-time
Control plane costHourly fee per clusterNone
IAM modelIRSA via OIDC providerTask role, one field
Load balancingAWS Load Balancer ControllerNative ALB integration
Service discoveryCoreDNSCloud Map
AutoscalingHPA plus Karpenter or Cluster AutoscalerApplication Auto Scaling target tracking
Policy controlsNetworkPolicy, PSS, Kyverno or OPASecurity groups, IAM, fewer knobs

The cost difference is smaller than the bill suggests

The line item everyone quotes is the EKS control-plane fee: $0.10 per hour per cluster at the time of writing, about $73 a month, where ECS charges nothing. Check current pricing before you budget, but the shape holds. Compute is priced identically on both, so for a large fleet that fee rounds to noise.

The cost that actually shows up is not on the invoice. It is the engineer-days spent on cluster upgrades, add-on version matrices, CNI tuning and the Kubernetes-specific incidents that ECS never generates. For a three-service application, that is comfortably the largest number in the comparison, and it recurs every year. If you want the invoice side handled properly too, that is what AWS cost optimisation work is for.

The operational tax nobody budgets for

Kubernetes ships roughly three minor releases a year. AWS supports each version for about fourteen months, after which the cluster moves to extended support at a materially higher hourly rate. So an EKS cluster commits you to an upgrade cadence whether or not it is on your roadmap.

An upgrade is rarely just the control plane. It is the node groups, the VPC CNI, CoreDNS and kube-proxy add-ons, the Load Balancer Controller, any operators you installed, and every manifest referencing an API version that graduated or got removed. Teams that skip a cycle discover the next one is dramatically harder.

ECS has no equivalent. Task definitions from three years ago still run. That single property is why I steer small teams towards it more often than the internet does.

Networking is where EKS surprises people

The default VPC CNI gives every pod a real VPC IP address. That is excellent for security-group granularity and for anything needing genuine network identity. It also means pod density is capped by ENI and IP limits per instance type, and that a busy cluster can exhaust subnet address space in a way that looks nothing like a networking problem when it starts failing. Prefix delegation raises the ceiling; it does not remove the need to size subnets deliberately up front.

ECS in awsvpc mode has a related constraint, one ENI per task, but the blast radius is smaller and Fargate removes it entirely. If you take one thing from this section: plan your CIDR ranges before the first cluster, not after. Retrofitting is painful, which is why it belongs in a landing zone rather than in a sprint.

IAM: one field versus a small subsystem

On ECS, granting a container an IAM role is one field in the task definition. On EKS the equivalent is IRSA: an OIDC identity provider for the cluster, a trust policy scoped to a namespace and service account, and an annotation on that service account. It is a better model, genuinely least-privilege and auditable per workload. It is also three places to get wrong instead of one.

The failure mode I see most often is teams skipping IRSA entirely and attaching broad permissions to the node role, which quietly grants every pod on that node the same access. That is the finding an auditor will catch, and it is avoidable in an afternoon.

If SOC 2 or ISO 27001 is on the roadmap

Both platforms can pass an audit. I have taken both through to zero-finding reports. The difference is how much you have to evidence.

ECS gives an auditor a smaller surface: fewer components, fewer configurations, fewer opportunities to drift. EKS gives you stronger controls once configured, and each of them — NetworkPolicy, Pod Security Standards, admission policy, image provenance — becomes something you must demonstrate is working, and keep demonstrating at every subsequent audit. Stronger controls are only better if you can sustain the evidence. If you want the mapping from these platform choices to actual control language, I wrote up AWS compliance controls mapping and how to pass SOC 2 Type 2.

Where teams get it wrong

  • Choosing EKS for a three-service application that ECS on Fargate would run with a fraction of the operational burden.
  • Choosing ECS and then hitting a wall when they need operators, a service mesh, or genuine portability.
  • Running EKS with a public API endpoint and long-lived access keys instead of private networking and IRSA.
  • Sizing subnets for the pilot rather than for pod density at production scale.
  • Adopting Kubernetes for CV reasons and discovering nobody wants to own the upgrade cadence.

A decision framework that actually works

Answer these honestly. Each yes pushes you towards EKS.

  • Does someone on the team already run Kubernetes in production, and will they still be here next year?
  • Do you need a specific operator, CRD or service mesh that has no ECS equivalent?
  • Does a contract, DR plan or customer requirement demand you can run off AWS?
  • Are you running enough services that per-cluster overhead genuinely amortises?
  • Do you have the appetite to own an upgrade every year, indefinitely?

Fewer than three yeses and ECS on Fargate is very likely the better engineering decision, whatever the conference talks suggest.

My take after sixteen years

If you have Kubernetes skills or need its ecosystem, EKS — hardened with private subnets, IRSA and GitOps — is the durable choice, and I would build it that way every time. If you just need containers to run reliably with a small team, ECS on Fargate is faster to operate and cheaper to babysit.

I have shipped both to zero-finding audits. The deciding factor has never once been the application. It has always been how many people are available to own the platform on a bad week. Related reading if you are assembling the rest of the stack: ArgoCD vs Flux for GitOps, and Terraform vs CloudFormation for provisioning it.

Common questions

Is EKS more expensive than ECS?

For the same workload, usually yes, but less than people assume. EKS charges an hourly fee per cluster that ECS does not; at the time of writing that is $0.10/hour, roughly $73/month per cluster on standard support. Compute costs the same on both. The larger difference is engineering time: upgrades, add-on compatibility and cluster tuning are recurring EKS work that ECS simply does not generate.

Can I move from ECS to EKS later?

Yes, but treat it as a migration rather than a switch. Task definitions become Deployments and Services, ECS task IAM roles become IRSA, service discovery moves from Cloud Map to CoreDNS, and load balancing moves from native ALB integration to the AWS Load Balancer Controller. The container images are the only part that carries over unchanged. Plan weeks, not days.

Is ECS being deprecated?

No. AWS continues to ship ECS features and it remains a first-class option. The persistent rumour comes from Kubernetes dominating conference talks, not from anything AWS has said or done.

Can I run everything on Fargate and skip nodes entirely?

On ECS, usually yes. On EKS you can run most workloads on Fargate, but DaemonSets are not supported, some observability and networking agents expect real nodes, and per-pod cold starts are slower. Many EKS teams end up with a hybrid: Fargate for bursty or isolated workloads, managed node groups or Karpenter for the rest.

Which is easier to make SOC 2 or ISO 27001 ready?

ECS, if your team is small. It has fewer moving parts to evidence and fewer ways to misconfigure. EKS gives you stronger controls once configured, such as NetworkPolicy, Pod Security Standards and admission policy through Kyverno or OPA, but every one of those is a control an auditor will ask you to demonstrate and keep demonstrating.

How often will I have to upgrade EKS?

Plan for it at least annually. Kubernetes ships roughly three minor releases a year and AWS supports each version for about fourteen months before it moves to extended support at a significantly higher hourly rate. An upgrade is not just the control plane: it is nodes, add-ons, CRDs and anything pinned to a deprecated API version.

Does EKS give better multi-region or disaster recovery options?

It gives you more portable ones. Kubernetes manifests deploy to any conformant cluster, including another cloud or on-prem, which matters if your DR requirement or a customer contract demands provider independence. If your DR plan is another AWS region, ECS handles that perfectly well with far less machinery.

Standing up or hardening EKS?

Private-subnet EKS, IRSA, autoscaling and GitOps — production-ready, and built to survive an audit.

Kubernetes / EKS consulting →Book a free call

Also relevant: Terraform + EKS + CI/CD · AWS DevOps consulting