GOOGLE CLOUD → STACKIT · LANDING ZONE DESIGN
GCP projects and Shared VPC: designing the STACKIT landing zone
The design question is not where a single resource goes but how the project boundary moves. A Google Cloud project becomes a STACKIT project, a folder becomes a folder, and a Shared VPC, where a host project lends subnets to service projects, becomes a Network Area with a network per project. StackToIT classes the Shared VPC link as a redesign and leaves the hierarchy to you.
What the design has to settle
Four questions come out of a Google Cloud organisation. The run raises each one as a decision, not as a default.
Hierarchy
Which folders and projects exist on STACKIT, and which of the source projects share one. The run lists hierarchy and project placement as open settings of every folder and project.
Network ownership
Who owns the subnets that other teams use. In Shared VPC the host project owns them and service projects use them; on STACKIT each project has its own networks.
Access
Who may use which network. On Google Cloud this is a role on the host project or on a subnet; on STACKIT it becomes role assignments and security groups.
Region and billing
The draft places every unit in one STACKIT region and project. A billing account link and the Google APIs enabled in a project have no counterpart in the STACKIT project resource.
Three ways to lay it out
The first row follows the mapping the run proposes; the others are choices an architect can make instead. Facts about Shared VPC come from the Google Cloud documentation, facts about STACKIT from its network documentation.
| Option | What it keeps and what it costs | When it fits |
|---|---|---|
| Mirror the hierarchy, join projects in a Network Area | Folders and projects stay as they are. The host and service split becomes a Network Area with a network per project; member project routers exchange routes and security groups control traffic between projects. You re-create who may use which subnet as project boundaries and role assignments. | Several teams, clear ownership, and workloads that must reach each other over private addresses. |
| Collapse to one project per environment | Fewest moving parts: one project holds the networks and servers of an environment. You lose the project as a boundary between teams, so separation moves to security groups and role assignments. | A small estate, one platform team, or a first pilot. |
| Mirror the projects, connect by public IP | Projects stay isolated by default; cross-project traffic then needs public addresses, because without a Network Area only public IP connectivity links projects. You keep strict separation and accept internet-facing paths between them. | Projects that exchange little traffic and need hard isolation. |
The STACKIT documentation says projects are isolated by default and that cross-project traffic needs a Network Area or public IP connectivity. The architecture page adds that a Network Area operates within a single region; the concepts page calls it a global resource that you enable per region, with traffic between regions currently over the public internet.
A Shared VPC estate and what the run wrote for it
An estate written for this page and assessed by StackToIT on 4 November 2026: a folder, a network host project, an application project, the Shared VPC link between them, one shared subnetwork and a VM in the application project. Left: the Shared VPC blocks of the input with the shared network and subnetwork. Right: the only resource blocks the run drafted; the review comments above each block are left out here.
resource "google_compute_shared_vpc_host_project" "host" {
project = google_project.net_host.project_id
}
resource "google_compute_shared_vpc_service_project" "app" {
host_project = google_compute_shared_vpc_host_project.host.project
service_project = google_project.app_team.project_id
}
resource "google_compute_network" "shared" {
project = google_project.net_host.project_id
name = "shared"
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "app" {
project = google_project.net_host.project_id
name = "app"
network = google_compute_network.shared.id
region = "europe-west3"
ip_cidr_range = "10.30.0.0/24"
}resource "stackit_network" "app" {
project_id = var.project_id
name = "app"
ipv4_prefix = "10.30.0.0/24"
ipv4_nameservers = var.default_ipv4_nameservers
}resource "stackit_network_interface" "worker_1" {
project_id = var.project_id
network_id = stackit_network.app.network_id
}
resource "stackit_server" "worker" {
project_id = var.project_id
name = "worker-1"
machine_type = var.worker_machine_type
availability_zone = var.availability_zone
boot_volume = {
source_type = "image"
source_id = var.worker_image_id
size = 50
delete_on_termination = true
}
network_interfaces = [stackit_network_interface.worker_1.network_interface_id]
}Subnet and VM are drafted
The subnetwork becomes a STACKIT network with the same range, the VM a server with its network interface.
Folder, projects and the Shared VPC link are not
The run writes no block for them. Each is a manual step of the plan, with the settings that decide it listed: hierarchy, project placement, project identifier, host and service project identity.
Everything lands in one project
The draft creates every resource in one project and region, set by variables. The run says the source sets the project from two different places and that you must decide how the projects map.
What the run decided for each unit
Ten resources were scanned and seven became migration units. The two IAM bindings (network user on the subnet, editor on the application project) are support resources the run reviews but writes nothing for; the service project link is not a unit of its own either.
| Google Cloud resource | STACKIT target in the run | Migration class |
|---|---|---|
| Folder | STACKIT folder, placed by a parent; STACKIT documents one folder level as of November 2026, and the run says roles on a folder apply to its projects | Reconfigure |
| Projects (host and application) | STACKIT project, with labels carried over; billing account and enabled APIs have no counterpart | RECONFIGURE, low confidence |
| Shared VPC host project | STACKIT Network Area, with a network per project | REDESIGN, low confidence |
| VPC network | Project networking; the run needs no resource of its own for it | RECONFIGURE, low confidence |
| Subnetwork | STACKIT network with the same IPv4 range | RECONFIGURE, low confidence |
| VM | STACKIT server | RECONFIGURE, low confidence |
Six of the seven units sit at low confidence. Each refers to a folder or project the draft does not create, and the run notes that what such a reference becomes is not assessed; the provider is also not pinned by a lock file.
Decisions the architect owns
Each item is a manual step or open setting in execution/manual/actions.md and engineering/architect-report.md.
Project mapping
Decide whether the source projects become one STACKIT project or several, and confirm the project the network is created in. The run asks exactly this for the subnetwork.
Folder and project placement
Create the folders and projects by hand or with your own Terraform; the draft contains no block for them.
Network Area scope
Decide which networks join an area. Ranges of networks in an area are taken from the area’s ranges, so plan the address space first.
Access translation
In the example the app team holds the network user role on the subnet app only, and editor on its own project. Re-create both as STACKIT role assignments; the run lists role bindings at project level as an open setting of the application project and keeps the subnet binding for review.
Egress path
The run could not prove how the subnet reaches the internet, because the VM has no external address and no NAT is seen. Decide the outbound design for the new network.
Region and residency
Confirm the one STACKIT region for the whole estate. The run maps no Google region to a STACKIT region and asks a person to confirm that the chosen region keeps the residency europe-west3 gave; zones are chosen the same way.
Questions platform teams ask
Does a Google Cloud project map to a STACKIT project?
Yes, that is the mapping StackToIT proposes: a project becomes a STACKIT project, a folder a folder. Billing links and enabled APIs do not carry over, and the draft does not create the projects; you place them.
What replaces a Shared VPC?
A Network Area with a network per project. The host project lends subnets to service projects on Google Cloud; on STACKIT every project owns its networks, and the area connects them through a transfer network.
Why does the run write so little Terraform here?
Because the landing zone is mostly decisions. Only the subnetwork and the VM were drafted; the folder, the projects and the Shared VPC link are manual steps that an architect settles first.
Can we start with one project and split later?
Yes, as a first step. The collapse option has the fewest moving parts, and the run does not prevent it. Moving workloads between projects later is work you plan, so choose the boundary with the teams in mind.
Sources
Your next move: STACKIT.
Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.