How to move from AWS to Hetzner without making a mess
A cloud migration only works when you reduce complexity first. The safest path from AWS to Hetzner is usually simplification before lift-and-shift.
Many teams talk about leaving AWS when the bill gets painful, but a lot of migrations stall because the technical plan starts too late.
The mistake is treating migration as a hosting swap. In reality, the first job is to simplify what you are moving.
Step 1: inventory what actually matters
Before touching infrastructure, identify:
- the workloads that are truly production-critical
- the managed services you depend on
- which systems are stateful
- which systems can tolerate downtime
- where your DNS, backups, and secrets live
This is where many migrations fail. People underestimate how much hidden AWS coupling sits inside a "small" stack.
Step 2: reduce before you migrate
The safest migration is usually not a full lift-and-shift.
Instead:
- remove unused services
- collapse over-engineered networking
- simplify deployments
- replace cloud-specific dependencies where possible
- document what can become a plain VM, container, or managed database elsewhere
You want fewer moving parts before you move anything.
Step 3: separate generic workloads from AWS-native ones
Some things move easily:
- Dockerized apps
- standard Nginx services
- worker processes
- Postgres or MySQL with clear backup plans
Some things do not:
- Lambda-heavy architectures
- tightly coupled IAM assumptions
- S3 event chains
- CloudFront-specific behavior
The migration plan gets much cleaner once you admit which pieces are portable and which pieces need redesign.
Step 4: move stateless services first
Do not begin with the hardest database migration if you can first prove the deployment model with simpler workloads.
A good sequence is often:
- stateless apps
- background workers
- non-critical internal services
- databases and persistent storage
That lets you validate networking, monitoring, secrets, deployment scripts, and rollback procedures without placing the whole business at risk immediately.
Step 5: keep rollback realistic
Every migration plan needs a real rollback path, not just confidence.
That means:
- backups tested before cutover
- DNS changes with sensible TTLs
- parallel validation where possible
- observability in the new environment before traffic moves
If rollback is vague, the migration is not ready.
Step 6: accept that some redesign is healthy
A migration can be the best opportunity to remove waste:
- too many layers
- too many managed service dependencies
- too much cloud-specific glue
- too much spend defending complexity that does not help the business
The point is not to recreate AWS somewhere cheaper. The point is to end up with a system that is simpler, more understandable, and less expensive to operate.