ENTERPRISE GUIDE · ANY SOURCE → STACKIT
Cloud migration to STACKIT: the complete enterprise guide
Migrating to STACKIT is seven pieces of work, not one project plan: read the estate, classify every resource, decide what the code cannot, build the landing zone, build the target, move data, cut over and retire. StackToIT turns the first four into files you can review. This guide orders all seven and names the file that carries each.
The seven phases
The STACKIT Migration Framework describes four phases: assess, design and mobilize, migrate and run. The seven below split the same road into units a team can staff, and tie each to what a StackToIT run writes.
1 · Read the estate
A standard assessment reads Terraform or OpenTofu, or a VMware RVTools export, on your own machine. Output: assessment.json with every unit, plus counts of resources, modules and conditional units. See the discovery guide for how to read it.
2 · Classify every resource
Each unit gets a class, a confidence, a STACKIT target and a stated reason. The class tells you how much work it is; the reason tells you why. See the classes below.
3 · Decide what code cannot
Sizes, endpoints, identity, data class and recovery point are not in the source. They become records in decisions.json and templates in review/ that you fill and feed to the next run.
4 · Build the landing zone
Organization, project, roles and network come before any workload. The run writes migration/landing-zone-requirements.md from the draft, so the platform team knows what to provide before the first apply.
5 · Build the target and move data
Apply the drafted STACKIT Terraform in a test project, then move data by a method you choose. The engine never moves data; it lists every stateful unit and holds the choice open.
6 · Cut over in waves
Units are ordered by dependency into waves. The cutover steps, verification and rollback conditions sit in execution-plan.json and execution/.
7 · Retire and operate
Retire the source only after the checks, then run the target. The plan carries retirement as steps of its own, so it is not forgotten.
What the source platforms have in common
| Workload type | Source services | STACKIT target and class |
|---|---|---|
| Servers | EC2, Azure VMs, Compute Engine, Elastic Cloud Server, Elastic Compute Service, Compute Instances, VMware VMs | Compute Engine · RECONFIGURE |
| Kubernetes | EKS, AKS, GKE, CCE, ACK, OKE | SKE · REPLATFORM |
| Relational databases | Amazon RDS and Aurora, Azure SQL and PostgreSQL, Cloud SQL, Huawei RDS, ApsaraDB RDS | PostgreSQL Flex, MariaDB, SQLServer Flex · REPLATFORM |
| Object storage | S3, Storage accounts, Cloud Storage, OBS, OSS, Object Storage | STACKIT Object Storage · RECONFIGURE (AWS S3 may be DIRECT, Azure Storage accounts are REPLATFORM) |
| Caches | ElastiCache, Azure Cache for Redis, Memorystore, DCS, ApsaraDB for Redis | Key Value Store (Valkey) · RECONFIGURE (ElastiCache and Memorystore may be REPLATFORM) |
| Message queues | SQS, Service Bus, Pub/Sub, DMS for RabbitMQ | STACKIT RabbitMQ · REPLATFORM |
| Functions | Lambda, Functions, Cloud Run, FunctionGraph, Function Compute | SKE or Cloud Foundry · CONTAINERIZE (Azure Functions may be REPLATFORM) |
| Warehouses and NoSQL | DynamoDB, Cosmos DB, BigQuery, Spanner, MaxCompute | MongoDB Flex, PostgreSQL Flex, a lakehouse or a self-managed platform · REDESIGN (Cosmos DB may be REPLATFORM) |
Curated mappings per source cloud; the class is the typical one, and your run decides per unit from configuration. Identity and firewalls are decided case by case.
What the classes mean for effort
The classifications come from the public documentation. The figures are from the published AWS Retail Store run: 44 units.
RECONFIGURE · 34 units
A corresponding capability exists and needs configuration changes: networks, security groups, secrets, logs, load balancers. Mostly Terraform plus review.
REPLATFORM · 9 units
The workload moves to a different platform model: the ECS services to SKE, the RDS clusters to PostgreSQL Flex and STACKIT MariaDB, OpenSearch to STACKIT OpenSearch.
REDESIGN · 1 unit
Architectural change: in the Retail run, the DynamoDB table, for which the draft is an alternative on MongoDB Flex, not an equivalent.
CONTAINERIZE and MANUAL_REVIEW
Containerize moves a function or app into containers. Manual review marks a question an architect must resolve before the plan can proceed.
DIRECT and BLOCKED
Direct means a direct mapping. Blocked means the evaluated path cannot be completed as proposed; the Retail run had none.
Waves and the landing zone
From the published AWS Retail Store run. Left: wave 1 of migration/technical-sequencing.md, the units that depend on nothing else. Right: the organization and project requirements the run lists before the first apply.
## Wave 1 — 9 unit(s)
| Unit | Module | Class | Target |
|---|---|---|---|
| `module.dependencies.module.dynamodb_carts.aws_dynamodb_table.this` | `module.dependencies.module.dynamodb_carts` | REDESIGN / MEDIUM | STACKIT MongoDB Flex (alternative — data-model redesign; PostgreSQL Flex JSONB is the other option) |
| `module.retail_app_ecs.aws_cloudwatch_log_group.ecs_tasks` | `module.retail_app_ecs` | RECONFIGURE / MEDIUM | STACKIT Logs |
| `module.retail_app_ecs.aws_ecs_cluster.cluster` | `module.retail_app_ecs` | REPLATFORM / MEDIUM | STACKIT Kubernetes Engine (SKE) |
| `module.retail_app_ecs.aws_kms_key.cmk` | `module.retail_app_ecs` | RECONFIGURE / MEDIUM | STACKIT KMS |
| `module.retail_app_ecs.module.carts_service.aws_iam_role.task_execution_role` | `module.retail_app_ecs.module.carts_service` | RECONFIGURE / MEDIUM | STACKIT service account for the workload |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role.task_execution_role` | `module.retail_app_ecs.module.checkout_service` | RECONFIGURE / MEDIUM | STACKIT service account for the workload |
| `module.retail_app_ecs.module.ui_service.aws_iam_role.task_execution_role` | `module.retail_app_ecs.module.ui_service` | RECONFIGURE / MEDIUM | STACKIT service account for the workload |
| `module.vpc.module.vpc.aws_eip.nat` | `module.vpc.module.vpc` | RECONFIGURE / MEDIUM | implicit (belongs to the NAT gateway) |
| `module.vpc.module.vpc.aws_vpc.this` | `module.vpc.module.vpc` | RECONFIGURE / MEDIUM | STACKIT project networking / Network Area (SNA) |## 1. Organization
- A STACKIT organization that the people who carry out the migration belong to, with a project in it that holds everything the draft creates. The plans state no organization name or id; none is assumed.
- The draft takes the project from the variable `project_id`: STACKIT project ID the migrated resources are created in. It has no default: a person supplies it.
## 2. Project
- The project existsWaves come from dependencies
A unit moves after every unit it depends on, and units in one wave can move in parallel. The Retail run has nine waves; the file calls them a starting point for the architect, not a schedule.
The landing zone is read from the draft
Requirements are derived from the drafted blocks and the plans. A line marked unknown is a value the run does not know, not a gap in the document.
Variables without values are the hand-off
The draft has 60 variables, and 48 automated steps wait for a value such as project_id. Supplying them is the first real task of the platform team.
What a run writes
- index.html
- The assessment workspace, opened in a browser
- assessment.json
- Every unit: class, confidence, target, reason, review
- decisions.json
- Open decisions with options, owner role and phase
- terraform/
- The STACKIT Terraform draft with review comments
- migration/
- Waves, landing zone requirements, data movement, the migration plan
- execution-plan.json, execution/
- Ordered steps for Terraform, APIs and manual work, with checks
- review/
- Templates for inputs and decisions you fill in
- manifest.json
- The files of the run and their checksums for stacktoit verify
Proven on a real AWS estate
The AWS Retail Store Sample App, a public Terraform project from AWS, assessed by StackToIT and published in full, exactly as the run wrote it.
View Case Study- 282
- Terraform resource declarations analyzed
- 44
- migration units identified
- 38
- target units generated, from 52 considered
- 331
- plan steps written
What stays with your team
Data movement
StackToIT never moves data. Choose the method from size, change rate and tolerated downtime.
Approval
The package is a proposal. Architect approval is recorded by you, and the engine never asserts that a draft is safe to apply.
Application behaviour
Dependencies between applications, cutover timing and test criteria come from the owners of the workloads.
Parts that need a redesign
NoSQL, warehouses and some platform services have no equivalent. The run says which and drafts the closest alternative where one exists.
Questions enterprise teams ask
Where do we start?
With an assessment of the code that defines your estate. Open the summary first, then the classes, then the decisions. The first-assessment page of the documentation walks through the order.
Which sources can we migrate from?
Terraform and OpenTofu for AWS, Azure, Google Cloud, Huawei Cloud, Alibaba Cloud and Oracle Cloud, and VMware RVTools exports.
Does the Terraform run as it is?
It is a draft. Variables must be filled, decisions answered and the result reviewed. In the published Retail run no step runs as written until values are supplied.
How long does a migration take?
That depends on your redesign share, data volumes and people; the files give no durations. The class mix and the open decisions are the best early indicator of effort.
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.