Pattern — lift and shift a VM estate onto Google Cloud, with the decisions named

The end-to-end handoff for moving VMs from AWS, Azure or vSphere: assess with measured utilisation, land in a prepared project and network, migrate with the host/target split, then re-platform as a named follow-on. With the known-bad configurations that make a lift-and-shift permanent.

markdownpatternv1WE5R-CT3Kstage: deploytrust: officialfamily: migrationservice: migrate-to-virtual-machinesinterface: anylift and shiftVM estatemigrate to virtual machineshost projecttarget projectright-sizingwaveszonal diskre-platformegressknown-bad configuration

Created 21 Oct 2026 · Modified 23 Oct 2026 · 1 version

Lift and shift a VM estate

The handoff

source: vSphere | AWS | Azure | Google Cloud VMware Engine
   │
   ├─ 1. ASSESS      Migration Center → inventory WITH utilisation, network dependencies, waves
   │
   ├─ 2. PREPARE     target project(s) · one GLOBAL VPC with regional subnets · firewall rules
   │                 quota increases requested · zones chosen · disk family chosen
   │
   ├─ 3. MIGRATE     host project controls  →  target project receives
   │                 target = Compute Engine VMs + Persistent Disk / Hyperdisk volumes
   │
   └─ 4. RE-PLATFORM  a NAMED follow-on project, not an implied one

Assessment detail: guides/migration/assess-before-you-move.md. The estimate method: guides/parity-and-migration-method.md.

The decisions, and where each is documented

DecisionMade atDocument
machine series and shapestep 2reference/compute/compute-engine.md — custom types exist only for N and E series, and cost more
zonestep 2reference/overview/regions-zones-and-locations.md — a zonal disk must share its instance's zone, and does not move
disk familystep 2reference/storage/persistent-disk-and-hyperdisk.md — Hyperdisk performance is independent of size, Persistent Disk's is not
network shapestep 2reference/networking/vpc.md — one global VPC with a subnet per region, not one network per region
host / target project splitstep 3reference/migration/migrate-to-virtual-machines.md §2
wave boundariesstep 1from the network dependency graph, never the org chart

Known-bad configurations

1. Sizing from provisioned capacity instead of measured utilisation

Why it is bad: most estates are provisioned at several times their usage. Lifting the provisioned shape carries that waste onto a cloud where it is billed by the second. Migration Center's inventory includes performance metrics precisely so this is avoidable, and right-sizing is usually the largest single saving in the whole project.

2. One VPC network per region, mirroring the source

Why it is bad: a Google Cloud VPC is global. Reproducing N regional networks also reproduces the transit object you no longer need, and then you pay to connect networks that would have been one. Build one network with a subnet per region (guides/parity/networking.md §2).

3. An auto-mode network

Why it is bad: auto mode's ranges all come from 10.128.0.0/9, so they collide with every other auto-mode network — including the one you will later need to peer with. Custom mode, with a planned address space.

4. Closing egress last

A fresh VPC is implied deny on ingress and implied allow on egress. A lifted estate therefore arrives with unrestricted outbound.

Why it is bad: it is the opposite of most on-premises postures, and the moment to fix it is while the estate is still being built — not after the first review.

5. Choosing the zone after the migration has started

Why it is bad: a zonal disk "must be in the same zone" as its instance and does not move zones. Fixing it afterwards is a copy, not a reconfiguration.

6. Waves drawn by team

Why it is bad: two chatty systems land in different waves and their traffic crosses clouds at egress rates for as long as the gap lasts. This is the most expensive avoidable planning error in a migration.

7. Treating re-platforming as implied

Why it is bad: a lift-and-shift is the cheapest migration and the most expensive destination. The estate arrives with its old sizing, its old patching model and its old operating model. Write re-platforming into the plan as its own project with its own number, or it will be discovered as a surprise when the invoice arrives.

What this pattern deliberately does not describe

The replication cycle, the test clone and the cut-over mechanics. The architecture page read for this release does not detail them in the content read, and they are exactly what a cut-over window depends on. Read the product's own lifecycle pages before scheduling one, and treat any remembered sequence as unverified (reference/migration/errors.md).

Verification, per wave

TestExpected
the migrated VM boots and its application answersyes, before cut-over
the instance and all its disks are in the same zoneyes
egress rules are explicit, not implied-allowyes
the wave's systems can still reach their dependenciesyes — and if a dependency is in a later wave, you have found a wave boundary error
the destination quota was sufficientyes. If the wave half-failed, §3 of reference/migration/errors.md
measured utilisation after the movecompared against step 1's figure. That comparison is the input to the next wave's sizing

Read this document as markdown — the same bytes an agent receives.