Off the US cloud. Onto European ground.
A move is not one project. It is a series of small ones, each with its own boundary, its own Terraform code and its own way back.
Five principles
- Infrastructure as code from day one
Nothing is clicked together in a portal. Everything that can be recreated lives in Terraform in your own repository.
- The bounded context as the unit of the move
We move one delimited business area at a time, with its data and its APIs, never “the whole estate” at once.
- Parallel running, never a big bang
The new environment runs beside the old one until the numbers match. Then we switch. Never a weekend with crossed fingers.
- Your own repositories
The code, the pipelines and the documentation sit with you from the first day. The day we leave, you lack nothing.
- A way back at every step
Every step can be rolled back. That is not pessimism; it is what lets the supervisor and your head of operations say yes.
Six steps
Always in this order. Under each step is what you see on your side while it happens.
- Assess
Three weeks with your architects: inventory of systems and data, jurisdiction and supervisory requirements, architectural seams and lock-in, costs today against a European estimate.
You see: A report with a go or a no-go, a target landscape and a phased plan. Possibly a no.
- Draw the target landscape
Which provider, which regions, what is managed and what you run yourselves. Where data lives and who can reach it. The exit plan is written here, not afterwards.
You see: One diagram your security people and the supervisor can read.
- Build the landing zone in Terraform
Network, Kubernetes, databases, secrets, logging and access as code. Dev, test and prod identical in shape, so dev can rehearse what prod must do.
You see: Three environments that can be deleted and recreated in an afternoon.
- Move context by context
The least connected business area first. Data is synchronised, the application runs in both places, differences are measured.
You see: One area at a time running on European ground while the rest stands untouched.
- Cut over
Traffic and data point at the new environment. The old one stays on, but quiet, until the numbers have matched for long enough.
You see: A date on which the hyperscaler stops sending invoices.
- Hand over
Operations documentation, runbooks, access, and the first rehearsed move: a workload brought up at a second European provider, with the hours recorded.
You see: An estate you can move again yourselves.
The move as code
A plan from the Kvarters migration. The Azure resources go, the European ones come, and the application catalogue is not touched. The module at the top knows no provider; one thin module per cloud does the rest.
$ terraform plan - module.azure.azurerm_kubernetes_cluster.main - module.azure.azurerm_postgresql_flexible_server.main - module.azure.azurerm_key_vault.main + module.scaleway.scaleway_k8s_cluster.main + module.scaleway.scaleway_rdb_instance.main + module.scaleway.scaleway_secret.app[7] module.platform (unchanged: 7 apps) Plan: 41 to add, 0 to change, 38 to destroy.
Where the systems can live
European cloud is not one provider in Paris. It is a dense network of data centres, and two of them sit on Danish soil. The map shows where a Danish company can move today, and what is on its way.
- Scaleway, live: Paris (3 zones), Amsterdam (3), Warsaw (3), Milan (1 since March 2026, two more coming). Our preferred destination.
- Scaleway, coming: a German zone opened November 2025, city not published; a Swedish region announced without a date.
- OVHcloud regions: Gravelines, Roubaix, Strasbourg, Paris, Frankfurt, London, Warsaw, Milan.
- OVHcloud local zones: Copenhagen, Stockholm, Madrid, Brussels, Zurich, Prague, Vienna, Sofia, Bucharest, Manchester, Marseille, Amsterdam.
- STACKIT (Schwarz Group): Neckarsulm and Ellhofen in Germany, Ostermiething in Austria.
- Hetzner: Falkenstein, Nuremberg, Helsinki.
- UpCloud: Copenhagen (Ballerup), Stockholm, Helsinki, Stavanger, Amsterdam, Frankfurt, Warsaw, Madrid, London.
- Aarhus, where we sit. Copenhagen is about 160 km away, Amsterdam 600, Falkenstein 700, Paris 1,000.
Updated October 2026 from the providers’ own pages and press releases. The map is drawn as a simplified coastline and loads nothing from outside.
Where we move you to
Scaleway, by default
European-owned, managed Kubernetes and PostgreSQL, three zones in Amsterdam, a Terraform provider that holds. It won our own comparison of eight providers, and it is where Kvarters runs today.
UpCloud, when the ground must be Danish
A zone in Ballerup since December 2025. The right answer when the contract or the supervisor says “in Denmark” and the workload can live with a smaller catalogue of managed services.
STACKIT, when the data layer must be German
The strongest managed data layer in the comparison, German ownership, German and Austrian data centres. The price is a German-oriented market and fewer regions.
Hetzner, when you have a platform team of your own
The cheapest in Europe and without managed services. STAR runs its whole estate here as code with 60 developers. It requires that you want to be your own platform.
What stays
DNS, CI and mail are rarely the first things we move. They are not in the critical path, they can be replaced in a day, and a move should start where the risk is, not where it is easiest.
Danish organisations that have already moved
No other Danish site collects them. Every figure is from public sources: the providers’ own pages, Ingeniøren, Version2 and DigiTech.
| Who | What | To where | Numbers |
|---|---|---|---|
| STAR, the Danish Agency for Labour Market and Recruitment | Every system, Jobnet included, from a pure Microsoft platform to open source as code | Hetzner, with Scaleway and OVHcloud on standby | Nine months, on time, 65–70 % cheaper, 2025 |
| City of Copenhagen | The data science and web teams’ platform, Kubernetes | Scaleway | 48-month framework won in a public tender, 2025 |
| City of Aarhus, ITK | About 50 solutions | Azure → Hetzner | Cloud bill cut by two thirds, 2025 |
| Plecto, Aarhus | The whole platform | AWS → Scaleway | 2025 |
| KeepFocus / Wise Home | About 40 microservices for 450 customers | Own servers → Scaleway managed Kubernetes | A team of five, 2023 |
| CapaSystems, Taastrup | Endpoint management SaaS | Own servers → Scaleway | 100,000 devices, 100 customers |
| Elvium, Copenhagen | HR and recruitment platform | Scaleway | 2026 |
No C25 company has done anything comparable; the largest have chosen the hyperscalers’ “sovereign” editions. For them the conversation is a different one: not about moving, but about being able to.
The Kvarters migration
Kvarters is an energy-sharing platform built on .NET, PostgreSQL and Angular, with seven applications as containers. It ran on Azure for about 3,900 euro a month.
We compared eight European providers against the actual estate. Scaleway in Amsterdam won under every weighting: everything Kvarters runs had a home, with two exceptions we state openly: the message queue runs through a third party until Scaleway brings it to Amsterdam, and CI cannot log in without a key because there is no OIDC federation.
The move was built as one provider-neutral module, names, tags and the catalogue of the seven apps, on top of one thin module per cloud. The Azure module is kept as proven, retired code. The applications, the database schema and the release model were not touched.
In production in Amsterdam since 4 October 2026. From first commit to production: five weeks.
The full analysis will be published here once it is written up.
What it costs and how long it takes
The assessment gives the number for your estate. As a bearing: a system with a few bounded contexts moves in weeks; Kvarters took five. What moves the price is the number of systems, the volume of data, and how many proprietary services need a replacement.