AZURE → STACKIT · CUTOVER-RUNBOOK

Azure zu STACKIT: Cutover- und Rollback-Runbook

Schalten Sie in der Reihenfolge um, die der Lauf aus den Abhängigkeiten berechnet, geben Sie jedem Schritt einen Verantwortlichen und eine Prüfung, und kennen Sie den Rückweg, bevor Sie anwenden. Das Runbook bindet die Schritte an die Dateien eines StackToIT-Laufs und kennzeichnet allgemeine Praxis. Der Lauf führt nie ein Cutover aus.

Was der Lauf liefert und was nicht

Eine kleine Portal-Umgebung (VM, PostgreSQL, Storage Account, Key Vault und Netzwerk) wurde am 4. November 2026 bewertet. Sechs Einheiten, drei Wellen.

  1. Wellen aus Abhängigkeiten

    migration/technical-sequencing.md ordnet die Einheiten nach ihren Abhängigkeiten. Einheiten einer Welle können parallel umziehen. Es ist ein Ausgangspunkt, kein Zeitplan.

  2. Verantwortliche und Prüfungen

    execution/README.md führt die Schritte der Reihe nach mit einer Rolle auf, und execution/verify/checks.md nennt Prüfungen vor und nach jedem Schritt.

  3. Rollback je Schritt

    Der Ausführungsplan sagt für jeden OpenTofu-Schritt, ob er sich rückgängig machen lässt. Für manuelle Schritte hält er fest, dass die ausführende Person den Rückweg dokumentiert.

  4. Keine Cutover-Fakten

    Der Lauf fand keinen DNS-Eintrag, keine Neubindung öffentlicher Adressen und keine Zertifikatseinheit für das Cutover. Das heißt nicht, dass nichts umziehen muss: Namen, Adressen und Zertifikate außerhalb der gescannten Quelle bleiben unsichtbar.

Sequenzierung und Apply-Befehle

Links die drei Wellen des Laufs, rechts die Befehle, die das Ausführungspaket für den Entwurf nennt.

Wellenmigration/technical-sequencing.md
## Wave 1 — 4 unit(s)

| Unit | Class | Target |
|---|---|---|
| `azurerm_key_vault.portal` | RECONFIGURE / MEDIUM | STACKIT Secrets Manager (+ KMS for keys) |
| `azurerm_postgresql_flexible_server.portal` | REPLATFORM / MEDIUM | STACKIT PostgreSQL Flex |
| `azurerm_storage_account.docs` | REPLATFORM / MEDIUM | STACKIT Object Storage |
| `azurerm_virtual_network.app` | RECONFIGURE / MEDIUM | STACKIT project networking / Network Area (SNA) |

## Wave 2 — 1 unit(s)

| Unit | Class | Target |
|---|---|---|
| `azurerm_subnet.vm` | RECONFIGURE / MEDIUM | STACKIT network |

## Wave 3 — 1 unit(s)

| Unit | Class | Target |
|---|---|---|
| `azurerm_linux_virtual_machine.portal` | RECONFIGURE / MEDIUM | STACKIT Compute Engine |
Befehleexecution/README.md
cd terraform
tofu init
tofu validate
tofu plan -out=stackit.tfplan
tofu apply stackit.tfplan
  • Nicht wie geschrieben anwenden

    Alle 7 OpenTofu-Schritte dieses Laufs sind als im aktuellen Plan nicht ausführbar markiert, und das Paket rät, erst anzuwenden, wenn jeder OpenTofu-Schritt ausführbar ist. Nutzen Sie den Entwurf als Basis für ein Testprojekt, nicht für das Produktivfenster.

  • Zuerst die Variablen

    Sechs Variablen brauchen vor den Schritten einen Wert: Projekt-ID, erlaubte CIDRs der Datenbank, Storage-Klasse, Maschinentyp, Image-ID und Größe des Boot-Volumes.

Das Runbook

Schritte in Reihenfolge. Die verantwortlichen Rollen sind die, die der Lauf nennt. Schritte mit dem Vermerk „Praxis“ sind allgemeines Vorgehen, keine Ausgabe des Laufs.

