ORACLE CLOUD → STACKIT · COMPLETE GUIDE

The complete Oracle Cloud to STACKIT migration guide

Start with the Terraform you already have for Oracle Cloud. StackToIT reads it, classes every resource, and writes the assessment, the architect report, the wave order and the manual work packages. You then build the landing zone, move in waves, move the data and cut over. This guide follows that order on one real run over a mixed estate of eleven resources.

The migration in nine steps

Each step names the file of the run that holds the answer.

  1. 1. Collect the Terraform

    Gather every root module that declares Oracle Cloud resources. StackToIT reads Terraform and OpenTofu and does not connect to your tenancy.

  2. 2. Run the assessment

    One command produces the whole package. The console summary tells you how many units there are and what is left to people.

  3. 3. Read the architect report

    engineering/architect-report.md gives each unit a class, a confidence, a target and the reason, with the settings left to you.

  4. 4. Fix the owners and decisions

    execution/manual/actions.md and migration/work-packages.csv name an owner role per package. review/decisions.yaml and inputs.yaml take your answers.

  5. 5. Build the landing zone

    STACKIT organisation, projects and the network come first. Network units sit in the early waves.

  6. 6. Build in waves

    migration/technical-sequencing.md orders the units by dependency. Units of one wave can move in parallel.

  7. 7. Move the data

    migration/data-movement.md lists every stateful unit and the decisions still open. Choose a mechanism per unit.

  8. 8. Cut over

    Switch clients to the new endpoints and credentials, with the source kept as the way back.

  9. 9. Retire the source

    Verify the target, then switch off the OCI resources, in reverse dependency order.

Step 2: run the assessment

A mixed demo estate written for this guide: a VCN with two private subnets, a network security group, a compute instance with a block volume, a load balancer, a PostgreSQL DB system, a bucket, a cache cluster and an IAM policy. The run is from 4 November 2026. The first pane is the command as it was run, from inside the demo's input folder; the other panes are lines copied from the console output of that run: the source line, the target lines and the class counts.

Commandterminal
# run from inside the demo's input folder; the output folder sits next to it
stacktoit assess . ../out --offline --no-validate
Console: sourceconsole
Source        11 resources · 11 units · visibility: Complete
Console: targetconsole
TARGET
Migration     0 drafted · 11 manual (of 11 units the draft considered)
Console: classesconsole
DIRECT              0  
RECONFIGURE         9  ████████████████████████ 81%
REPLATFORM          1  ██ 9%
CONTAINERIZE        0  
REDESIGN            0  
MANUAL_REVIEW       1  ██ 9%
  • 11 resources, 11 units

    Every resource is its own unit here. Nine are RECONFIGURE, one is REPLATFORM and one is MANUAL_REVIEW. Ten carry MEDIUM confidence and one, the IAM policy, LOW.

  • Nothing drafted, and said so

    The console reports 0 drafted and 11 manual. For an Oracle estate this build writes no STACKIT resource block; the value is the assessment, the order and the work packages.

  • Offline and unvalidated

    The run used --offline and --no-validate, so the source was checked by built-in checks only. With a lock file and a provider mirror you can add OpenTofu validation of the source.

Step 3: how the estate maps

Oracle resourceSTACKIT targetMigration class
VCNSTACKIT network; Network Area where routing is neededReconfigure
Subnets (app, data)STACKIT networks with their own address rangesReconfigure
Network security groupSTACKIT security group; rules rewrittenReconfigure
Compute instanceSTACKIT Compute Engine server, volumes and network interfacesReconfigure
Block volumeSTACKIT Block Storage volumeReconfigure
Load balancerSTACKIT Application Load BalancerReconfigure
PostgreSQL DB systemSTACKIT PostgreSQL FlexReplatform
Object Storage bucketSTACKIT Object Storage with an S3 APIReconfigure
Cache clusterSTACKIT Key Value Store (Valkey)Reconfigure
IAM policySTACKIT roles and service accounts, mapped by your architectArchitect decision

Classes as the run decided them: nine units RECONFIGURE (the two subnets share a row), one REPLATFORM, one MANUAL_REVIEW.

Reading a unit: the compute instance

The compute instance as written (lines 54 to 74 of main.tf) and the result the run recorded for it, an excerpt of assessment.json with the values exactly as the run wrote them. assessment.json is written as a single line, so the pane shows selected fields of each unit, indented and nested as in the file, with the values unchanged.

