ORACLE CLOUD → STACKIT · TUTORIAL

Der OCI-Terraform-Ablauf: vom Root-Modul zum Prüfpaket

Dieses Tutorial führt ein kleines Oracle-Cloud-Root-Modul vom Ordner auf der Platte bis zu den Dateien, die Ihre Architekten prüfen. Sie committen eine Lock-Datei, starten einen Befehl, lesen die Konsolenzusammenfassung, beantworten die zwei Anfragen, die der Lauf als blockierend markiert, und starten erneut. Die Demo-Umgebung wurde für diese Seite geschrieben und am 4. November 2026 bewertet; jeder Ausschnitt stammt aus diesem Lauf. Für eine Oracle-Cloud-Quelle klassifiziert und ordnet der Lauf jede Einheit; die STACKIT-Ressourcen selbst baut Ihr Team.

Der Ablauf in sechs Schritten

Wichtiger als die Reihenfolge ist die Gewohnheit, vor jedem nächsten Schritt zu lesen, was der letzte festgehalten hat.

  1. 1. Lock-Datei committen

    StackToIT liest Terraform- und OpenTofu-Root-Module mit dem Provider oracle/oci und verbindet sich nie mit einem Tenant. Die Zuordnungen wurden gegen Version 9.11.0 dieses Providers geprüft. Committen Sie .terraform.lock.hcl neben das Modul: Fehlt der Lock-Eintrag für oci, meldet der Lauf, dass die Provider-Version eines Plans nicht belegt ist, und begrenzt jede Einheit auf Konfidenz MEDIUM.

  2. 2. Bewertung starten

    Rufen Sie stacktoit assess im Ordner des Moduls mit dessen Pfad auf. Der Demo-Lauf nutzte zusätzlich --offline, das ausgehende Netzwerkzugriffe verbietet; die Dokumentation führt es bei den Quelloptionen auf, neben --var-file, --provider-mirror und --validate-source.

  3. 3. Konsolenzusammenfassung lesen

    Die Zusammenfassung nennt gescannte Ressourcen, gefundene Einheiten und die Klassenverteilung. Im Demo-Lauf waren es 4 Ressourcen: 3 sicher vorhandene Einheiten (VCN, Subnetz, Bucket) und 1 bedingte Einheit, der Instanzblock, dessen Anzahl von einer Variablen abhängt. Die Quellvollständigkeit lautet deshalb RUNTIME_TOPOLOGY_PARTIAL.

  4. 4. Blockierende Anfragen beantworten

    Der Lauf schreibt inputs-template.yaml. Zwei Anfragen sind als blockierend markiert: die STACKIT-Region (eu01 oder eu02) und der Wert der Root-Variablen app_names. Kopieren Sie die Datei, füllen Sie die value-Zeilen aus und übergeben Sie sie mit --inputs. Vier weitere Anfragen, etwa das Zielprojekt, stehen am Ende als in diesem Build nicht anwendbar, jeweils mit dem Ort, an dem die Einstellung stattdessen erfolgt.

  5. 5. Erneut mit demselben Ausgabeordner ausführen

    Der nächste Lauf liest Ihre Antworten. Wollen Sie beide Läufe vergleichen, geben Sie --keep-previous an: Laut Dokumentation bleibt der frühere Lauf dann in OUT/previous-<run id>/ erhalten. Liefern Sie app_names zusätzlich per --var-file, damit die Instanzeinheit keine Voraussetzung mehr ist.

  6. 6. Bericht prüfen, dann aufbauen

    Öffnen Sie engineering/architect-report.md und migration/technical-sequencing.md. Für eine Oracle-Cloud-Quelle enthält der Ordner terraform/ nur die Provider- und Variablendateien; Ihr Team schreibt die STACKIT-Ressourcen anhand des Berichts und initialisiert, validiert und plant sie gegen ein Testprojekt. StackToIT selbst führt nie apply aus.

Eine variablengesteuerte Ressource, bewertet

Links: der Instanzblock der Demo-Eingabe, genau wie geschrieben. Rechts: der Datensatz, den der Lauf dazu in assessment.json führt. Drei Server entstehen aus einem Block, daher trägt die Einheit instances: 3, und der Datensatz nennt den Grund, warum sie nur bedingt vorhanden ist. Da assessment.json in einer einzigen Zeile geschrieben ist, zeigt der Ausschnitt ausgewählte Felder jeder Einheit, eingerückt und so verschachtelt wie in der Datei, mit unveränderten Werten.

