Strategie & Migration

Cloud Exit: So holst du Workloads zurück ins eigene Rechenzentrum

Der Rückweg ist teurer als der Hinweg, vor allem wegen der Datenausleitung und der Managed Services, für die du plötzlich selbst Betrieb brauchst. Rechne mit Personal, nicht nur mit Hardware, sonst kippt die Ersparnis im zweiten Jahr.

5 Kapitel mit allen Befehlen
IT-Entscheider besprechen eine Infrastruktur-Roadmap im Besprechungsraum
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Seit 1997 am Markt Präsenz & Live-Online 4,9 aus 503 Google-Bewertungen Auch Inhouse für dein Team
Worum es geht

Warum der Rückweg aus der Public Cloud gerade jetzt auf dem Tisch liegt

Die meisten Cloud-Migrationen der letzten Jahre waren Lift-and-Shift. Virtuelle Maschinen sind umgezogen, die Architektur ist geblieben, und mit ihr die Rechnung für Compute, Block-Storage, Snapshots, NAT-Gateways und Datentransfer. Wenn die Last vorhersehbar und dauerhaft ist, verliert das Argument der Elastizität seine Kraft, denn du zahlst rund um die Uhr für Kapazität, die du auch selbst vorhalten könntest. Dazu kommen regulatorische Fragen aus NIS2, DORA und der Diskussion um Souveränität, die IT-Leitung und Geschäftsführung zwingen, den Ausstiegspfad überhaupt beschreiben zu können.

Der typische Fehler ist, den Cloud Exit als reine Umzugsaufgabe zu behandeln. Der eigentliche Aufwand steckt nicht im Kopieren der VM-Images, sondern in den Managed Services drumherum. Eine RDS-Instanz, ein S3-Bucket mit Lifecycle-Regeln, eine IAM-Struktur, ein Loadbalancer mit verwalteten Zertifikaten und eine zentrale Log-Pipeline haben im eigenen Rechenzentrum kein Gegenstück, das man einfach anklickt. Für jeden dieser Bausteine brauchst du einen Betreiber, ein Backup-Konzept, ein Monitoring und jemanden, der nachts erreichbar ist.

Der zweite Fehler ist die Kostenrechnung, die nur die Cloud-Rechnung gegen den Hardwarepreis stellt. Realistisch gehören Rack, Strom, Kühlung, Netzanbindung, redundante Standorte, Ersatzteile, Wartungsverträge, Lizenzen und vor allem Personal in die Gegenüberstellung. Umgekehrt wird beim Ausstieg oft der einmalige Aufwand unterschätzt: Datenexport, Parallelbetrieb über mehrere Monate und die Umstellung von Deployment-Pipelines, die auf Cloud-APIs gebaut sind. Wer diese Posten offen auf den Tisch legt, kommt am Ende zu einer belastbaren Entscheidung, egal in welche Richtung sie ausfällt.

Miniatur-Szene: Spielbrett, auf dem eine Server-Figur von einer alten auf eine neue Plattform zieht, daneben eine Roadmap
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt

Cloud Exit in sechs Etappen

  1. 01 Workloads und Abhängigkeiten erfassen
  2. 02 Vollkosten beider Seiten rechnen
  3. 03 Zielarchitektur festlegen
  4. 04 Plattform aufbauen und automatisieren
  5. 05 Daten replizieren und in Wellen umschalten
  6. 06 Betrieb, Backup und Notfallplan schärfen
Was du mitnimmst

Der Weg zurück ins eigene Rechenzentrum, Schritt für Schritt

Ein Cloud Exit gelingt, wenn du ihn wie ein Migrationsprojekt mit klarer Zielarchitektur führst und nicht wie eine Kündigung. Diese Punkte bilden das Vorgehen ab, das sich in der Praxis bewährt hat.

Workloads inventarisieren und ehrlich bewerten

Erfasse jede Anwendung mit ihren Abhängigkeiten, ihrem Lastprofil und ihrer Datenmenge. Klassische VMs, Datenbanken mit stabilem Volumen und Batch-Verarbeitung wandern gut zurück. Alles, was stark schwankende Spitzen hat oder tief an proprietären Diensten hängt, gehört auf eine eigene Liste und wird bewusst entschieden, statt aus Prinzip mitgenommen zu werden.

Zielarchitektur festlegen statt Produkt kaufen