Example input: instancemain.tf
resource "oci_core_instance" "web" {
  compartment_id      = var.compartment_id
  availability_domain = var.availability_domain
  display_name        = "web-01"
  shape               = "VM.Standard.E5.Flex"

  shape_config {
    ocpus         = 2
    memory_in_gbs = 16
  }

  source_details {
    source_type = "image"
    source_id   = var.image_id
  }

  create_vnic_details {
    subnet_id = oci_core_subnet.app.id
    nsg_ids   = [oci_core_network_security_group.app.id]
  }
}
StackToIT assessmentassessment.json
[
  {
    "id": "oci_core_instance.web",
    "result": {
      "class": "RECONFIGURE",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT Compute Engine"
      },
      "reason": "A compute instance becomes a STACKIT server. The shape becomes a STACKIT flavor, the image is rebuilt or imported, and the attached volumes and network interfaces move with it."
    }
  }
]
  • The shape becomes a flavor

    The instance runs the shape VM.Standard.E5.Flex with 2 OCPUs and 16 GB. On STACKIT the shape becomes a flavor, and the image is rebuilt or imported.

  • Attached things move with it

    Volumes and network interfaces are part of the server’s move, which is why the instance waits for the subnet and the group.

Reading a unit: database and bucket

The PostgreSQL DB system as written (lines 96 to 120 of main.tf), and the result for it and for the bucket, an excerpt of assessment.json with the values exactly as the run wrote them. assessment.json is written as a single line, so the pane shows selected fields of each unit, indented and nested as in the file, with the values unchanged.

Example input: DB systemmain.tf
resource "oci_psql_db_system" "orders" {
  compartment_id = var.compartment_id
  display_name   = "orders"
  db_version     = "16"
  shape          = "PostgreSQL.VM.Standard.E5.Flex.2.32GB"
  instance_count = 2

  network_details {
    subnet_id = oci_core_subnet.data.id
  }

  storage_details {
    is_regionally_durable = true
    system_type           = "OCI_OPTIMIZED_STORAGE"
  }

  credentials {
    username = "orders_admin"

    password_details {
      password_type = "PLAIN_TEXT"
      password      = "change-me"
    }
  }
}
StackToIT assessmentassessment.json
[
  {
    "id": "oci_psql_db_system.orders",
    "result": {
      "class": "REPLATFORM",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT PostgreSQL Flex"
      },
      "reason": "Managed PostgreSQL to managed PostgreSQL: data moves with pg_dump/pg_restore or logical replication, and the shape becomes a Flex flavor."
    }
  },
  {
    "id": "oci_objectstorage_bucket.media",
    "result": {
      "class": "RECONFIGURE",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT Object Storage"
      },
      "reason": "A bucket becomes a STACKIT Object Storage bucket with an S3 API. Clients change endpoint and credentials; lifecycle, replication and access rules are rewritten."
    }
  }
]
  • Managed to managed

    The database is the only REPLATFORM unit. The run points to pg_dump and pg_restore or logical replication, and says the shape becomes a Flex flavor.

  • Buckets change endpoint

    A bucket gets an S3 API on STACKIT. Clients change endpoint and credentials, and lifecycle, replication and access rules are rewritten.

Step 6: the waves

The run orders the eleven units into three waves from their dependencies.

  1. Wave 1

    The VCN, the block volume, the IAM policy and the bucket: the units that depend on nothing.

  2. Wave 2

    The security group and the two subnets.

  3. Wave 3

    The instance, the load balancer, the PostgreSQL DB system and the cache cluster, which need the network.

Steps 4 and 7: the decisions you own

The run proposes. These items stay with people, and the run says so.

  • Four data units, no mechanism

    The volume, the bucket, the database and the cache are stateful. Their mechanism is UNKNOWN, with the data class, the recovery point and the downtime tolerance not provided.

  • Seven work packages, five roles

    The 11 manual steps fall into 7 packages with owners: Network Architect, Identity Architect, Data Architect, Storage Architect and Platform Architect. Each package can be started now.

  • The public address changes

    The load balancer’s listeners, backends and certificates are rewritten, and its public address changes. DNS and client allow-lists are yours.

  • Reachability is designed

    On STACKIT a network reaches the internet outbound through source NAT, and inbound reachability needs a public IP address. The public or private role of each subnet is reviewed.

  • Identity is rebuilt

    The OCI policy has no document-level counterpart. People and workloads are mapped to STACKIT roles and service accounts.

Questions migration leads ask

Does StackToIT need access to our Oracle Cloud tenancy?

No. It reads Terraform and OpenTofu root modules that use the oracle/oci provider, and nothing connects to your tenancy.

Do we get STACKIT Terraform for an Oracle estate?

Not on this build. The run writes the assessment, the architect report, the sequencing, the data movement file and the manual work packages; your team writes the STACKIT definitions from them.

Which part is the hardest?

Databases and anything that holds state. The run marks the mechanism for each stateful unit as undecided, because the size of the data and the downtime you can accept are not in the Terraform.

How long does the migration take?

The run gives no time estimate. It gives an order and the work packages; the duration depends on data size, the number of applications and how fast decisions are made.

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.