Yashveer Singh
Connect
<- All posts
DevOps, Deployment, Infrastructure13 min read

AWS ECS vs EKS vs Fargate: A SaaS Founder Comparison

ECS is AWS's native container orchestrator, simpler than Kubernetes and cheaper to operate. EKS is managed Kubernetes, more portable but operationally heavier. Fargate is the serverless compute layer that runs containers without nodes for either ECS or EKS. Most SaaS startups land on ECS with Fargate, scale into ECS with EC2 for cost, and only adopt EKS when Kubernetes portability becomes a hard requirement.

Written by Yashveer Singh, founder of Yashveer Labs.

What you actually need to know

  • ECS with Fargate is the right default for most SaaS startups on AWS.
  • EKS makes sense when Kubernetes portability is a hard requirement.
  • Fargate removes node management. EC2 backed nodes win on cost at scale.
  • The migration from ECS to EKS is real but not catastrophic.
  • Start simple. The platform team you do not have is paying the operational tax.
OptionSetup timeMonthly cost at small scaleOperational taxBest fit
ECS with FargateOne day50 to 300 USDLowMost SaaS startups
ECS with EC2Two to three days100 to 800 USDMediumCost optimized at scale
EKS with FargateThree to five days150 to 500 USDMediumTeams committed to Kubernetes
EKS with EC2One to two weeks250 to 1500 USDHighMature platforms
App Runner or LightsailHalf a day50 to 200 USDLowestMVPs and single services

The core argument

I have run ECS, EKS, and Fargate in production for client work. The mental model that keeps me out of trouble is to pick the option that matches the team I am running it for. A team of two engineers should not be running EKS. A team of fifteen engineers with a platform engineer should not be running raw EC2 instances by hand.

ECS is AWS's own container orchestrator. It is simpler than Kubernetes, integrates cleanly with the rest of AWS, and works well for teams that do not need the Kubernetes ecosystem. The downside is portability. ECS is AWS specific. If you ever want to move your workload elsewhere, the task definitions do not translate cleanly.

EKS is managed Kubernetes. The control plane is operated by AWS, the worker nodes are operated by you, and the application contract is the standard Kubernetes API. The win is portability and ecosystem. The cost is operational complexity. A team running EKS without a dedicated platform engineer pays the tax in time and incidents.

Fargate is the serverless compute layer. It runs containers without nodes. You pay per task per second. The win is no node management. The cost is roughly two to three times the EC2 backed equivalent at steady state. The break even depends on workload shape.

The right call for most SaaS startups is ECS with Fargate. Cheap to start, simple to operate, no node management. Move to ECS with EC2 once you have steady state workload at scale. Adopt EKS when portability becomes a real requirement, not a hypothetical one.

The honest cost math

Take a SaaS at modest scale. Two backend services, one frontend, one background worker, a database, a Redis. The compute is roughly four containers running continuously.

On ECS with Fargate, the compute bill is roughly 150 to 250 USD per month. On ECS with EC2 reserved instances, the same workload is roughly 80 to 120 USD per month. On EKS with Fargate, add 72 USD for the control plane plus the same Fargate compute. On EKS with EC2, add the control plane plus your worker node minimums.

At ten times the scale, the absolute numbers grow linearly but the percentage difference is the same. The control plane fee becomes negligible at scale. The compute cost is what dominates.

Features to demand from any setup

  • Zero downtime deployment as a first class concern.
  • Centralized logging to CloudWatch or a third party.
  • Centralized metrics with alarms on real SLOs.
  • Secret management through Parameter Store or Secrets Manager.
  • Network isolation through VPC, security groups, and load balancers.
  • Auto scaling on real signal, not just CPU.
  • A runbook for the on call engineer.

Expert opinion

The instinct to pick Kubernetes early is almost always wrong. The Kubernetes ecosystem is large, mature, and powerful. It is also a full time job to operate well. A startup with two engineers running EKS is a startup with one and a half engineers building product. Pick the simpler option until you have a real reason to upgrade.

>

Yashveer Singh, founder of Yashveer Labs

How this played out on a real project

A client SaaS was running on EKS because the founding engineer had Kubernetes experience from a previous job. The cluster was two months old. The team had spent roughly thirty percent of their engineering time on cluster work. Two outages had been caused by misconfigured node groups.

We ran the math on migrating to ECS with Fargate. The compute cost would rise by roughly twenty five percent. The operational tax would drop from thirty percent of engineering time to under five percent. The team agreed.

The migration took three weeks. The new platform has run for fourteen months with zero infrastructure incidents. The product velocity nearly doubled. The cost difference is real but small compared to the engineering time recovered.

For more on the broader infrastructure decisions, see Kubernetes for startups when it makes sense when it does not and serverless vs containers vs bare metal a cost and flexibility map.

Common mistakes teams make

  1. Picking EKS for a two engineer team. The operational tax kills velocity.
  2. Running EC2 backed Fargate without understanding the cost crossover.
  3. No auto scaling. The cluster either over provisions or fails under load.
  4. No centralized logging. Debugging a production incident becomes a fishing expedition.
  5. Mixing development and production in the same cluster. The blast radius is too large.
  6. No runbook. The on call engineer wakes up and stares at the console.
  7. Skipping load balancer health checks. The traffic hits unhealthy tasks.

A two week setup plan for ECS with Fargate

  1. Days one to two. Create the VPC, subnets, security groups, and the ECS cluster.
  2. Days three to four. Define the task definitions. One per service. Wire them to the load balancer.
  3. Days five to six. Set up CloudWatch logs, metrics, and alarms. Define the on call rotation.
  4. Days seven to eight. Add auto scaling. Test under synthetic load.
  5. Days nine to ten. Wire the deployment pipeline. Zero downtime as the default.
  6. Days eleven to twelve. Write the runbook. Walk it with the team.
  7. Days thirteen to fourteen. Shadow the existing system. Cut over. Decommission the old.

For more on the operational side, read CI CD pipelines that engineers trust a pattern library and blue green deployments vs canary vs rolling a decision tree. On the cost side, how to read AWS Azure and GCP invoices without crying is the natural next read.

FAQ

Frequently asked

Author

The person behind Yashveer Labs

Yashveer Singh, founder of Yashveer Labs. I build full stack systems for clients who care that the thing actually works two years later, not just on launch day. The arc I am on points at machine learning, AI engineering, and cybersecurity. Everything I write here comes from the codebase, not from a content brief. That is the difference and it shows.

Related reading