Case study · anonymous client
From AWS to bare metal, without touching the application.
How we migrated a production workload from AWS to dedicated Leaseweb servers, with a zero-downtime cutover.
Context
Production platform on AWS: EC2 instances, RDS for PostgreSQL, S3 and managed services. Monthly spend in the tens of thousands of euros, traffic following a predictable daily curve.
Decision
Paying for unused elasticity no longer made sense. Move to dedicated bare metal, changing only the infrastructure layer.
Approach: same application, new infrastructure
Kubernetes on bare metal with the same container images, Helm charts and CI/CD pipelines. Every managed service was replaced by an open-source, portable component.
AWS → BARE METAL · LEASEWEB
- EC2
- Kubernetes · kubeadm
- EBS
- Longhorn
- S3
- MinIO
- RDS PostgreSQL
- PostgreSQL + Patroni
- ALB
- HAProxy + Keepalived
- CloudWatch
- Prometheus + Grafana
- VPC / NAT
- WireGuard
Project phases · about 3 months
The process
- 01
Assessment · 2 weeks
Inventory of services, dependencies and data flows.
- 02
Build · 3 weeks
Servers, Kubernetes cluster, network, storage, observability.
- 03
Parallel run · 4 weeks
Shadow-mode stack, load tests and tuning.
- 04
Data · 2 weeks
PostgreSQL replication from RDS, S3 → MinIO sync.
- 05
Cutover · 1 day
DNS switch with short TTL and 24h monitoring.
Described benefits
- Monthly spend down from tens of thousands to a few thousand euros
- Incident diagnosis time reduced: from hours to minutes
- Full infrastructure-as-code and documented runbooks
- More consistent latency between application and database
Benefits as documented in the article, for this specific workload and team.
Trade-offs and limits
- High availability designed and tested in-house (Patroni, Longhorn, Keepalived)
- Self-managed backup and disaster recovery (pgBackRest, restic, offsite replication)
- More operational responsibility: Linux skills and on-call required
- Not suited to highly variable traffic or products with uncertain requirements