Die tragfähige Zielarchitektur besteht aus drei Ebenen: einer Virtualisierungsplattform für die klassischen VMs, einem verteilten Storage für Block, Datei und Objekt sowie einer Container-Plattform für alles, was schon cloud-nativ gebaut ist. Proxmox VE mit Ceph deckt die ersten beiden Ebenen ab, Kubernetes die dritte. Mit KubeVirt kannst du beides zusammenführen und VMs auf derselben Control Plane betreiben wie Container.

Cloud-Dienste durch betreibbare Gegenstücke ersetzen

Für jeden Managed Service brauchst du eine Entscheidung: PostgreSQL oder MariaDB statt RDS, MinIO oder Ceph RGW mit S3-Schnittstelle statt S3, HAProxy oder NGINX statt des verwalteten Loadbalancers, Prometheus, Grafana und Loki statt CloudWatch. Wichtig ist weniger das Produkt als die Frage, wer es patcht, sichert und im Störfall wiederherstellt.

Automatisierung mitnehmen, nicht neu erfinden

Terraform und Ansible funktionieren im eigenen Rechenzentrum genauso wie in der Cloud, nur mit anderen Providern und Inventories. Wenn deine Provisionierung heute schon als Code vorliegt, ist ein großer Teil der Arbeit getan. Fehlt sie, ist der Cloud Exit der richtige Zeitpunkt, sie einzuführen, statt Server wieder von Hand aufzusetzen.

Netz, Datenexport und Egress früh planen

Der Datentransfer ist der Posten, der Zeitpläne kippt. Kläre früh, wie viel Volumen wirklich bewegt werden muss, ob der Anbieter die Egress-Gebühren beim vollständigen Ausstieg erlässt, und ob eine Direktverbindung oder ein physischer Transport sinnvoller ist als der Weg über das Internet. Ein Erstsync mit anschließender Replikation hält die eigentliche Umschaltung kurz.

In Wellen migrieren und den Rückweg offenhalten

Beginne mit einer unkritischen Anwendung, die den kompletten Stack durchläuft, von Deployment über Backup bis Monitoring. Erst wenn eine Welle im Betrieb stabil läuft, folgt die nächste. Halte für jede Welle einen definierten Rollback bereit und kündige die Cloud-Ressourcen erst, wenn der Betrieb vor Ort über einen vollständigen Backup- und Restore-Zyklus getragen hat.

Tutorial

Rückmigration in fünf Etappen: Inventar, Plattform, Daten, Umschaltung, Betrieb

Der technische Teil eines Cloud Exit ist beherrschbar, wenn du ihn in der richtigen Reihenfolge angehst: erst das Inventar samt Kostenpositionen, dann die eigene Plattform, dann die Daten, und die Umschaltung erst ganz am Schluss. Jede Etappe hat einen Prüfschritt und einen Rückweg, denn ohne Rückweg wird aus dem Wartungsfenster eine Nachtschicht.

01

Inventar und Kostenpositionen aus der Cloud ziehen

Zwei Datenquellen bestimmen den Aufwand: was läuft, und wofür du zahlst. Die zweite Quelle ist die ehrlichere, denn sie zeigt die Managed Services, für die du künftig selbst Betrieb brauchst.

Was läuft und was davon als Code beschrieben ist
# AWS: Instanzen mit Typ, Zustand und Namens-Tag
aws ec2 describe-instances \
  --query 'Reservations[].Instances[].[InstanceId,InstanceType,State.Name,Tags[?Key==`Name`].Value|[0]]' \
  --output table

# Azure: dasselbe in kurz
az vm list -d -o table

# Der einfache Teil der Migration ist der, der schon als Code existiert
terraform state list | wc -l
terraform state list | grep -c 'aws_db_instance\|aws_s3_bucket'

Alles, was nicht im terraform state steht, ist von Hand entstanden und nirgends dokumentiert. Diese Objekte bestimmen die Migrationsdauer, nicht die Anzahl der virtuellen Maschinen.

Zieh anschließend die Kostenaufstellung der letzten zwölf Monate und markiere drei Positionen: Data Transfer Out zeigt dir, was die Datenausleitung kosten wird, NAT Gateway und Cross-Zone-Traffic zeigen dir Architekturentscheidungen, die du im eigenen Netz nicht nachbauen musst, und jeder Managed Service ist eine Betriebsaufgabe, die künftig dein Team übernimmt. Genau diese dritte Spalte wird in Wirtschaftlichkeitsrechnungen regelmäßig vergessen.

02

Die Zielplattform aufsetzen, bevor irgendetwas umzieht

