
AWS has over 200 services. Most of them exist because Amazon noticed customers building something themselves and thought “we could charge for that.” AWS calls this removing “undifferentiated heavy lifting” — Vogels has used the phrase in keynotes since at least 2014. The framing is generous: what it means in practice is that they productise anything common enough to charge a premium for.
The managed service model works brilliantly for AWS. You pay a premium for not having to think about operations. But for many services, the “convenience tax” is 5–10x what the underlying infrastructure actually costs. At scale, that tax becomes your biggest line item.
Five services consistently show up as disproportionate spend on bills in the £50k–£500k/month range. All five have self-hosted alternatives that are cheaper, often better, and not as hard to run as AWS wants you to believe.
1. NAT Gateway
What you’re paying: £0.035/GB processed + £0.035/hour per gateway. Sounds cheap. It isn’t.
A moderately busy application pushing 5TB/month through NAT Gateway pays roughly £175 in processing fees alone — per gateway, per AZ. Run three AZs (as AWS recommends) and you’re at £525/month just for the privilege of your private subnets talking to the internet. I’ve seen bills where NAT Gateway alone is £3,000–£5,000/month and nobody noticed.
The alternative: A t3.micro running as a NAT instance costs about £7/month. You lose the managed high-availability, but two of them behind an auto-scaling group gets you equivalent resilience for 97% less. fck-nat is an open-source NAT instance AMI built specifically for this — handles failover, battle-tested, fraction of the cost.
Keep the managed version if your data transfer through NAT is under 100GB/month. Below that, the convenience is worth it.
2. CloudWatch
What you’re paying: £0.30 per metric per month, £0.76 per GB log ingestion, £0.03 per 1,000 API requests, plus dashboards, alarms, and Logs Insights queries.
A company with 50 microservices easily generates 5,000+ custom metrics and 500GB+ of logs per month. That’s £1,500 in metrics + £380 in log ingestion + query costs. CloudWatch bills of £3,000–£8,000/month aren’t unusual at this scale.
The alternative: Prometheus + Grafana for metrics. Loki or OpenSearch for logs. The compute to run this costs £200–£400/month — and the tooling is genuinely better. Grafana dashboards are more flexible, PromQL is more powerful, and you’re not paying per-query to search your own logs.
Keep CloudWatch if you’re running under 10 services and the bill is under £500/month. The moment you start sending custom metrics or high-volume logs, the economics flip.
3. Application Load Balancer (ALB)
What you’re paying: £16.50/month base + LCU charges. AWS buries the real cost in “Load Balancer Capacity Units” — a composite of connections, bandwidth, and rule evaluations. Most production ALBs land at £80–£200/month each. Three of them (production, staging, internal) puts you at £300–£600/month.
The alternative: Caddy, Nginx, or HAProxy on a £15/month instance. Same traffic, TLS termination, HTTP/2, health checks. Caddy gives you automatic Let’s Encrypt — arguably better DX than ACM.
Keep ALB if you’re deeply integrated with AWS WAF or using its native auth features. But if you’re running three or more, self-hosting saves meaningfully.
4. Amazon OpenSearch
What you’re paying: A typical three-node r6g.large.search cluster with EBS storage runs £700–£900/month. Dedicated master node adds another £300.
The same instances as plain EC2 boxes cost £200–£300 total. The managed markup is 200–300%.
The alternative: Self-hosted OpenSearch or Elasticsearch at a third of the cost. Docker images, Ansible playbooks, or Kubernetes operators handle deployment. Snapshot backups, rolling upgrades, shard management — all solved problems with good documentation.
For log search specifically, Loki (from Grafana Labs) is simpler, cheaper, and integrates natively with Grafana.
Keep managed OpenSearch if search is core to your product and you don’t have someone comfortable running Elasticsearch clusters. The premium buys peace of mind for a critical feature.
5. RDS
What you’re paying: RDS Multi-AZ db.r6g.xlarge PostgreSQL: roughly £580/month. Add storage, IOPS, backup retention, Performance Insights: £750–£1,000/month. The equivalent EC2 instance is £195/month. Managed markup is 3–4x.
The alternative: Self-hosted PostgreSQL with pgBackRest for backups, streaming replication for HA, PgBouncer for connection pooling. Setup takes a day. Ongoing maintenance is a few hours per month. Saves £500+/month per instance.
If you want managed convenience without the AWS markup, Crunchy Bridge or Neon offer managed PostgreSQL at significantly lower prices than RDS.
Keep RDS if you have a single database, no DBA experience, and the cost is under £300/month. But if you’re running four instances (production, staging, analytics, and the one someone created “temporarily” last year), self-hosting the non-production ones alone saves £1,000+/month.
The compound effect
Individually, none of these looks catastrophic. Together:
| Service | Managed | Self-Hosted | Saving |
|---|---|---|---|
| NAT Gateway (3 AZ) | £525 | £15 | £510 |
| CloudWatch | £3,000 | £300 | £2,700 |
| ALB (×3) | £450 | £15 | £435 |
| OpenSearch (3-node) | £800 | £300 | £500 |
| RDS (×2 non-prod) | £1,000 | £250 | £750 |
| Total | £5,775 | £880 | £4,895 |
Nearly £59,000 per year. Conservative estimate for a mid-sized SaaS operation.
The trade-off is real — self-hosting requires operational knowledge. But a senior engineer can set up and maintain all five as a part-time responsibility with modern tooling. The question is whether the convenience is worth 3–10x the cost at your current scale.
A Platform Fit Verdict goes through your bill line by line — which managed services are earning their markup, and which are just burning cash.