SchrittVerantwortlich und PrüfungRollback
1. Kritische Einstellungen klären. Resource-Group-Zuordnung, Datenbank-Login, Erreichbarkeit im Netzwerk, Boot-Image und Datenträgertyp entscheiden.Identity-, Network-, Platform- und Security-Architect. Prüfung: assurance/critical-semantics.json nennt für jede Einstellung, warum sie offen ist und was sie schließt.Noch nichts angelegt; den Entscheidungseintrag zurücknehmen.
2. Projekte festlegen und Variablen befüllen.Identity Architect. Prüfung: die Zeilen „variable supplied“ in execution/verify/checks.md.Noch nichts angelegt.
3. Netzwerk (aus dem Subnetz, Welle 2), Secrets-Manager-Instanz und Bucket anlegen (Einheiten aus Welle 1).Network-, Identity-, Storage-Architect. Prüfung: Die Ressource steht im State.tofu destroy -target für Netzwerk und Secrets-Manager-Instanz; beim Bucket gehen seither geschriebene Objekte verloren.
4. PostgreSQL-Flex-Instanz anlegen und ihre ACL einschränken.Data Architect. Prüfung: Die Instanz steht im State; testen Sie, dass nur die gelisteten CIDRs sie erreichen (Praxis).tofu destroy -target; seither geschriebene Daten gehen verloren. Siehe den Hinweis zum Löschen weiter unten.
5. Daten kopieren (Praxis). Der Lauf wählt kein Verfahren. PostgreSQL zieht mit pg_dump und pg_restore oder logischer Replikation um; Objekte ziehen mit rclone um.Data- und Storage-Architect. Prüfung: Zeilen- und Objektzahlen stimmen überein (Praxis).Die Quelle bleibt unangetastet; die Kopie verwerfen.
6. Secrets in der Secrets-Manager-Instanz neu anlegen und den Clients ihre Zugangsdaten geben (Praxis).Identity Architect. Prüfung: Jede Anwendung liest ihr Secret.Angelegte Secrets löschen; der Key Vault besteht weiter.
7. Server mit Schlüsselpaar und Netzwerkschnittstelle anlegen (Welle 3). Für Schlüsselpaar und Schnittstelle nennt der Plan keine Rolle; legen Sie eine fest.Platform Architect. Prüfung: Der Server steht im State; ein Login mit dem neuen Schlüssel funktioniert (Praxis).tofu destroy -target; das Boot-Volume wird im Entwurf mit dem Server gelöscht.
8. Cutover proben (Praxis).Platform Architect. Prüfung: Ein Ende-zu-Ende-Test läuft auf STACKIT ohne Produktivlast durch.Die Probekopie verwerfen.
9. Cutover (Praxis). Schreibstopp setzen, letzte Synchronisation ausführen, Clients umstellen, DNS umstellen, sofern Sie es verwalten.Alle Verantwortlichen, eine Leitung. Prüfung: Smoke-Tests, Fehlerraten und Datenzahlen.Clients wieder auf Azure richten; die Quelle wurde nicht verändert.
10. Halten, dann die Quelle stilllegen (Praxis).Platform Architect. Prüfung: Eine vereinbarte Haltefrist verstreicht ohne Rollback.Nach der Stilllegung bedeutet Rollback eine Wiederherstellung; halten Sie die Frist daher lang genug.

Die Zeilen 1 bis 4 und 7 folgen dem Lauf. Die Zeilen 5, 6, 8, 9 und 10 sind allgemeine Praxis und hängen von Datenmenge und tolerierter Ausfallzeit ab, die die Quelle nicht nennt. OpenTofu wendet den ganzen Entwurf in einem Lauf an und ordnet die Blöcke nach ihren Referenzen; wer die Zeilen 3, 4 und 7 nacheinander anlegen will, setzt dafür selbst -target (Praxis).

Rollback und Prüfungen, wie der Lauf sie schreibt

Links die Rollback-Einträge zweier OpenTofu-Schritte, ein Auszug aus execution-plan.json mit den Werten, wie der Lauf sie geschrieben hat. Rechts die Prüfungen, die das Paket für die Zeit nach den Schritten nennt.

Rollback zweier Schritteexecution-plan.json
{
  "actions": [
    {
      "id": "TF/stackit_network.vm",
      "rollback": [
        {
          "capability": "AVAILABLE",
          "how": "tofu destroy -target=stackit_network.vm, or remove the block and apply"
        }
      ]
    },
    {
      "id": "TF/stackit_postgresflex_instance.portal",
      "rollback": [
        {
          "capability": "PARTIAL",
          "how": "tofu destroy -target=stackit_postgresflex_instance.portal, or remove the block and apply; what was written to it since it was created is lost"
        }
      ]
    }
  ]
}
Nach jedem Schrittexecution/verify/checks.md
## After each step