Bau nicht die Cloud nach. Bau eine Plattform, die dein Team betreiben kann, und behalte die Automatisierung, die du schon hast.

Cloud-Image als Template, cloud-init bleibt wie gehabt
# Dasselbe Image, dasselbe cloud-init wie in der Cloud, nur lokal
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2

qm create 9000 --name debian13-tmpl --memory 2048 --net0 virtio,bridge=vmbr0
qm importdisk 9000 debian-13-genericcloud-amd64.qcow2 local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0
qm set 9000 --serial0 socket --vga serial0
qm template 9000

# Klon mit denselben Nutzerdaten wie im Cloud-Rollout
qm clone 9000 120 --name app01 --full
qm set 120 --ciuser deploy --sshkeys ~/.ssh/id_ed25519.pub --ipconfig0 ip=dhcp

cloud-init ist der Hebel, der die Migration günstig macht: Deine bestehenden User-Data laufen über die NoCloud-Datenquelle unverändert weiter. Lift and Shift ganzer Disk-Images lohnt dagegen selten, weil du dabei auch den ungepflegten Zustand mitnimmst.

Managed Service, Gegenstück und die neue Betriebsaufgabe

Cloud-DienstBetreibbares GegenstückWas du zusätzlich selbst machst
Objektspeicher (S3)MinIO oder Ceph RGW, beide S3-kompatibelKapazitätsplanung, Erweiterung, Backup der Buckets
Managed PostgreSQLPostgreSQL mit Patroni und pgBackRestFailover üben, Restore testen, Minor-Updates einspielen
Managed KubernetesRKE2, k3s oder OpenShiftControl-Plane-Updates, Ingress, Zertifikatserneuerung
Load BalancerHAProxy oder nginx mit keepalivedvirtuelle IP, Health-Checks, TLS-Rotation
Cloud-MonitoringPrometheus mit Grafana, Loki für LogsAufbewahrungsdauer, Speicherplatz, Alarmregeln
Secrets-DienstHashiCorp Vault oder OpenBaoUnseal-Prozess, Sicherung der Schlüssel, Rotation
03

Daten ausleiten: Objektspeicher und Datenbanken

Objektdaten kopierst du in zwei Läufen, den großen vorab und das Delta im Fenster. Datenbanken ziehst du über logische Replikation um, damit das Fenster Minuten statt Stunden dauert.

Objektspeicher mit rclone übertragen
# Erst messen, dann kopieren: Menge und Objektzahl bestimmen die Dauer
aws s3 ls --summarize --human-readable --recursive s3://prod-assets | tail -3

# rclone spricht beide Seiten, MinIO ist S3-kompatibel
rclone sync s3:prod-assets minio:prod-assets \
  --transfers 16 --checkers 32 --fast-list --progress

# Zweiter Lauf im Wartungsfenster holt nur das Delta
rclone sync s3:prod-assets minio:prod-assets --checksum --fast-list

# Prüfen statt vertrauen
rclone check s3:prod-assets minio:prod-assets --one-way --checksum

Bei sehr vielen kleinen Objekten ist nicht die Datenmenge das Problem, sondern die Zahl der Anfragen. --fast-list senkt die Listenaufrufe deutlich, kostet dafür Arbeitsspeicher auf der Maschine, die den Abzug fährt.

PostgreSQL per logischer Replikation umziehen
-- Auf der Quelle (bei Managed-Diensten muss die logische Replikation
-- über einen Parameter aktiviert und die Instanz neu gestartet werden)
CREATE PUBLICATION migration FOR ALL TABLES;

-- Schema vorab mit pg_dump --schema-only auf das Ziel einspielen,
-- dann auf dem neuen Server abonnieren
CREATE SUBSCRIPTION migration
  CONNECTION 'host=quelle.example.internal dbname=app user=repl'
  PUBLICATION migration;

-- Rückstand beobachten, erst bei null umschalten (auf der Quelle)
SELECT application_name,
       pg_wal_lsn_diff(sent_lsn, replay_lsn) AS bytes_rueckstand
FROM pg_stat_replication;

Der Vorteil gegenüber Dump und Restore ist das Wartungsfenster: Der Vollabzug läuft im laufenden Betrieb, im Fenster fehlen nur noch die letzten Sekunden.

Sequenzen nachsetzen: Skript auf der Quelle erzeugen
-- Erzeugt die setval-Anweisungen, die du auf dem Ziel ausführst
SELECT format('SELECT setval(%L, %s);',
              schemaname || '.' || sequencename,
              last_value)