Beispieleingabemain.tf
resource "oci_core_instance" "app" {
  for_each            = toset(var.app_names)
  compartment_id      = var.compartment_id
  availability_domain = var.availability_domain
  display_name        = each.key
  shape               = "VM.Standard.E5.Flex"

  shape_config {
    ocpus         = 1
    memory_in_gbs = 8
  }

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

  create_vnic_details {
    subnet_id = oci_core_subnet.app.id
  }
}
StackToIT-Bewertungassessment.json
{
  "id": "oci_core_instance.app",
  "presence": "CONDITIONAL",
  "presence_cause": {
    "kind": "root-variable-overridable",
    "where": "for_each",
    "expr": "toset(var.app_names)",
    "variables": [
      "var.app_names"
    ]
  },
  "instances": 3,
  "wave": 0,
  "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."
  }
}
  • Standardwerte werden gelesen, nicht blind übernommen

    Die Variable app_names hat als Standardwert drei Namen (web-01, web-02, worker-01); deshalb zählt der Lauf drei Instanzen und hält den Zustand als „mit Standardwerten vorhanden“ fest. Weil eine Variablendatei, -var oder TF_VAR_app_names den Standardwert überschreiben kann, steht die Einheit auf CONDITIONAL mit der Ursache root-variable-overridable.

  • Eine Voraussetzung, keine Vermutung

    technical-sequencing.md führt die Einheit unter den Voraussetzungen außerhalb der Wellen und nennt die Abhilfe: den Variablenwert mit --var-file liefern. Der Standardwert gilt nicht als Antwort; wave 0 im Datensatz heißt, dass sie noch keiner Welle angehört.

  • Klasse und Ziel bleiben lesbar

    Der Server wird ein STACKIT-Server auf Compute Engine, Klasse RECONFIGURE. Die Shape wird ein Flavor, das Image wird neu gebaut oder importiert, und angehängte Volumes und Netzwerkschnittstellen ziehen mit.

Wo im Ausgabeordner welche Antwort steht

index.html
Die Ansicht Einheit für Einheit, offline im Browser lesbar.
assessment.json
Jede Einheit mit Klasse, Konfidenz, Ziel, Begründung, Welle, Vorhandensein und den Einstellungen, die bei Ihnen bleiben.
engineering/architect-report.md
Pro Einheit: Ziel, Begründung, kritische Einstellungen und Warnungen, dazu die Validierungsmatrix.
migration/technical-sequencing.md
Wellen aus den Abhängigkeiten und die Voraussetzungen, die keiner Welle angehören.
migration/data-movement.md
Zustandsbehaftete Einheiten, für die eine Person das Verfahren für den Datenumzug wählen muss.
execution/manual/actions.md
Die manuellen Schritte in Arbeitspaketen mit Verantwortlichem und Abschlussbedingung.
inputs-template.yaml
Die Fragen des Laufs als Vorlagen zum Ausfüllen und Zurückgeben.
review/
Bearbeitbare Kopien: decisions.yaml, inputs.yaml, progress.yaml und target-values.tfvars.
terraform/
Bei einer Oracle-Cloud-Quelle nur terraform.tf, variables.tf und eine README: keine STACKIT-Ressourcenblöcke.

Die zwei Anfragen, die den Lauf blockieren

Beide Vorlagen stammen aus inputs-template.yaml des Demo-Laufs. Links: die Region mit den zwei Optionen, die der Lauf anbietet. Rechts: der Wert der Root-Variablen app_names.

Regionsanfrageinputs-template.yaml
  # target.region (TARGET_SELECTION, request state OPEN)
  # needed: The STACKIT region the migrated estate is built in.
  - id: INP-TSE-1eaf5b60fa62
    kind: TARGET_SELECTION
    topic: target.region
    scope:
      profile: default
    # options: eu01 | eu02
    value: ""                # pick one of the options above
    # explanation: why you chose this (optional; remove the # to write it)
    answered_by: CUSTOMER_ARCHITECT   # a role, not a person
    answered_at: "2026-11-04"   # YYYY-MM-DD
    recorded_with:
      basis_digest: sha256:94a1663bf63dd33750f12f962a5adedcc2bf291ebf4b101eee03238a48e95e54
Variablenanfrageinputs-template.yaml
  # source.variable (SOURCE_PARAMETER, request state OPEN)
  # needed: The value the running environment gives the root variable app_names, which the source sets only as a default that a variable file or the command line can override.
  - id: INP-SPA-5bd4d3b73362
    kind: SOURCE_PARAMETER
    topic: source.variable
    scope:
      profile: default
      subject: app_names
    value: ""                # fill one value
    # explanation: why you chose this (optional; remove the # to write it)
    answered_by: CUSTOMER_ARCHITECT   # a role, not a person
    answered_at: "2026-11-04"   # YYYY-MM-DD
    recorded_with:
      basis_digest: sha256:9ba8056e684e8cca3711c1ee31ff62a5a4e562be04ff3b7c83ee925980b200c5
  • Zuerst die Region beantworten

    Die Vorlage sagt es selbst: Anfragen, die von der Region abhängen, werden bis zur Antwort aus dem eu01-Katalog abgeleitet. Wählen Sie eu02, wird eine für eu01 erfasste Antwort als STALE_CATALOG markiert, nicht angewendet und erneut erfragt.

  • Einen Wert eintragen, die Bindung nicht anfassen

    Eine leer gelassene Vorlage ist weder Antwort noch Fehler: Die Anfrage bleibt offen, und die ausgefüllten Antworten gelten trotzdem. id, kind, topic, scope und recorded_with binden die Antwort an diese Quelle und diese Wissensbasis; ändern Sie sie nicht.

  • Rollen statt Personen

    answered_by nimmt eine Rolle wie CUSTOMER_ARCHITECT, answered_at den Tag der Antwort. In der optionalen explanation-Zeile halten Sie die Begründung für die nächste Prüfung fest.