- [ ] `TF/stackit_network.vm` · `resource-exists` `address=stackit_network.vm` — `stackit_network.vm` exists in the STACKIT project (OpenTofu's state lists it).
- [ ] `TF/stackit_key_pair.portal` · `resource-exists` `address=stackit_key_pair.portal` — `stackit_key_pair.portal` exists in the STACKIT project (OpenTofu's state lists it).
- [ ] `TF/stackit_secretsmanager_instance.migrated_secrets` · `resource-exists` `address=stackit_secretsmanager_instance.migrated_secrets` — `stackit_secretsmanager_instance.migrated_secrets` exists in the STACKIT project (OpenTofu's state lists it).
- [ ] `TF/stackit_objectstorage_bucket.docs` · `resource-exists` `address=stackit_objectstorage_bucket.docs` — `stackit_objectstorage_bucket.docs` exists in the STACKIT project (OpenTofu's state lists it).
- [ ] `TF/stackit_postgresflex_instance.portal` · `resource-exists` `address=stackit_postgresflex_instance.portal` — `stackit_postgresflex_instance.portal` exists in the STACKIT project (OpenTofu's state lists it).
- [ ] `TF/stackit_network_interface.portal_1` · `resource-exists` `address=stackit_network_interface.portal_1` — `stackit_network_interface.portal_1` exists in the STACKIT project (OpenTofu's state lists it).
- [ ] `TF/stackit_server.portal` · `resource-exists` `address=stackit_server.portal` — `stackit_server.portal` exists in the STACKIT project (OpenTofu's state lists it).
  • AVAILABLE und PARTIAL

    AVAILABLE heißt: Ein Destroy des Blocks macht den Schritt rückgängig (hier 4 Schritte). PARTIAL heißt dasselbe, doch was seither hineingeschrieben wurde, geht verloren (3 Schritte: Bucket, Datenbank und Server). Die 14 manuellen Schritte nimmt die Person zurück, die sie ausführt.

  • Die Prüfungen sind Existenzprüfungen

    Die sieben Nachprüfungen bestätigen, dass eine Ressource im OpenTofu-State steht. Daten, Logins und Verkehr prüfen sie nicht; ergänzen Sie also eigene Tests.

Rollback-Regeln vor dem Fenster vereinbaren

  • Den Punkt ohne Rückkehr festlegen

    Vor der letzten Synchronisation lässt sich alles zurücknehmen. Schreiben Clients erst auf STACKIT, bedeutet Rollback, Daten zurückzukopieren (Praxis).

  • Die Datenbankinstanz schützen

    STACKIT hält fest: Das Löschen einer PostgreSQL-Flex-Instanz ohne Instanzschutz führt mit API v3 zu sofortigem, dauerhaftem Datenverlust. Aktivieren Sie den Schutz, bevor Sie sich auf Destroy verlassen.

  • Keine In-place-Wiederherstellung

    PostgreSQL Flex stellt durch Klonen eines Backups in eine neue Instanz wieder her; die Clients müssen daher dorthin umgestellt werden. Planen Sie das in jeden Wiederherstellungsschritt ein.

  • Manuelle Schritte brauchen einen schriftlichen Rückweg

    Bei manuellen Schritten weiß der Plan nicht, wie sie rückgängig zu machen sind. Die ausführende Person hält fest, wie.

  • Die Quelle bis zum Ende der Haltefrist behalten

    Löschen Sie Azure-Ressourcen nicht im selben Fenster wie das Cutover (Praxis).

Fragen zu Cutover und Rollback

Führt StackToIT das Cutover aus?

Nein. StackToIT schreibt nur Dateien. Jeden Schritt führt eine Person, OpenTofu oder ein Skript aus, das eine Person startet.

Kann ich den Entwurf im Cutover-Fenster anwenden?

Nicht in dem Stand, den der Lauf zeigt. Er markiert jeden OpenTofu-Schritt als noch nicht ausführbar, und 14 manuelle Schritte warten auf Personen. Wenden Sie zuerst in einem Testprojekt an.

Welches Werkzeug überträgt die Daten?

Der Lauf lässt das Verfahren offen. Die STACKIT-Dokumentation hat ein Tutorial, das einen Bucket mit rclone kopiert, und die Engine nennt für PostgreSQL pg_dump und pg_restore oder logische Replikation.

Wie lang sollte die Haltefrist sein?

Ihre Wiederherstellungsziele entscheiden. STACKIT dokumentiert für PostgreSQL Flex Backups mit Point-in-Time-Recovery; vergleichen Sie deren Aufbewahrung mit der gewünschten Frist.

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.