FROM pg_sequences
WHERE last_value IS NOT NULL;

Führ die Ausgabe erst aus, wenn auf der Quelle nichts mehr schreibt. Sonst setzt du auf einen Wert, den die Quelle danach noch überholt.

04

Umschalten und den Rückweg offenhalten

Die Umschaltung ist eine DNS-Frage und eine Reihenfolgefrage. Beides lässt sich vorher üben, der Rückweg auch.

TTL senken und die Wirkung prüfen
# Aktuelle TTL ablesen, sie bestimmt die Dauer der Umschaltung
dig +noall +answer app.example.de

# TTL auf 60 setzen, danach mindestens die alte TTL abwarten
# Erst dann fragen alle Resolver wieder frisch nach
watch -n 30 'dig +noall +answer @1.1.1.1 app.example.de'

# Im Fenster: von beiden Seiten aus prüfen, wohin die Clients gehen
tail -f /var/log/nginx/access.log      # neues Ziel
aws logs tail /aws/alb/prod --follow   # alte Seite, sollte versiegen

Eine TTL von 60 Sekunden wirkt erst, wenn die alte TTL überall abgelaufen ist. Senke sie deshalb mindestens einen alten TTL-Zeitraum vor dem Fenster, bei Standardwerten also einen Tag vorher.

Ablauf im Umschaltfenster

  • Schreibzugriff auf der Quelle wirklich beendet, nicht nur angekündigtSolange ein Hintergrundjob oder ein vergessener Cron weiterschreibt, entstehen Datensätze, die du nach der Umschaltung von Hand nachziehen musst und meist erst über eine Beschwerde findest.
  • Replikationsrückstand auf null geprüft und protokolliertDer Rückstand ist die einzige belastbare Aussage darüber, ob das Ziel vollständig ist. Ein Blick auf die Zeilenzahl reicht nicht, weil laufende Transaktionen sie verfälschen.
  • Zweiter rclone-Lauf mit --checksum abgeschlossenDer erste Lauf ist Stunden alt. Ohne Delta fehlen genau die Dateien, die am Tag der Umschaltung entstanden sind, und das sind erfahrungsgemäß die wichtigsten.
  • Sequenzen nachgesetzt und ein Testschreibvorgang durchgeführtEin einzelner INSERT in einer Testtabelle beweist in fünf Sekunden, was sonst der erste echte Kunde herausfindet.
  • Cloud-Umgebung stillgelegt, aber nicht gelöschtIn den ersten zwei Wochen ist der Rückweg die einzige echte Absicherung. Erst wenn Monatsabschluss und Lastspitze durch sind, darf gelöscht werden.
  • Budget für einen zweiten Vollabzug eingeplantDatenausleitung wird pro Durchlauf abgerechnet. Wer nur einen Versuch bezahlt hat, kann nach einem Abbruch nicht mehr wiederholen, ohne neu zu beantragen.
05

Den Betrieb übernehmen, den dir vorher jemand abgenommen hat

Was in der Cloud ein Häkchen war, ist im eigenen Rechenzentrum ein Dienst mit Timer, Monitoring und Zuständigkeit. Diese Arbeit fängt am Tag nach der Umschaltung an.

Wiederanlauf ist der einzige Test, der zählt
# Welche wiederkehrenden Aufgaben laufen wirklich?
systemctl list-timers --all | grep -Ei 'backup|certbot|unattended|pgbackrest'

# Backup prüfen, dann auf einem Testhost zurückspielen
sudo -u postgres pgbackrest --stanza=app check
sudo -u postgres pgbackrest --stanza=app --delta restore   # nie auf dem Primary

# Zertifikate: Ablauf überwachen, nicht auf Erinnerungsmails hoffen
for h in app.example.de api.example.de; do
  echo | openssl s_client -connect "$h:443" -servername "$h" 2>/dev/null \
    | openssl x509 -noout -enddate -subject
done

Trag die Wiederherstellung als festen Termin ein, mindestens quartalsweise, und lass sie von wechselnden Personen durchführen. Ein Wiederanlauf, den nur eine Person kann, ist kein Wiederanlauf.

Gut zu wissen

Häufige Fragen zu Cloud Exit und On-Premise-Betrieb

Noch etwas offen? Wir sind ohne Warteschleife für dich da.

