guide · updated 6 October 2026

Why is AWS so expensive?

Because AWS charges for almost everything that moves: data leaving, data crossing between zones, data passing through a NAT gateway, every public IPv4 address, every log line. Each charge is small. Together they make AWS one of the most expensive ways to run a small or mid-size app. Here's where the money goes, what real teams have paid, three worked examples including a webinar app, and what to use instead.

Prices are AWS list prices for US East (N. Virginia), checked in October 2026 against AWS's, Hetzner's, DigitalOcean's and Cloudflare's own pages. Sources are linked inline and listed at the end.

The short version

1. AWS is Amazon's profit engine

In the second quarter of 2026, AWS made $42.2 billion in revenue and $16.6 billion in operating income, a 39.4% margin (Quartz, analysis). That was about 60% of all of Amazon's operating profit, from less than a quarter of its revenue. Nobody prices a business like that at cost.

The companies that have done the math in public tell the same story:

In 2021, a16z estimated that running workloads yourself often costs a third to half as much as the cloud, and that cloud costs were weighing on about $100 billion of market value across 50 large public software companies (The Cost of Cloud). Not everyone agrees. Corey Quinn, who cuts AWS bills for a living, replied that Dropbox was an outlier with one huge, predictable workload, and that for most companies engineering time is scarcer than money. That's fair, and it's why this guide is about small and mid-size apps, where the choice isn't "build a data center", it's "rent a $40 server instead of a $400 architecture".

2. Moving data is the expensive part

Storing data and running servers on AWS is pricey but comparable to other clouds. Moving data is where AWS stands apart:

What movesAWS charge (US East)
Data out to the internet (first 10 TB a month, after 100 GB free)$0.09 / GB
Data through a NAT gateway, on top of the above$0.045 / GB, plus $0.045 / hour
Between two availability zones in the same region$0.01 / GB each way
Between regionsabout $0.02 / GB
Through CloudFront, pay as you go (after 1 TB free)$0.085 / GB
Each public IPv4 address, since February 2024$0.005 / hour (about $3.65 a month)

Sources: EC2 data transfer, VPC and NAT gateway, IPv4 charge. Internet egress gets cheaper above 10 TB: $0.085, then $0.07, then $0.05 per GB.

Here's what sending 10 TB a month costs in different places:

Sending 10 TB a month fromCost
AWS, straight from EC2 or S3$891
AWS, from a server behind a NAT gateway$1,341
AWS CloudFront, pay as you go$765
Cloudflare Realtime (live video)$450
DigitalOcean droplets (2–5 TB included per droplet and pooled, then 1¢ per GB)$0–$100
Hetzner dedicated server, 1 Gbit/s port$0 (unlimited)
Cloudflare CDN or R2 for files and web pages$0

