KainSkep
Case StudyAI SaaS platform, Europe

Rebuilding a Live AI Platform on a Second Cloud

A parallel build validated against a real copy of production, cut over by a single DNS change, with the original environment kept live as a rollback path rather than retired on cutover day.

  • Cloud Migration
  • AI Platform Re-architecture
  • Infrastructure as Code
  • Zero Window Cutover
Zero
Maintenance windows requiredAll three application services served production traffic for the entire duration of the build, and development, UAT and production kept shipping throughout. The original environment stayed live by design, so the cutover never depended on a window that did not exist.
One
User-facing change in the whole migrationA DNS change redirected traffic, which is one of the few operations in this work that is genuinely reversible in minutes. Not a rewrite, not a redeploy, not a coordinated release. Everything else happened alongside the running system.
Three
Services re-platformed independentlyEach kept its own release cadence, task definitions, execution roles, health checks and scaling policy. The service boundaries were a product decision taken years earlier for unrelated reasons, and they mapped onto the target cluster model without being renegotiated.

Overview

A multi-service, AI-driven SaaS platform had been running in production on one hyperscaler long enough to have real users, settled release cadences and operational habits built around it. It was rebuilt in full on a second hyperscaler in a European region, entirely through reusable infrastructure as code.

The interesting part is not that it moved. It is what the estate was made of. Close to half of it was managed AI: a hosted large language model service, a managed search and retrieval service, speech to text, and text and image embedding models. Those were not background infrastructure. They were the product.

That distinction shaped the plan. A database migration can be proved correct by comparing schemas, row counts, indexes, roles and query plans. A retrieval layer cannot. If relevance drops by a fifth, nothing fires and the first real signal is a slow decline in how much users trust the answers they get.

The Context

A European AI SaaS platform, live and mature rather than greenfield, organized into six functional layers: edge and security, containerized application workloads, database and storage, AI services, data and machine learning services, and security and operations.

Inside the application layer, three services deployed independently within a single container environment, each with its own release cadence and operational footprint. That separation had been a product decision made years earlier for reasons that had nothing to do with cloud portability, and it turned out to be the most valuable property of the existing design.

The client, the platform vendors, the region and the product services are not named, at the client’s request.

The Challenge

The brief pulled in three directions at once, and the hardest of them had no alarm attached to it.

The AI stack could not be lifted. The hosted model service, managed search, speech to text and both embedding models were woven into how each application service behaved. Reproducing the platform meant re-establishing that behavior on a different provider, under a different API surface, with different model families underneath.

The system stayed live throughout, which ruled out any approach depending on a maintenance window from the first day. And delivery could not pause: the build and deploy pipeline was itself part of what had to migrate, not something to reconnect once the infrastructure landed.

  • Managed AI services that were the product rather than the plumbing
  • Three services serving production traffic for the whole build
  • Development, UAT and production all still shipping
  • A pipeline that had to move while it was in use

What Was at Stake

Five things had to hold at once, and they were not independent of each other. Users depended on all three services daily, so there was no acceptable downtime to migrate into. A poorly reproduced embedding or retrieval architecture degrades relevance quietly, which is arguably worse than an outage because an outage tells you it happened. If the new build surfaced problems late, the organization needed a real way back rather than a rushed reconstruction of an environment already decommissioned. The new network design had to match or exceed the isolation already around the application and database tiers, because migrations regress posture quietly in the name of speed and it is rarely noticed until an audit. And a migration that freezes the roadmap for a quarter carries a cost that never appears in the migration budget.

Our Role

Kainskep ran the migration end to end, from assessment through cutover and pipeline handover. That included assessing the existing estate across all six layers as a set of behaviors to preserve rather than a resource inventory to copy; designing the target architecture across two availability zones and encoding it entirely in reusable modules parameterized per environment; re-platforming all three application services; owning the AI and data workstream and the rebuilt retrieval architecture; executing the database migration and its validation; running the phased cutover; and keeping the original environment intact as a live rollback path.

The Approach

Two separations carried the plan. Both are about refusing to collapse a decision that deserves to stay two decisions.

01

Separate what can be verified from what can only be judged

Ask of each component: if this were reproduced badly, how would anyone find out? For networking, compute, the database and the pipeline the answer is mechanical. Connections fail, deployments break, queries return the wrong count. For model integration and retrieval the answer was that nobody would find out quickly, so those became a separate workstream with a different definition of done, exercised against real content and reviewed on output rather than on configuration.

02

Separate infrastructure migration from traffic migration

