The Best AWS Fargate Alternatives in 2026
Fargate solved a real problem: run a container without managing the EC2 instances underneath it. That's genuinely valuable, and inside a well-established AWS estate it's often exactly right. But two complaints show up over and over, and they're worth separating because they lead to different answers.
The first is the bill. Fargate charges for provisioned vCPU and memory by the second from task start to task stop, regardless of whether anything is being served. An always-on service that sees traffic during business hours pays for the nights and weekends too, and a staging environment nobody has touched in a fortnight costs the same as production at the same size.
The second is the surface area. Getting one container serving HTTP requires a task definition, a service, a cluster, a target group, an Application Load Balancer, a security group, a log group, and two IAM roles. That's a fair amount of Terraform for something other platforms express in three fields.
First: when you should stay on Fargate
It's worth being honest about this before the list, because leaving AWS for the wrong reason is expensive in ways that don't show up on the invoice.
- Your service needs to sit inside a VPC with private subnets, security groups, and a database that isn't reachable from the internet. Recreating that story elsewhere is real work.
- You depend on IAM task roles for access to S3, SQS, DynamoDB, or Secrets Manager. Credential-free access to AWS services is a genuine feature, and replacing it means managing long-lived keys somewhere.
- You're bound by an Enterprise Discount Program or committed spend. The list price comparison stops being the relevant comparison.
- Your compliance story is written against AWS controls and re-certifying is a project.
If several of those apply, the productive move is usually to fix the specific complaint inside AWS — Fargate Spot for interruption-tolerant work, Graviton for a better price per unit of compute, App Runner instead of hand-rolled ECS, or scheduled scaling to zero tasks outside business hours — rather than to migrate.
The alternatives
Google Cloud Run
The closest like-for-like, and the one most Fargate refugees end up on. Same idea — hand it a container, get a URL — with dramatically less surrounding configuration and, critically, request-based scaling that includes scaling to zero.
Shines when: your workload is request-driven and spiky. You get concurrency-based scaling, a URL without provisioning a load balancer, and idle instances that genuinely stop costing.
Caveat: it's another hyperscaler, so you're trading AWS's IAM and VPC story for Google's. If your data is in RDS, the egress and latency of talking to it from Cloud Run is a real cost.
AWS App Runner
The alternative inside AWS. It's Fargate with the ceremony removed — point it at an image or a repo, get a service with a URL, autoscaling, and TLS, without writing a task definition or standing up a load balancer.
Shines when: your complaint was the surface area rather than the bill, and you want to keep IAM and VPC connectivity.
Caveat: it doesn't scale to zero in the way Cloud Run does — provisioned instances are billed at a reduced rate rather than nothing, so the idle-cost complaint is softened rather than solved.
Fly.io
Runs your container as Firecracker microVMs in regions you choose, with a network model built for running the same app in several places at once. Machines can stop when idle and start on a request.
Shines when: latency to users matters and you'd otherwise be building a multi-region story on top of AWS yourself.
Caveat: you're closer to the infrastructure than on Cloud Run or Render. That's the trade you're making, and for some teams it's the wrong direction from Fargate.
PandaStack
Ours: apps run as Firecracker microVMs, deployed from a git repo rather than from an image you have to build and push. Each app gets its own kernel under KVM — the isolation boundary is the same class as Fargate's, not a shared-kernel container.
The specific answer to the idle-cost complaint is that a sleeping app releases CPU, RAM, and disk entirely rather than being billed at a reduced rate. After the idle window — 15 minutes by default, tunable down to 60 seconds — there is nothing running. The next real request restores the app from its deploy-time snapshot and answers it. Rates are $0.054 per active vCPU-hour and $0.0162 per working-set GiB-hour — one card for sandboxes, apps and databases alike. You pay for the CPU your service actually burns and the memory it actually keeps resident, so a staging environment nobody visited this week costs roughly its storage.
There's no image to build. A push to your branch triggers a build inside the microVM, a health check, and a blue-green traffic flip — no registry, no task definition revision, no service update.
Caveat: no VPC peering into your AWS account and no IAM task roles. If your service's whole job is talking to private AWS resources, this isn't the right move — and scale-to-zero means the first request after a sleep pays a wake, which some services can't accept.
Render
A managed platform where a web service is a first-class concept and the infrastructure is invisible. Push a repo or an image, get a service with TLS and a URL, with managed Postgres and Redis next door.
Shines when: you want the Fargate outcome with none of the Fargate assembly, and you're happy on someone else's platform.
Caveat: less control than raw ECS by design. If you need a specific networking topology, you'll hit the edges.
Northflank
A more complete platform than most of this list — services, jobs, pipelines, and managed databases — with the option to run it on your own cloud account.
Shines when: you want a platform experience but the workloads must run in your own AWS or GCP account, for compliance or committed-spend reasons.
Caveat: more product to learn than a single-purpose host, and the bring-your-own-cloud mode means you still own some of the underlying infrastructure.
Kubernetes, on EKS or elsewhere
The honest option for teams who have outgrown a single service and have someone whose job is platform. You get scheduling, autoscaling, and a deployment model that generalises to fifty services rather than one.
Caveat: it is a full-time responsibility, and adopting it to escape a task definition is a trade that will not go the way you hope. Move here because you have many services and a platform team, not because ECS annoyed you.
The cost comparison people get wrong
Comparing per-vCPU-hour rates across these platforms is close to meaningless, because they bill for different things. Three distinct models are in play:
- Provisioned time — Fargate, ECS, a plain container host. You pay from start to stop, whether or not anything is served. Utilisation is your problem.
- Request time — Cloud Run and serverless generally. You pay while a request is in flight, and idle costs nothing, but a slow downstream call is billed as compute you're waiting on.
- Actual consumption — you pay for CPU cycles actually burned and memory actually resident, so an idle process costs almost nothing without needing to be torn down.
Which model is cheapest depends entirely on your duty cycle. A service pinned at 70% CPU around the clock is cheapest on provisioned pricing, because you're using what you're buying. A service that's busy four hours a day and idle for twenty is dramatically cheaper on anything that doesn't bill the twenty.
So before comparing anything, work out your actual duty cycle. Pull the average CPU utilisation of your Fargate tasks over a month. If it's under 20% — and for most non-production services it is far under — then your bill is mostly paying for nothing, and that's the number a migration would address.
What a migration actually involves
The container is the easy part; it runs anywhere. The work is in the four things AWS was quietly doing for you:
- Secrets. Secrets Manager or Parameter Store injection becomes the new platform's env and secret store — check it encrypts at rest and can scope values per environment.
- Identity. IAM task roles gave you credential-free access to AWS services. Off AWS, that becomes an access key you now have to store, rotate, and scope down.
- Networking. If your database is in a private subnet, it needs a public endpoint with TLS and an IP allow list, or a tunnel. Neither is hard; both are work.
- Observability. CloudWatch dashboards and alarms don't come with you. Know where logs and metrics land before you cut over, not after.
A reasonable order: move a staging environment first, since it's the one where idle cost hurts most and correctness matters least. Run it for two weeks. Compare the bill and the operational experience against the equivalent Fargate service, then decide about production with real data instead of a spreadsheet.
Which one
- The complaint is ceremony, and you must stay on AWS → App Runner.
- The complaint is idle cost, and the workload is request-driven → Cloud Run, or PandaStack if you want a whole-kernel boundary and git-driven deploys.
- The complaint is latency to users → Fly.io.
- You want a managed platform with a database next door → Render.
- You need a platform experience but the compute must run in your own cloud account → Northflank.
- You have many services and a platform team → Kubernetes.
- Your service lives inside a VPC and uses IAM roles → stay, and fix the specific complaint with Graviton, Spot, or scheduled scaling.
Frequently asked questions
Is AWS Fargate expensive compared to the alternatives?
Per unit of provisioned compute it's competitive; the expense comes from the billing model rather than the rate. Fargate charges for vCPU and memory from task start to task stop regardless of utilisation, so a service averaging 15% CPU is paying for roughly six times the compute it uses. Platforms that bill by request time or by actual consumption make that gap disappear without any change to your code. The fair comparison isn't rate against rate — it's your monthly bill against what the same workload would cost somewhere that doesn't charge for idle. Pull your average task utilisation first; that number tells you whether a migration is worth the effort.
Can Fargate scale to zero?
Not on its own. An ECS service with a desired count of zero runs no tasks and costs nothing, but nothing wakes it — there's no built-in request-triggered start. Teams approximate it with scheduled scaling (zero tasks outside business hours, which works well for staging) or by putting a Lambda in front that scales the service up on demand, which adds a cold path measured in tens of seconds. If genuine scale-to-zero is what you want, platforms that build it in — Cloud Run, Fly Machines, PandaStack — do it as a first-class behaviour rather than something you assemble.
What's the difference between Fargate and AWS App Runner?
App Runner is a managed layer over the same idea, aimed at removing the assembly. With Fargate on ECS you write a task definition, create a service, and wire up a load balancer, target group, security groups, and IAM roles yourself. App Runner takes an image or a source repo and gives you a service with a URL, TLS, and autoscaling built in. The trade is control: App Runner makes decisions for you that ECS leaves open, so if you need a specific networking topology or sidecar arrangement you'll outgrow it. On cost, App Runner bills provisioned instances at a reduced rate when idle rather than nothing at all.
Do I lose VPC access and IAM roles if I move off AWS?
Yes, and that's usually the largest hidden cost of leaving. IAM task roles give a container credential-free access to S3, SQS, or Secrets Manager; off AWS, that becomes an access key you have to store, scope, and rotate. Private subnet access to RDS becomes a public endpoint with TLS and an IP allow list, or a tunnel. Neither problem is hard, but both are work, and both slightly weaken your security posture relative to what IAM was doing. If most of what your service does is talk to AWS resources, this is the argument for staying — the migration would move the compute and leave the gravity behind.
Is Cloud Run a drop-in replacement for Fargate?
Close, for a stateless HTTP service. You hand it the same container image, it gives you a URL, and it scales on concurrency including down to zero — with far less configuration than an equivalent ECS setup. Where it isn't drop-in: request-scoped CPU means background work after a response returns may not get scheduled, there's a request timeout ceiling, and long-lived connections need specific handling. It's also a different cloud, so IAM becomes Google IAM and any AWS resources you talk to are now across the internet, with the latency and egress that implies.
Keep reading
- App hosting on PandaStack — Git-driven deploys, microVM isolation, $0 idle
- The best Google Cloud Run alternatives in 2026
- Scale-to-zero app hosting, explained
- Firecracker microVMs vs Google Cloud Run
- How to migrate from Heroku to microVM hosting
49ms p50 cold start. Fork, snapshot, and scale to zero.