AWS vs Vercel vs Fly.io in 2026: Real Hosting Costs at Scale
A cost-aware, runbook-style breakdown of AWS vs Vercel vs Fly.io — with modeled monthly bills at 10K, 100K, and 1M MAU, the egress traps nobody prices in, and a clean migration path when you outgrow your first choice.
AWS vs Vercel vs Fly.io cost, modeled at 10K, 100K and 1M MAU. Real monthly bills, egress traps, and when each host stops making financial sense.
The AWS vs Vercel vs Fly.io cost question almost never has a single right answer — it has a right answer for your traffic shape and team size. Pick Vercel and you buy developer velocity at a premium that gets brutal past a few hundred GB of bandwidth; pick raw AWS and you buy the cheapest unit economics along with a pager rotation you now have to staff. Get it wrong and the failure mode is predictable: a surprise five-figure invoice after a launch spike, or a two-week outage postmortem because nobody on a three-person team actually understood the VPC.
This piece models the real monthly bill on each platform at 10K, 100K, and 1M monthly active users (MAU), shows the cost levers that actually move the number, and gives you a migration runbook for the day you outgrow your first pick.
Cost & latency snapshot (the number you came for)
Bottom line at a glance (pricing quoted July 2026 from each provider's public rate cards — clouds change pricing, re-check before you commit):
- 10K MAU: Vercel ~$20–60/mo, Fly.io ~$25–70/mo, AWS ~$40–120/mo. At this scale the difference is a rounding error against one engineer-hour, so optimize for velocity, not cents.
- 100K MAU: Vercel ~$350–900/mo, Fly.io ~$180–450/mo, AWS ~$220–600/mo. The gap opens up. Vercel's bandwidth and function-invocation pricing starts to bite.
- 1M MAU: Vercel ~$3,000–9,000+/mo, Fly.io ~$900–2,500/mo, AWS ~$1,200–4,000/mo (before Savings Plans / committed-use discounts, which can cut 30–50%).
The ranges are wide on purpose — your egress volume and how compute-heavy your requests are will swing the bill 3–5x. The methodology and assumptions behind these numbers are in the sections below. Treat them as a model to plug your own numbers into, not a quote.
How each platform actually bills you
You cannot compare these three by staring at a per-hour price, because they don't sell the same unit. The mistake founders make is comparing a Vercel Pro seat to an EC2 instance. They're not the same product.
Vercel: bandwidth + invocations + seats
Vercel is a managed platform on top of AWS and Cloudflare. You pay for included resources on a plan tier (Hobby, Pro, Enterprise), then overages on bandwidth, function invocations, function duration (GB-hours), edge requests, and image optimizations. Per the Vercel pricing docs, the Pro plan bundles a baseline of usage and meters everything above it. The trap is that a viral spike bills as overage instantly — there is no cap unless you set spend controls.
Fly.io: machines you rent by the second
Fly.io sells Firecracker microVMs ("Machines") priced by CPU/RAM per second, plus persistent volumes, plus outbound bandwidth. You scale by adding machines in regions, and you can auto-stop idle machines so you pay near-zero when nobody is hitting them. The Fly.io pricing docs lay out the per-second machine rates and regional bandwidth tiers. It behaves like a lightweight VPS fleet with a global anycast network in front.
AWS: 200 services, 200 meters
AWS is not one product; it's a parts bin. A typical web app bill is EC2 or Fargate (compute) + RDS or Aurora (database) + an ALB (load balancer, billed per hour and per LCU) + CloudFront (CDN) + data transfer out. The EC2 pricing page and on-demand rate card are your starting point, but the line item that surprises everyone is egress: data transfer out to the internet runs roughly $0.09/GB after the first free tier, and cross-AZ traffic is billed too.
The single biggest driver of the AWS vs Vercel vs Fly.io cost difference at scale is egress. A media-heavy app pushing 10 TB/month of bandwidth pays for that bandwidth on every platform — but the per-GB rate and what's bundled differs by an order of magnitude.
Modeled bills at 10K, 100K, and 1M MAU
Here are the assumptions so you can adjust them. Workload: a Next.js app with an API and a Postgres database. Traffic model: each MAU generates ~30 requests/month, average response 50 KB, plus ~200 KB/month of static/media per user. That yields roughly 6 GB egress at 10K MAU, 60 GB at 100K, and 600 GB at 1M — deliberately conservative for a text-and-UI app. A media-heavy or video app can be 10–50x higher, and the bill scales with it.
| Scale | Vercel (Pro + overage) | Fly.io (machines + volume + bw) | AWS (Fargate + RDS + ALB + CloudFront) |
|---|---|---|---|
| 10K MAU (~6 GB egress) | ~$20–40/mo (mostly the base plan) | ~$25–50/mo (2 small machines + a volume) | ~$60–120/mo (ALB + RDS floor dominates) |
| 100K MAU (~60 GB egress) | ~$350–700/mo (invocations + bandwidth overage) | ~$180–400/mo (scale machines, cheap bw) | ~$250–550/mo (bigger RDS, Fargate tasks) |
| 1M MAU (~600 GB egress) | ~$3,000–8,000/mo (bandwidth + GB-hours) | ~$900–2,200/mo (fleet + reserved-ish) | ~$1,200–3,500/mo (before Savings Plans) |
Read the pattern, not the exact digits. AWS carries a fixed floor (an ALB alone is ~$16–25/mo before traffic, RDS has a minimum instance) that makes it the most expensive option for tiny apps. Vercel is cheapest to start and most expensive to scale for bandwidth-heavy workloads. Fly.io tends to be the flattest curve because you rent compute at close to cost and its bandwidth is cheaper than AWS egress in most regions.
The cost levers that actually move the bill
Before you switch platforms to save money, pull these levers on the one you already run. Most "we have to leave Vercel" decisions are really "we never turned on caching."
- Cache aggressively at the edge. Every request served from CDN cache is an egress cost you pay once, not per user. On Vercel this is a
Cache-Controlheader; on AWS it's CloudFront TTLs; on Fly.io it's your own cache layer or a fronting CDN. - Kill idle compute. Fly.io's
auto_stop_machinesand AWS Fargate scale-to-low, or Lambda for spiky endpoints, stop you from paying for 3am silence. - Commit for discounts once traffic is predictable. AWS Savings Plans and Compute Savings Plans cut 30–50% off on-demand for a 1- or 3-year commit. Don't commit until your baseline is stable — you'll over-provision.
- Right-size the database. RDS/Aurora is frequently the biggest line item. A read replica plus caching beats vertically scaling the primary for read-heavy apps.
- Watch egress paths. Cross-AZ chatter and NAT Gateway data processing are silent AWS killers — a NAT Gateway bills per-GB processed on top of its hourly rate.
For the deeper trade-off between paying per-request versus paying for always-on machines, our Kubernetes vs serverless cost breakdown models the crossover point in detail.
The migration runbook (Vercel → Fly.io or AWS)
The typical path is: launch on Vercel, hit a bandwidth or function-duration wall around 100K–500K MAU, then move the expensive workloads off. You rarely move everything — you move the parts Vercel meters most punishingly and keep the frontend where DX is best.
A minimal Fly.io deploy for the API tier you're offloading:
# fly.toml — auto-stop idle machines so you pay near-zero at night
app = "my-api"
primary_region = "iad"
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = "stop"
auto_start_machines = true
min_machines_running = 1
[[vm]]
size = "shared-cpu-1x"
memory = "512mb"# ship it
fly launch --no-deploy
fly secrets set DATABASE_URL=postgres://...
fly deploy
fly scale count 2 --region iad,fra # add a second region when latency demands itIf AWS is the target, define the compute in Terraform so the rollback is a terraform destroy, not a manual console cleanup:
resource "aws_ecs_service" "api" {
name = "api"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.api.arn
desired_count = 2
launch_type = "FARGATE"
network_configuration {
subnets = var.private_subnets
assign_public_ip = false
}
}Rollback plan: keep the Vercel deployment live and weighted at 100% in DNS during migration. Cut traffic to the new backend behind a feature flag or a weighted DNS record (Route 53 weighted routing), verify error rates and p95 latency for 24 hours, then shift the weight. If the new tier misbehaves, flip the weight back to Vercel — no redeploy, blast radius is one DNS TTL. Never migrate the database and the compute in the same change window; move compute first, pointing at the existing DB, then move the DB.
Security posture across the three
Cost and security trade against each other here. Vercel and Fly.io hand you sane defaults (managed TLS, DDoS absorption, no VPC to misconfigure) — you're paying partly for not having a public S3 bucket incident. AWS gives you every knob, which means you own every misconfiguration.
- Vercel/Fly.io: HTTPS is on by default, secrets are managed, and the attack surface you control is mostly your own code. The risk is over-trusting the platform boundary and leaking secrets in build logs or environment variables exposed to the client bundle.
- AWS: you own IAM, security groups, VPC routing, and encryption-at-rest config. The failure mode is an over-permissive IAM role or a security group open to
0.0.0.0/0. Enforce least-privilege and run a scanner before launch — our cloud security checklist covers the audit steps.
Whatever you pick, put secrets in the platform's secret store (never in the repo), scope database access to private networking, and log egress so a compromised container can't quietly exfiltrate data. If you're handling payments or PII, the compliance surface (SOC 2, PCI) is smaller on managed platforms — one more hidden cost lever in AWS's column.
Head-to-head comparison
| Dimension | Vercel | Fly.io | AWS |
|---|---|---|---|
| Best for | Next.js/frontend, fast iteration | Global low-latency apps, small teams | Everything, at scale, with a platform team |
| Cheapest at | Tiny apps & prototypes | Mid-scale, bandwidth-heavy | Large scale with committed-use discounts |
| Cost floor | ~$0–20/mo | ~$5–25/mo | ~$40–80/mo (ALB + RDS minimum) |
| Egress cost | High (bundled then metered) | Low–moderate | High (~$0.09/GB after free tier) |
| Ops burden | Near zero | Low | High |
| Vendor lock-in | Moderate (framework-tied) | Low (containers) | Moderate–high (service sprawl) |
| Scale ceiling | High, expensive | High | Effectively unlimited |
When NOT to use each
Don't use Vercel when you're bandwidth- or compute-heavy at scale (video, large media, long-running jobs) — the overage model makes you the product. It's also wrong for non-frontend backends where you're not using its framework integrations; you're paying a premium for features you don't touch.
Don't use Fly.io when you need a deep managed-services ecosystem (managed Kafka, dozens of first-party databases, fine-grained compliance attestations) — you'll end up bolting those on yourself. It's also not the pick if your team has zero appetite for thinking about regions and machines.
Don't use raw AWS if you're a team of one to three with a payload that fits comfortably on a managed platform. The rule of thumb: reach for AWS (and only then consider Kubernetes) when you have at least one engineer whose job includes infrastructure and a workload that a PaaS meters punishingly — not before. A small team on AWS spends its scarce hours babysitting a VPC instead of shipping. See our Vercel vs Cloudflare cost comparison if edge-first is your actual constraint.
The call
Start on Vercel or Fly.io. If your app is frontend-led and you value shipping speed over unit economics, Vercel until the bandwidth bill hurts. If you want the flattest cost curve and don't mind thinking in machines, Fly.io from day one. Move expensive workloads to AWS when — and only when — you have the traffic to justify committed-use discounts and a person to own the platform. The most expensive mistake isn't picking the "wrong" host; it's picking AWS too early and drowning a two-person team in undifferentiated ops.
Next step: before you migrate anything, model your own egress and compute numbers into the table above — then read our SaaS guide to cutting your cloud bill to pull the caching and right-sizing levers first.
Frequently Asked Questions
#Is Vercel more expensive than AWS at scale?
For bandwidth-heavy apps, yes — often 2–3x. Vercel meters bandwidth, function invocations, and function duration as overages with no default cap, so a media-heavy app at 1M MAU can hit $3,000–8,000+/month versus roughly $1,200–3,500 on AWS before Savings Plans. For small or purely frontend apps, Vercel is usually cheaper because AWS carries a fixed floor (an ALB plus a minimum RDS instance) that costs money before you serve a single request. Pricing quoted July 2026 — verify current rates.
#Which is cheapest for a startup at 10K MAU?
Vercel or Fly.io, typically $20–70/month. At 10K MAU the differences between all three are smaller than one engineer-hour, so optimize for developer velocity rather than a few dollars. AWS tends to be the most expensive option at this scale because its load balancer and managed database carry a fixed monthly floor that dominates the bill when traffic is low.
#Why is my AWS bill so much higher than I expected?
Usually egress and hidden per-unit meters. Data transfer out to the internet runs about $0.09/GB after the free tier, NAT Gateways bill per-GB processed on top of an hourly rate, cross-AZ traffic is charged, and load balancers bill per LCU as well as per hour. None of these show up when you estimate compute alone. Turn on Cost Explorer, tag resources, and watch data-transfer line items first.
#When should I move off Vercel to Fly.io or AWS?
When your bandwidth or function-duration overages consistently exceed what equivalent compute would cost elsewhere — commonly somewhere between 100K and 500K MAU for bandwidth-heavy apps. Before migrating, turn on edge caching and set spend controls; many 'we have to leave Vercel' bills are really uncached responses. When you do move, offload only the expensive workloads and keep the frontend where the developer experience is best.
#Do I need Kubernetes for any of these?
Not for most apps. Reach for Kubernetes only when you have a workload that a managed platform meters punishingly and at least one engineer whose job includes infrastructure. Fly.io machines and AWS Fargate cover the majority of use cases without a control plane to babysit. A small team running Kubernetes usually spends its scarce hours on ops instead of shipping product.
#How do I avoid a surprise bill during a traffic spike?
Set hard spend controls and alerts on every platform. On Vercel, configure spend management and per-project usage caps. On AWS, set Budgets with alerts and cap Auto Scaling group maximums. On Fly.io, bound machine counts and enable auto-stop for idle machines. Then cache aggressively at the edge so a viral spike serves from cache instead of hitting metered compute and egress on every request.
“Enterprise SEO Consultant in India — Founder & CEO of Triple Minds & Make An App Like. Enterprise SEO Consultant in India · Schedule a Call for Investor-Ready Solutions.”
Continue reading
Observability Tools Cost Comparison: Datadog vs Grafana vs New Relic
A cost-aware teardown of Datadog, Grafana and New Relic pricing at 10K, 100K and 1M MAU — with the levers that actually move your monthly bill.
Kubernetes vs Serverless Cost in 2026: The Honest Breakdown
A cost-aware, runbook-style comparison of Kubernetes vs serverless with real monthly bills at 10K, 100K, and 1M MAU — plus the crossover point where the answer flips.
How to Migrate Replit Hosting to Cloud: Complete Guide
Replit is a brilliant place to build and a costly place to stay. When your app gets real users, deployment pricing, cold starts, and platform limits start working against you. This is the complete, step-by-step guide to migrating Replit hosting to the cloud: exporting your code and secrets, containerizing the app, choosing between Vercel, Render, Railway, Fly.io, AWS, GCP, and a plain VPS, moving your database safely, cutting over DNS without downtime, and knowing exactly what it will cost.