The new environment was built and stood up in full alongside the existing one, with a real copy of the production database restored into it. Application behavior, database connectivity, integrations and AI functionality were validated on the new platform before any traffic pointed at it. Collapsing these two into a single event is what makes migrations frightening.

03

Move traffic with the most reversible mechanism available

Cutover was a DNS change. Not a rewrite, not a redeploy, not a coordinated release. The original environment stayed live by design rather than by oversight, serving as both rollback path and reference implementation, and was not switched off the moment the new one worked.

04

Repeat the validation per environment

Build, deploy, test and validate, run independently in development, UAT and production, with each stage advancing only on its own evidence.

The Solution

A private-by-default target, provisioned entirely as code, with a deliberate separation of tiers and no direct path from the internet to anything that holds data.

Four network tiers, one direction of travel

A public tier holding only the load balancer and NAT gateway, a private application tier for the container cluster and its services, a private data tier reachable only from the application security group, and a private endpoint tier for platform connectivity and flow logs.

No shortcut to the data

Public traffic reaches the load balancer, the load balancer reaches the application tier, the application tier reaches the database. There is no direct path from the internet to the application tier or the database at any point in that chain, and administrative access runs through federated single sign-on or a client VPN rather than the public application path.

A rebuilt AI and retrieval layer

The hosted model service, managed search, speech to text and both embedding models were mapped onto the target provider, with retrieval and vector search rebuilt to preserve behavior rather than only API compatibility. This is the part that was rebuilt rather than moved, and saying so plainly matters more than making the migration sound smooth.

Infrastructure as reusable modules

Network, container platform, database, global services, serverless functions and shared primitives, parameterized per environment, which closed the configuration drift that had accumulated between development, UAT and production.

What We Delivered

Infrastructure defined as code

Network across two availability zones, load balancer, NAT, container cluster, managed database, private endpoints and security groups, in modules reusable across all three environments.

Three re-platformed services

Each running as an independent container service with its own task definitions and scaling policy.

A migrated, validated database

Schema, data, indexes, roles and query performance verified on the target before any traffic depended on it.

A rebuilt AI and retrieval layer

Model and embedding integration rebuilt on the target provider, designed to preserve retrieval and semantic search behavior.

A modernized delivery pipeline

Source control to image registry to container service, replacing the incumbent deployment path entirely.

A live rollback environment

The original estate retained deliberately as a fallback and reference point rather than decommissioned on cutover day.

Outcomes

The three-service structure carried over with no loss of application or AI capability. Application and database tiers hold no direct internet exposure, with all public traffic passing through the web application firewall and load balancer and administrative access separated through single sign-on and VPN. Reusable modules now cover the entire environment, closing the drift that had accumulated between environments. No maintenance window was required at any point, and the DNS cutover stayed reversible.

What is not published here is any measure of whether retrieval quality changed. The rebuild was designed to preserve behavior and was reviewed on output, but a before-and-after relevance metric was not produced, and inventing one would defeat the point of the section that says so.

  • Functional parity across all three services
  • No direct internet path to application or database tiers
  • Full infrastructure-as-code coverage across three environments
  • A cutover that stayed reversible

What This Page Does Not Cover

Deliberately, in the interest of being accurate rather than complete: calendar dates or durations for each phase; figures for AI infrastructure credits or any cost comparison between the two platforms; infrastructure module source, access policy documents or other implementation-level artefacts; model-level evaluation metrics comparing retrieval and search accuracy before and after the rebuild; and a decommissioning date for the original environment, which was deliberately deferred and remains open by design.

The client, the platform vendors, the region and the product services are withheld at the client’s request.

Related Capabilities

The disciplines this engagement drew on, and where each is described in full.

Cloud Infrastructure

Target architecture, network design and private-by-default tiering, encoded as reusable modules rather than provisioned by hand.

Cloud infrastructure engineering

AI Engineering

Rebuilding retrieval, embeddings and vector search across model providers where the objective is preserved behavior rather than API compatibility.

AI engineering for production systems

DevOps & Automation

Repointing build and deploy pipelines across registries and clusters while the pipeline itself stays in daily use.

Delivery and operations engineering

Cloud Security & Compliance

Demonstrating security parity by walking the security group chain rather than asserting equivalence.

Cloud security and compliance readiness

Moving a System That Cannot Stop?

The question worth settling early is which parts of your estate can be proved correct and which can only be judged. Those need different plans, and finding out which is which is a short piece of work compared with discovering it during a cutover.

Discuss Your Challenge