Zum Inhalt springen
use-cases / snapshot-before-migration / hero
USE CASE / SNAPSHOT VOR DER MIGRATION

Snapshote den Container direkt vor der nächtlichen Migration

Füge einen hoody-cron-Eintrag hinzu, der fünf Minuten vor dem 03:00-Migrationsjob feuert. Er curlt die Snapshots-URL und taggt das Artefakt als Rollback-Punkt. Wenn die Migration scheitert, stellst du in 30 Sekunden mit einem einzigen PATCH wieder her.

use-cases / snapshot-before-migration / mechanism

Zwei URLs, eine nächtliche Gewohnheit

Der Cron-Service plant einen curl. Der Snapshots-Service erledigt das Einfrieren. Keiner weiß vom Migrationsjob fünf Minuten später — und genau das ist der Punkt.

POST cron/entries
Scheduler
# wiederkehrenden Snapshot-Job registrieren (einmaliges Setup)
curl -X POST \
  cron.containers.hoody.com/users/root/entries \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": "55 2 * * *",
    "command": "curl -X POST $SNAP_URL -d '{\"alias\":\"rollback-point\"}'",
    "comment": "pre-migration snapshot"
  }'
FEUERT
POST containers/[id]/snapshots
Freezer
# was der Cron-Eintrag jede Nacht um 02:55 UTC curlt
curl -X POST \
  api.hoody.com/api/v1/containers/$ID/snapshots \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"alias": "rollback-point", "expiry": 7}'

# Antwort vom Snapshots-Service
200 OK · snap-2026-05-04 created in 8s

Der Cron-Eintrag ist eine Zeile in einer Postgres-Tabelle irgendwo bei Hoody. Die Snapshots-URL schreibt einen content-addressed Blob ins Storage-Backend des Containers. Beides ist haltbar, beides versioniert, und keins braucht einen langlebigen Prozess auf deinem Laptop.

use-cases / snapshot-before-migration / anatomy

Anatomie der letzten Nacht

Vier Momente, vier URLs und eine fünfminütige Lücke zwischen Sicherheitsnetz und Änderung. Die Migration ist fertig, bevor der Wecker der meisten Engineers klingelt.

0102:55:00ZCron feuertschedule: 55 2 * * *
0202:55:08ZSnapshot landetalias rollback-point
0303:00:00ZMigration läuftALTER TABLE invoices
0403:01:42ZAudit schließtSnapshot 7d aufbewahrt

Wenn Schritt 03 scheitert, ist das Rollback `PATCH /snapshots/snap-2026-05-04`, und du bist zurück auf 02:55:08Z. Die Audit-Timeline oben sind dieselben Daten, nur als JSON serviert.

use-cases / snapshot-before-migration / powers

Was diese Form freischaltet

Nicht der Snapshot selbst. Die Form: ein Backup, das vor der Änderung existiert, per URL adressiert, mit einem Namen, der das heutige Datum enthält.

01 / SAFETY

Das Backup geht der Änderung um exakt fünf Minuten voraus

Die meisten Outage-Post-Mortems beginnen mit "wir haben vergessen, ein Backup zu machen." Wenn das Backup ein Cron-Eintrag ist, kannst du nicht vergessen. Der 02:55-Snapshot ist der erste Satz des Runbooks, im Voraus geschrieben.

02 / SPEED

Rollback ist ein PATCH, kein 40-Schritte-Runbook

snap-2026-05-04 wiederherzustellen ist ein einziger HTTP-Call gegen api.hoody.com. Der Container fällt in unter 30 Sekunden auf seinen 02:55:08Z-Zustand zurück. Kein Ticket, keine On-Call-Eskalation, kein "wer hat die AWS-Console."

03 / IDLE COST

Wenn die Migration funktioniert, kostet der Snapshot nichts

Snapshots sind content-addressed und werden als Deltas gespeichert. Ein 412 MB Delta auf einer unveränderten Base-Disk ist, wofür du zahlst — und nur für das 7-Tage-Retention-Fenster. Erfolgreiche Migrationen hinterlassen fast keinen Footprint.

use-cases / snapshot-before-migration / rollback

Das Rollback, vorher vs. nachher

Wie das Runbook früher aussah und worauf es zusammenschrumpft, wenn der Snapshot nach dem heutigen Datum benannt und als URL adressierbar ist.

ALTES RUNBOOK9 manuelle Schritte, 20–40 Minuten, 1–2 Menschen
  • 01
    On-Call-DBA pagen, bestätigen, dass die Migration Production gebrochen hatMedian: 4 Minuten bis zur Bestätigung
  • 02
    Das jüngste Backup in der AWS-Console findenhoffen, dass es weniger als 24 Stunden alt ist
  • 03
    Restore-Instanz hochfahren, warten, bis sie online kommt8–15 Minuten auf db.r6g.xlarge
  • 04
    ALTER TABLE manuell mit handgeschriebenem DOWN-Skript zurücksetzenfalls das DOWN-Skript existiert, was meistens nicht der Fall ist
  • 05
    App-Server neustarten, Caches flushen, Error-Rates beobachtenund das Post-Mortem schreiben
Durchschnittliche Rollback-Zeit, ops@acme 2024 Incidents: 27 Minuten
NEUES RUNBOOK1 HTTP-Call, ~30 Sekunden, 0 Menschen
# Migration der letzten Nacht zurückrollencurl -X PATCH api.hoody.com/api/v1/containers/$ID/snapshots/snap-2026-05-04# Antwort200 OK · Container in 28s auf snap-2026-05-04 zurückgesetzt
PATCH ist idempotent und reversibel

Die neue Spalte rechts ist kein Tool. Es ist ein Satz in einem Runbook. Der Satz beginnt nicht mit "erstmal ein Backup machen", weil das Backup bereits existiert.

use-cases / snapshot-before-migration / punchline

Der Rollback-Plan ist eine URL, deren Existenz du gescheduled hast.

VORHER: eine Notion-Seite, die niemand liestNACHHER: eine Zeile in Cron und ein Blob im Object Storage
ALTerstmal ein Backup machender erste Satz des Runbooks, manuell um 03:02 von einem müden Menschen ausgeführt
NEUdas Backup existiert bereits, benannt nach dem heutigen Datum, fünf Minuten vor der Änderung gemachtder erste Satz des Runbooks, im Voraus von einem Cron-Eintrag geschrieben
Snapshot-API ansehen
use-cases / snapshot-before-migration / replaces

Was das ersetzt

Den Cargo-Cult um Pre-Migration-Backups. Snapshot schedulen, durch das Migrationsfenster schlafen.

  • Manuelle Pre-Migration-SnapshotsUm 02:54 aufstehen, um den Backup-Button zu klicken
  • Runbook-ChecklistenSchritt 1 von 14 auf der Seite, die niemand findet
  • On-Call-Standby fürs RollbackEinen Engineer dafür bezahlen, auf nichts zu warten
  • Ad-hoc pg_dump vor DeploysHoffen, dass du dran gedacht hast, hoffen, dass es durchlief
  • "Wir passen schon auf"-ReleasesDer Optimismus, der Incidents shippt
  • AWS RDS Automated SnapshotsFestes 5-Minuten-Fenster, bezahlt pro GB-Tag
use-cases / snapshot-before-migration / cta

Der Rollback-Plan ist eine URL, deren Existenz du gescheduled hast.

use-cases / snapshot-before-migration / related

Lies die anderen