Cloudflare, a competitor with an obvious interest, estimated in 2021 that AWS charges US customers around 80 times its own cost for this bandwidth (AWS's Egregious Egress). Whatever the exact markup, the gap with everyone else is real and has lasted for years.

The NAT gateway

AWS's standard advice is to put your servers in private subnets, which reach the internet through a managed NAT gateway. Each one costs about $33 a month to exist, plus $0.045 for every gigabyte that passes through it, in either direction. That includes traffic to AWS's own services: a server in a private subnet reading from S3 in the same region pays NAT fees unless you add a free "gateway endpoint". Corey Quinn's verdict is in the title of his post: the AWS Managed NAT Gateway is unpleasant and not recommended.

What AWS has fixed

AWS has moved on some of this. Since November 2025, CloudFront offers flat-rate plans: $15 a month for 50 TB and 10 million requests, $200 for 50 TB and 125 million requests. Going over doesn't cost more, but AWS may serve you from fewer or more distant locations. It helps most when your content already lives in AWS: data from S3 or EC2 to CloudFront is free, while sending the same data to any other CDN costs $0.09 per GB. And since March 2024, customers who leave AWS can ask for their final data transfer to be free (Data Center Knowledge). When 37signals moved its storage out, AWS waived an egress bill of about $250,000.

3. The architecture tax: paying before your first user

AWS's reference architectures, and most tutorials, give even a small app the same shape: a load balancer in front, containers or servers in private subnets, a NAT gateway in each availability zone, and a database replicated across two zones. Every piece is reasonable on its own. Together they cost several hundred dollars a month before anyone signs up:

Case study 1 below adds it up: about $420 a month, for an app that runs comfortably on a $24 server with a $15 managed database.

4. Complexity is a cost too

AWS bills are hundreds of line items across dozens of services, each with its own units. Nobody can predict them well, which is why an entire industry of consultants and tools exists just to read them. That complexity costs money in two ways: the hours your team spends understanding the bill, and the charges nobody noticed until the invoice arrived.

There's also no hard spending cap. AWS Budgets can alert you and run a few actions, like applying a restrictive IAM policy or stopping specific EC2 or RDS instances. But nothing stops your whole account's spending at a number you choose. AWS's stance, as Hacker News commenters put it when discussing a $1,000 mistake, is that it would rather let you overspend and forgive it afterwards than take your production down.

5. When bills explode

WhenWhat happenedBill
Apr 2024An engineer's new, empty, private S3 bucket received about 100 million unauthorized write requests in one day, because its name matched a default in a popular open-source tool's configuration. Every rejected request was billed (The Register). Two weeks later AWS stopped charging for unauthorized requests from outside your account.$1,300
Nov 2025Geocodio's servers synced about 20 TB to S3 in the same region in one day. The traffic went through a NAT gateway instead of a free VPC endpoint, so every gigabyte was billed $0.045 (write-up). AWS refunded it.$907 in one day
202537signals moved its storage off S3. The data transfer out to do it was billed at about $250,000, which AWS waived under its 2024 policy for departing customers (DCD).$250,000, waived

These are the documented ones. Day to day, most AWS overspend is quieter: a NAT gateway in a forgotten test account, logs nobody reads with no expiry set, an idle load balancer, unattached disks and old snapshots. None of it makes the news. All of it shows up on the invoice every month.

6. What developers say

7. Three hypothetical case studies

These are made-up apps with realistic usage, priced at list prices in October 2026. AWS is US East, on demand, with no free-tier credits. Excluded everywhere: your time, email, monitoring tools and anything that would cost the same on every platform. Every assumption is listed so you can check the math or rerun it with your own numbers.

A note on Hetzner. Hetzner raised its prices in 2026 and, as of this writing, lists its cloud servers as unavailable because of a hardware shortage. Its dedicated servers can still be ordered, at the new prices: an AX42 (8 cores, 64 GB) is €97.30 or $117.10 a month plus a one-off setup fee, with unlimited traffic on its 1 Gbit/s port (prices, traffic). DigitalOcean is the alternative you can order today: droplets include 2–5 TB of transfer each, pooled across your account, and extra transfer is 1¢ per GB.

Case 1: a standard SaaS web app

AWS line itemPer month
RDS instance, Multi-AZ$94.90
Data transfer out (1 TB)$81.00
Two NAT gateways + 300 GB processed$79.20
Fargate (2 tasks, around the clock)$72.08
CloudWatch Logs (50 GB)$26.50
RDS storage, Multi-AZ (100 GB)$23.00
Application Load Balancer$22.27
Public IPv4 addresses (4)$14.60
Secrets Manager, S3, Route 53$7.20
Total$421 / month

AWS: $421. DigitalOcean: $39. That's about 11 times more, before a staging copy or a support plan. Reserving the database for a year cuts that line by 28%, which barely moves the total.

Case 2: a webinar app

This is where AWS's bandwidth prices hurt most. Live, interactive webinars run on WebRTC: an SFU (selective forwarding unit) server receives the presenter's video and sends a copy to every attendee. Every one of those copies is data leaving your servers.

Video setupLaunch (10 TB)Growth (101 TB)
AWS: EC2 servers running your own SFU$1,123$8,778
…of which bandwidth out$902$7,879
AWS: IVS Real-Time, managed ($0.072 to $0.056 per participant-hour)$1,057$9,416
AWS: Chime SDK, managed ($0.0017 per attendee-minute)$1,540$15,402
Cloudflare Realtime SFU, managed ($0.05 per GB after 1 TB)$456$5,013
Hetzner: AX42 dedicated servers, unlimited traffic$240$1,087
DigitalOcean: 4 vCPU / 8 GB droplets ($48, 5 TB each)$97$940

Hetzner also charges a one-off setup fee per server: about $118 at launch and $531 at growth. Managed-service prices are from AWS's IVS and Chime SDK pages and Cloudflare's Realtime page; EC2 is c7g.xlarge at $0.145 an hour.

On AWS, bandwidth is 80% of the launch bill and 90% at growth. Paying AWS to manage the video doesn't help: IVS and the Chime SDK price per participant-hour at about the same level, or higher. At growth, the difference between AWS and DigitalOcean is about $7,800 a month, roughly $94,000 a year, for the same webinars.

The cheapest option here isn't Hetzner. DigitalOcean's 5 TB per droplet plus 1¢ per extra gigabyte beats Hetzner's flat €97 servers at both sizes, now that Hetzner's 2026 price rises have landed. Either way, the gap with AWS is about 5 to 12 times.

The one cheap path on AWS

If your webinars are one-way broadcasts and a 10 to 30 second delay is fine, you can skip WebRTC: encode the stream to HLS video segments and serve them through CloudFront. At launch, 15,000 viewer-hours is about 10 TB and 27 million requests, which fits CloudFront's $200 flat-rate plan. With one encoding server that's about $310 a month. You lose live interaction, and at the growth size you'd pass the plan's 50 TB allowance.

Case 3: a serverless API with steady traffic

AWS line itemPer month
API Gateway, HTTP API (100M requests)$100.00
CloudWatch Logs (100 GB)$53.00
Data transfer out (500 GB)$36.00
Lambda compute (after the always-free tier)$35.00
DynamoDB reads (200M)$25.00
Lambda requests$19.80
DynamoDB writes (20M)$12.50
Total$281 / month

With a REST API instead of an HTTP API, API Gateway alone is $350 and the total is $531.

AWS: $281 to $531. A single server: $13 to $48. That's 6 to 11 times more than DigitalOcean. At low or very spiky traffic the picture flips: at 1 million requests a month, Lambda's always-free tier makes this nearly free.

All three side by side

AppAWSDigitalOceanHetzner
Standard SaaS app$421$39$13*
Webinar app, launch (10 TB)$1,123$97$240
Webinar app, growth (101 TB)$8,778$940$1,087
Serverless API, 100M requests$281$48$13*

* Hetzner cloud servers, currently listed as unavailable to order.

The server columns leave out your time: a few hours to set up and an hour or two a month to keep up. In every case here, the gap pays for that many times over.

8. Do you still need AWS's managed services in the AI era?

A big part of an AWS bill is paying Amazon to run things for you: databases (RDS), caches (ElastiCache), search (OpenSearch), queues and clusters. That made sense when running a database meant hiring someone who knew how. It makes less sense now.

What AI doesn't replace

Someone still has to own the data. Backups only count if you've restored one. Security patches have to be applied, disks fill up, and a database failover at 3 a.m. needs a person who understands what happened. For a production database, paying someone to manage it is often still right. It just doesn't have to cost AWS's Multi-AZ prices. AI writes the runbook; it doesn't carry the pager.

10. What to use instead, by type of project

ProjectUseWhy
Standard web app or SaaSA VPS (DigitalOcean, Hetzner, OVHcloud) plus managed Postgres, deployed with Coolify or KamalCase 1: about a tenth of the AWS bill.
Live video, webinars, callsYour own SFU on servers with included or unlimited traffic, or Cloudflare Realtime if you want it managedCase 2: bandwidth is the whole bill.
Downloads, media files, recordingsCloudflare R2, with free egressYou pay for storage, not for every download.
Steady-traffic APIsA VPS, or Cloudflare WorkersCase 3: per-request billing loses under constant load.
Static sites and docsCloudflare Pages or GitHub PagesFree.
Spiky or near-zero trafficLambda, or Cloudflare WorkersFree tiers and scale-to-zero win here.
Must stay on AWSAWS, with the checklist belowMost AWS bills have easy savings in them.

Hosting a Next.js app on Vercel? That's AWS underneath too, with another margin on top. See why Vercel is so expensive.

11. If you stay: how to cut your AWS bill

Want someone to do this for you? I've spent 15 years on infrastructure at companies like events.com, remo.co, bayut.com and dubizzle. Send me your AWS invoice or Cost Explorer export. Within 48 hours you'll get a free written teardown with every saving priced in dollars, whether you stay on AWS or move. If you want me to make the changes, you pay only once the bill drops.

Get a free teardown →

Sources

  1. Amazon Q2 2026 results: Quartz, earnings analysis
  2. AWS pricing: EC2 and data transfer, VPC and NAT gateway, Fargate, Elastic Load Balancing, RDS for PostgreSQL, API Gateway, Lambda, DynamoDB, CloudWatch, Support, Savings Plans
  3. AWS video pricing: IVS, Chime SDK; instance prices from Vantage (c7g.xlarge) and Vantage (db.t4g.medium)
  4. AWS: Public IPv4 address charge (2023), S3 stops charging for unauthorized requests (May 2024), Budgets actions
  5. CloudFront flat-rate plans: Duckbill's guide (February 2026)
  6. Free egress when leaving: Data Center Knowledge (March 2024)
  7. Cloudflare: AWS's Egregious Egress (July 2021), Realtime SFU pricing
  8. Hetzner: 2026 price adjustment, dedicated server traffic, IPv4 pricing
  9. DigitalOcean: Droplets, bandwidth billing, managed databases
  10. 37signals: We stand to save $7m over five years, The big cloud exit FAQ, DCD on the S3 exit, DCD on 2024 savings
  11. How Ahrefs saved US$400M by not going to the cloud (March 2023); Dropbox S-1 (2018)
  12. a16z: The Cost of Cloud, a Trillion Dollar Paradox (2021); Corey Quinn: reply, The AWS Managed NAT Gateway is unpleasant and not recommended
  13. Incidents: The Register on the S3 bucket bill (May 2024), Geocodio: the $1,000 AWS mistake (November 2025)
  14. Hacker News: A $1k AWS mistake, AWS to begin charging for public IPv4, fck-nat, Switch to VPC endpoints from NAT gateways
  15. Tools: LiveKit, mediasoup, fck-nat, Coolify, Kamal