Was aus den vier Ressourcen wurde

OCI-RessourceSTACKIT-ZielKlasse und Welle
oci_core_vcn.mainSTACKIT-NetzwerkRECONFIGURE, Welle 1
oci_objectstorage_bucket.assetsSTACKIT Object StorageRECONFIGURE, Welle 1
oci_core_subnet.appSTACKIT-NetzwerkRECONFIGURE, Welle 2
oci_core_instance.app (3 Instanzen)STACKIT Compute EngineRECONFIGURE, Voraussetzung

Alle vier haben Konfidenz MEDIUM: Ohne Lock-Eintrag für oci ist das die Obergrenze. Der Ordner terraform/ enthält für keine davon einen Ressourcenblock; der Oracle-Cloud-Adapter klassifiziert und ordnet die Einheiten, die STACKIT-Seite baut Ihr Team.

Was Sie ändern, bevor Sie etwas anwenden

  • Quelle festlegen und validieren

    Committen Sie die Lock-Datei und stellen Sie die Provider-Pakete über --provider-mirror oder einen Plugin-Cache bereit; laut Dokumentation braucht die Validierung außerdem OpenTofu im PATH und eine Sandbox ohne Netzwerkzugriff auf dem Host, heruntergeladen wird dabei nichts. Im Demo-Lauf wurde die OpenTofu-Prüfung der Quelle übersprungen (LOCK_FILE); die eingebauten Prüfungen liefen. Das ist weder ein Bestehen noch ein Scheitern der Quelle.

  • Provider authentifizieren

    Wenn Ihr Team die STACKIT-Ressourcen schreibt, braucht es einen Service Account. Die Dokumentation des STACKIT-Providers 0.121.0, der Version, die der Lauf festlegt, nennt zwei Wege der Authentifizierung: Workload Identity Federation und den Key-Flow mit einem Service-Account-Key. Der Provider versucht zuerst Workload Identity Federation und sucht Zugangsdaten im Provider-Block, dann in Umgebungsvariablen, dann in einer Credentials-Datei. Richten Sie auch ein State-Backend ein; deklariert ist keines.

  • Die 4 Einheiten entscheiden

    Alle vier liegen bei Ihnen: Der Lauf schreibt dafür keinen Block. Bauen Sie die STACKIT-Gegenstücke anhand der Ziele im Bericht (Netzwerk, Object Storage, Compute Engine) oder halten Sie fest, dass eine keines braucht.

  • Die Zahlen richtig lesen

    Die Konsole meldet 12 von 12 bestandenen Invarianten; 9 davon prüften nichts, weil keine Ressource erzeugt wurde. Das ist eine leere Prüfung, keine Zusicherung.

Fragen vor dem ersten Lauf

Braucht der Lauf Zugriff auf unseren Oracle-Cloud-Tenant?

Nein. Er liest die Terraform- oder OpenTofu-Dateien des Root-Moduls und verbindet sich nicht mit einem Tenant. Werte, die erst zur Planzeit feststehen, etwa eine überschriebene Variable, werden in der Antwortdatei erfragt.

Warum nennt die Zusammenfassung 3 Einheiten bei 4 gescannten Ressourcen?

Die 3 sind die sicher vorhandenen Einheiten: VCN, Subnetz und Bucket mit je einer Instanz. Die vierte Ressource, der Instanzblock, zählt getrennt als 1 bedingte Einheit, weil ihr for_each von einer Variablen abhängt. Der Klassenbalken (RECONFIGURE 3) zählt nur die sicheren Einheiten; die bedingte wäre ebenfalls RECONFIGURE.

Brauchen wir OpenTofu?

Nicht für die Bewertung selbst. Laut Dokumentation dient OpenTofu der Quellvalidierung, wenn Sandbox und Provider-Pakete verfügbar sind. Der Demo-Lauf fand OpenTofu 1.13.1, übersprang die Quellprüfung aber mangels Lock-Datei; die eingebauten Prüfungen liefen trotzdem.

Schreibt der Lauf STACKIT-Terraform für eine Oracle-Cloud-Quelle?

Nein. Für Oracle Cloud enthält der Ordner terraform/ nur die Provider- und Variablendateien. Der Nutzen des Laufs liegt in Klassifizierung, Zielen, Wellen und offenen Fragen; daraus bauen Ihre Architekten die STACKIT-Ressourcen.

Quellen

Ihr nächster Schritt: STACKIT.

Erzählen Sie uns von Ihrer Umgebung. Wir zeigen Ihnen, was StackToIT dafür liefert: Zielarchitektur, Terraform-Artefakte und einen strukturierten Migrationsplan.