Frag uns direkt
Lohnt sich ein Cloud Exit finanziell überhaupt?
Das hängt fast vollständig vom Lastprofil ab. Bei gleichmäßig ausgelasteten Workloads mit viel Storage und viel ausgehendem Datenverkehr rechnet sich eigene Hardware häufig, weil du Kapazität einmal kaufst statt sie stündlich zu mieten. Bei stark schwankender Last, kurzen Projektlaufzeiten oder kleinen Umgebungen bleibt die Cloud oft günstiger. Rechne beide Seiten als Vollkosten über drei bis fünf Jahre, inklusive Personal, Standort und Migrationsaufwand, dann trägt die Entscheidung auch in der Geschäftsführung.
Welche Workloads sollte man besser in der Cloud lassen?
Alles, was echte Elastizität braucht, also seltene, aber sehr hohe Spitzen wie Kampagnen oder saisonale Lasten, und alles, was tief in proprietäre Dienste eingebaut ist, deren Nachbau teurer wäre als die Miete. Auch global verteilte Auslieferung und Disaster Recovery in einer zweiten Region sind Argumente für einen Verbleib. Ein hybrider Zielzustand mit klarer Grenze ist völlig legitim und meist realistischer als ein kompletter Rückzug.
Was passiert mit den Egress-Kosten beim Rückzug?
Ausgehender Datenverkehr ist bei allen großen Anbietern kostenpflichtig und kann bei mehreren hundert Terabyte spürbar ins Gewicht fallen. Mehrere Hyperscaler erlassen diese Gebühren inzwischen, wenn du deine Daten im Rahmen einer vollständigen Kündigung abziehst, allerdings nur nach vorherigem Antrag und innerhalb einer Frist. Kläre die Bedingungen vor dem ersten Sync mit deinem Account-Team und plane den Export als eigenes Arbeitspaket.
Brauche ich im eigenen Rechenzentrum wirklich Kubernetes?
Nur wenn du bereits containerisierte Anwendungen betreibst oder eine Plattform für mehrere Teams bereitstellen willst. Für ein paar Dutzend klassische VMs reicht eine solide Virtualisierungsplattform mit Ceph als Storage vollkommen aus, und der Betrieb ist deutlich einfacher. Wenn beides gebraucht wird, kann KubeVirt die VMs in denselben Cluster holen, was aber voraussetzt, dass dein Team Kubernetes wirklich beherrscht.
Wie lange dauert eine Rückmigration typischerweise?
Belastbare Pauschalwerte gibt es nicht, weil Datenmenge, Anzahl der Anwendungen und Beschaffungszeiten für Hardware den Takt vorgeben. Verlässlich ist die Struktur: Der Plattformaufbau lässt sich parallel zum laufenden Cloud-Betrieb erledigen, danach folgt eine Reihe von Migrationswellen mit Parallelbetrieb. Rechne für jede Welle mit einer Stabilisierungsphase, bevor die Cloud-Ressourcen abgeschaltet werden.

Zuletzt geprüft am 26. Juli 2026.

Das sagen Teilnehmer

Echte Stimmen aus unseren IT-Kursen

Die Schulung war genau das richtige, um mein Verständnis zu erweitern. Vielen Dank an den Trainer!
Rückmeldung aus dem Kurs „Linux Grundkurs (LPI01)“
Trainer gut und verständlich. Unterlagen nur zum lesen (keine Kopierfunktion). Wissenstransfer erfolgreich.
Rückmeldung aus dem Kurs „SUSE Linux Enterprise 15 High Availability Deployment – HAE311v15“
Persönlich für dich da

Deine Ansprechpartner

Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Hilft dir, aus dem Linux-Programm den passenden Kurs oder Lernpfad zu finden.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant mit dir Inhouse-Trainings, die exakt auf eure Systemlandschaft und Distributionen zugeschnitten sind.

Nächster Schritt

Zielarchitektur für deinen Cloud Exit aufbauen

Wenn du die Plattform für den Rückweg selbst betreiben willst, brauchst du Know-how in Virtualisierung, verteiltem Storage und Container-Orchestrierung. Bei cmt findest du dafür passende Kurse, vom Proxmox Grundkurs über den Aufbaukurs zu Cluster, Ceph und High Availability bis zum Kubernetes Grundkurs und der KubeVirt Schulung. Alle Termine laufen wahlweise vor Ort oder Live-Online, und für Inhouse-Schulungen stimmen wir die Themen auf deine geplante Zielarchitektur ab. Melde dich, dann klären wir gemeinsam, welche Reihenfolge für dein Team sinnvoll ist.