AWS → STACKIT · CHECKLISTE BACKUP UND DR

AWS Backup und Disaster Recovery auf STACKIT: die Checkliste

AWS Backup ist ein Dienst mit Plänen, Vaults und Selektionen; STACKIT sichert je Dienst. Genau dort gehen Backup-Migrationen schief: Eine Aufbewahrungsregel, die in einem Plan stand, steht nun im Server-Backup-Zeitplan, in der Volume-Automation, in den Datenbankeinstellungen und am Bucket. Diese Checkliste führt durch die Phasen von der Bestandsaufnahme bis zum ersten Restore-Test und nennt die Datei eines StackToIT-Laufs, die jeweils die Antwort enthält.

Bestandsaufnahme: jede Backup-Regel finden, auf die Sie sich verlassen

Führen Sie zuerst die Bewertung aus. Die Beispielumgebung dieser Seite, am 4. November 2026 bewertet, hat 10 Ressourcen in 6 Einheiten: 3 RECONFIGURE (Backup-Plan, Snapshot-Richtlinie, EC2-Instanz), 1 REPLATFORM (RDS-Datenbank), 1 DIRECT (Replikat-Bucket) und 1 MANUAL_REVIEW (versionierter, replizierter Bucket). Diese Prüfungen stellen sicher, dass nichts fehlt, was Daten schützt.

PrüfungWo die Antwort stehtErledigt, wenn
Alle Backup-Pläne, Vaults und Selektionen erfassen und festhalten, welche Ressourcen jede Selektion erreicht.assessment.json, Einheit des PlansSie wissen, ob eine Tag-Selektion einen Server, ein Volume oder eine Datenbank erreicht.
Snapshot-Richtlinien (Data Lifecycle Manager) mit Tags, Zeitplänen und Anzahl erfassen.assessment.json, Einheit der RichtlinieJede Richtlinie ist einem Volume oder Server zugeordnet.
Die eingebaute Aufbewahrung jeder Datenbank und das Fenster lesen.assessment.json, Einheit der DatenbankAufbewahrungstage und Backup-Fenster sind notiert.
Buckets mit Versionierung, Lifecycle-Regeln und Replikation erfassen.Kommentare in terraform/storage.tf, terraform/s3api/Jeder Bucket mit Replikationsregel steht auf einer Liste.
Den Recovery Point und die Recovery Time festhalten, die jede Anwendung braucht.migration/data-movement.md (der Lauf nennt keine, solange Sie sie nicht angeben)Die Zahlen stammen vom Verantwortlichen der Anwendung und sind nicht geraten.

Design: festlegen, was den zentralen Dienst ersetzt

Der Lauf ordnet je Dienst zu, also fallen auch die Designentscheidungen je Dienst an.

PrüfungWo die Antwort stehtErledigt, wenn
Festlegen, welche Server einen Backup-Zeitplan bekommen; der Zeitplan braucht einen benannten Server.terraform/backup.tf, Variable für die Server-IDFür jeden geschützten Server ist eine Server-ID gesetzt.
Entscheiden, wie Volumes geschützt werden: label-gesteuerte Snapshots oder Backups.terraform/backup.tf, Volume-AutomationLabels an den STACKIT-Volumes passen zum Selektor.
Die Anzahl der Snapshots mit Blick auf das dokumentierte Limit je Volume festlegen.Kommentar über der Volume-AutomationDie darüber hinaus benötigte Aufbewahrung decken Backups ab.
Entscheiden, was einen Vault Lock oder unveränderlichen Vault ersetzt.Begründung der Backup-Einheit in assessment.jsonEine schriftliche Antwort: Object Lock an einem Bucket, Offline-Kopie oder akzeptierte Lücke.
Das DR-Ziel festlegen: zweite STACKIT-Region, zweiter Bucket oder anderer Standort.terraform/storage.tf, Ledger-Zeile zur Geo-ReplikationEin benanntes Ziel und ein Verantwortlicher.

Aufbau: Der Backup-Plan wird zum Server-Backup-Zeitplan

Links Vault, Plan und Tag-Selektion. Rechts die beiden Server-Backup-Blöcke des Entwurfs mit den zwei Kommentarzeilen darüber, die erklären, was die Selektion erreicht und was nicht übernommen wird; die übrigen Kommentarzeilen sind ausgelassen. Aus der täglichen Regel um 03:00 mit 35 Tagen werden eine rrule und retention_period = 35.

Beispieleingabemain.tf
resource "aws_backup_vault" "main" {
  name = "company-vault"
}

resource "aws_backup_plan" "daily" {
  name = "daily-35d"

  rule {
    rule_name         = "daily"
    target_vault_name = aws_backup_vault.main.name
    schedule          = "cron(0 3 * * ? *)"

    lifecycle {
      delete_after = 35
    }
  }
}

resource "aws_backup_selection" "tagged" {
  name         = "tagged-resources"
  plan_id      = aws_backup_plan.daily.id
  iam_role_arn = "arn:aws:iam::111122223333:role/backup-role"

  selection_tag {
    type  = "STRINGEQUALS"
    key   = "backup"
    value = "daily"
  }
}
STACKIT-Terraform von StackToITterraform/backup.tf
# no volume automation is drafted for the selection tagged-resources of aws_backup_plan.daily: it reaches no volume in the scan.
# NOT CARRIED (aws_backup_plan.daily): rule.target_vault_name — STACKIT Server Backup keeps backups per server and has no vault: the vault a rule writes to, aws_backup_vault.main (company-vault), is not carried.
resource "stackit_server_backup_enable" "daily" {
  project_id = var.project_id
  server_id  = var.daily_server_id
}

resource "stackit_server_backup_schedule" "daily" {
  project_id = var.project_id
  server_id  = var.daily_server_id
  name       = "daily-35d-daily"
  rrule      = "DTSTART;TZID=UTC:20200101T030000 RRULE:FREQ=DAILY;INTERVAL=1"
  enabled    = true
  backup_properties = {
    name             = "daily-35d-daily"
    retention_period = 35
  }
  depends_on = [stackit_server_backup_enable.daily]
}
  • Erst aktivieren, dann planen

    Der Entwurf schreibt ein stackit_server_backup_enable und lässt den Zeitplan davon abhängen. STACKIT dokumentiert Server-Backups als crash-konsistente Sicherungen der angehängten Volumes eines Servers, mit frei wählbarer Aufbewahrungsdauer.

  • Die Tag-Selektion, aufgelöst

    Der Lauf löst backup=daily gegen den Scan auf: Der Zeitplan schützt aws_instance.app, die RDS-Datenbank mit demselben Tag erhält stattdessen das Backup ihres eigenen Dienstes. Der Zeitplan erwartet trotzdem eine Variable für die Server-ID: Setzen Sie sie auf den STACKIT-Server von aws_instance.app und wiederholen Sie den Zeitplan für jeden weiteren Server, den das Tag erfasst hat.

  • Kein Vault

    STACKIT Server Backup hält Backups je Server. Der Vault, sein Name und die IAM-Rolle der Selektion haben kein Gegenstück und sind als nicht übernommen aufgeführt.

Aufbau: Die Snapshot-Richtlinie wird zur Volume-Automation

Links die Richtlinie des Data Lifecycle Manager. Rechts die Volume-Automation des Entwurfs mit der Kommentarzeile, die die Snapshot-Anzahl prüft; die übrigen Kommentarzeilen sind ausgelassen. Aus dem Ziel-Tag wird ein Label-Selektor, aus der 24-Stunden-Erstellungsregel eine rrule, aus der Aufbewahrungsanzahl eine Count-Policy.

Beispieleingabemain.tf
resource "aws_dlm_lifecycle_policy" "ebs" {
  description        = "Daily EBS snapshots"
  execution_role_arn = "arn:aws:iam::111122223333:role/dlm-role"
  state              = "ENABLED"

  policy_details {
    resource_types = ["VOLUME"]
    target_tags = {
      snapshot = "true"
    }
    schedule {
      name = "daily"
      create_rule {
        interval      = 24
        interval_unit = "HOURS"
        times         = ["03:00"]
      }
      retain_rule {
        count = 7
      }
    }
  }
}
STACKIT-Terraform von StackToITterraform/backup.tf
# Check the count: the policy keeps 7 snapshots for schedule daily; the documented limit is 6 snapshots per volume (docs.stackit.cloud, introduction to the server), so the days beyond are not covered by snapshots — backups (daily retention, default 14 days, `backupRetentionPolicies`) are the longer-retention path; whether the Automation Service enforces the number is not documented, verify it on the first run.
resource "stackit_volume_automation" "ebs" {
  project_id  = var.project_id
  template_id = var.ebs_automation_template_id
  name        = "daily-ebs-snapshots-daily"
  description = "Daily EBS snapshots"
  input = jsonencode({
    kind                = "VolumeRecoveryPointManagement"
    inheritVolumeLabels = false
    snapshotRetentionPolicy = {
      kind  = "count"
      value = 7
    }
    volumeLabelSelector = "snapshot=true"
  })
  triggers = {
    schedule = {
      rrule = "DTSTART;TZID=UTC:20200101T030000 RRULE:FREQ=DAILY;INTERVAL=1"
    }
  }
}
  • Die Anzahl 7

    Der Lauf prüft die 7 Snapshots der Richtlinie gegen ein dokumentiertes Limit von 6 je Volume und vermerkt, dass die Tage darüber nicht durch Snapshots gedeckt sind. Tägliche Backups in derselben Automation (backupRetentionPolicies) sind der Weg für längere Aufbewahrung; ob das Limit durchgesetzt wird, wird bei der ersten Ausführung der Automation geprüft.

  • Opt-in-Ressource

    Der gepinnte Provider kennzeichnet stackit_volume_automation als Ressource, die sich noch ändern kann, und der Entwurf schaltet dieses Opt-in in terraform.tf ein. Ihr Team entscheidet, ob es das akzeptiert oder die Automation auf anderem Weg anlegt.

  • Labels müssen existieren

    Die Automation wählt per Label aus. Setzen Sie snapshot=true an den STACKIT-Volumes, die gesichert werden sollen, sonst entsteht kein Snapshot.

Aufbau: Datenbank-Aufbewahrung und Point-in-Time-Recovery

Links die RDS-Instanz mit 14 Tagen Aufbewahrung, Backup-Fenster und Multi-AZ. Rechts die PostgreSQL-Flex-Instanz des Entwurfs mit vier der Kommentarzeilen darüber, unverändert; die übrigen Kommentarzeilen sind ausgelassen.

Beispieleingabemain.tf
resource "aws_db_instance" "orders" {
  identifier              = "orders-db"
  engine                  = "postgres"
  engine_version          = "16.4"
  instance_class          = "db.m6g.large"
  allocated_storage       = 100
  username                = "app"
  password                = var.db_password
  backup_retention_period = 14
  backup_window           = "02:00-02:30"
  multi_az                = true
  skip_final_snapshot     = false
  final_snapshot_identifier = "orders-db-final"
  tags = {
    backup = "daily"
  }
}
STACKIT-Terraform von StackToITterraform/data.tf
# recovery window: the source restores to any point within 14 days, as late as about five minutes before now (RDS uploads transaction logs to S3 every five minutes).
# PostgreSQL Flex restores to an arbitrary point of its available backups (transaction logs are on by default) into a cloned instance, and keeps them retention_days = 32.
# LEDGER backup retention: 14 days → retention_days = 32 — TRANSFORMED
# LEDGER high availability: standby / multi-node → flavor_id = "2.16-replica" (a replica flavor: three nodes that mirror each other; no STACKIT page states the zone of each node or how a failover works, so a zone failure or an automatic takeover is not claimed) — TRANSFORMED
resource "stackit_postgresflex_instance" "orders" {
  project_id = var.project_id
  name       = "orders-db"
  version    = "16"
  flavor_id  = "2.16-replica"
  storage = {
    class = var.postgresflex_storage_class
    size  = 108
  }
  backup_schedule = "0 2 * * *"
  network = {
    acl          = var.orders_allowed_cidrs
    access_scope = var.orders_access_scope == "SNA" ? "SNA" : null
  }
  retention_days = 32
}
  • Die Aufbewahrung ändert sich

    Der Entwurf setzt retention_days auf 32 und backup_schedule auf nächtlich 02:00, den Beginn des Quellfensters 02:00-02:30; ein Kommentar dazu, woraus die Uhrzeit abgeleitet ist, fehlt. Der Lauf kennzeichnet den Schritt von 14 auf 32 als umgewandelt und hält fest, dass die beiden Wiederherstellungsfenster nicht als gleich belegt sind.

  • Restore erzeugt einen Klon

    Point-in-Time-Recovery bei PostgreSQL Flex stellt in eine neue geklonte Instanz wieder her; das Recovery-Runbook enthält daher das Umschalten der Anwendung auf sie.

  • Der finale Snapshot wird nicht übernommen

    Der finale Snapshot der Quelle hat beim Löschen kein Gegenstück. Exportieren Sie die Daten zuerst, wenn sie den Cutover überdauern sollen. Auch die STACKIT-Dokumentation warnt, dass das Löschen einer Instanz ohne Instanzschutz endgültig ist.

Aufbau: Bucket-Versionierung und Replikation

Links Versionierung, Replikat-Bucket und Replikationsregel. Rechts der Bucket des Entwurfs mit seinen zwei „NOT CARRIED“-Kommentaren (dem zur Replikation folgt die Zeile mit der Entscheidung) und der Ledger-Zeile zur Geo-Replikation; die übrigen Kommentarzeilen sind ausgelassen. Die Versionierung wird außerhalb von Terraform übertragen: Der Lauf schreibt terraform/s3api/documents/versioning.json mit Status „Enabled“, das Sie über die S3-API anwenden, bevor das erste Objekt ankommt.

Beispieleingabemain.tf
resource "aws_s3_bucket_versioning" "documents" {
  bucket = aws_s3_bucket.documents.id
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket" "documents_replica" {
  bucket = "acme-documents-replica"
}

resource "aws_s3_bucket_replication_configuration" "documents" {
  bucket = aws_s3_bucket.documents.id
  role   = "arn:aws:iam::111122223333:role/s3-replication"

  rule {
    id     = "all"
    status = "Enabled"
    destination {
      bucket = aws_s3_bucket.documents_replica.arn
    }
  }
}
STACKIT-Terraform von StackToITterraform/storage.tf
# NOT CARRIED (aws_s3_bucket_replication_configuration.documents): role = arn:aws:iam::111122223333:role/s3-replication, rule — stackit_objectstorage_bucket has no replication attribute (pinned provider). STACKIT's supported-operations page lists Put, Get and Delete Bucket Replication, but no STACKIT page describes replication targets, cross-region behaviour or the role the source assumes, so whether replication between STACKIT buckets works is UNKNOWN (not observed); the source's destination, role, storage class and filter do not carry over.
#   Decision: probe `put-bucket-replication` between two STACKIT buckets before relying on it, or replace it with a scheduled sync (rclone) or application writes to both buckets.
# NOT CARRIED (aws_s3_bucket_versioning.documents): versioning_configuration.status = Enabled — stackit_objectstorage_bucket has no versioning attribute (pinned provider), but STACKIT Object Storage supports versioning through its S3 API (the provider lacks it, STACKIT does not). … Once enabled, versioning cannot be disabled on STACKIT, only suspended (docs manage-bucket-versioning). (shortened: the whole reason is in the trace of this block)
# LEDGER geo-replication: second region → none — sync to a second bucket if required — UNSUPPORTED
resource "stackit_objectstorage_bucket" "documents" {
  project_id = var.project_id
  name       = "acme-documents-primary"
}
  • Versionierung ist eine Einbahnstraße

    Die Versionierungsanleitung von STACKIT setzt sie mit aws s3api put-bucket-versioning und hält fest: Einmal aktiviert, lässt sie sich nicht abschalten, nur aussetzen.

  • Die Historie braucht eine eigene Kopie

    Ein einfacher Sync kopiert nur die aktuellen Versionen. Das Datenkopie-Dokument des Laufs schreibt frühere Versionen per Versions-ID, die älteste zuerst, und vermerkt, dass die Versions-IDs der Quelle nicht erhalten bleiben.

  • Replikation: erproben oder synchronisieren

    Der Provider hat kein Replikationsattribut. STACKIT listet die Replikations-Operationen für Buckets, doch der Lauf fand keine STACKIT-Seite zu Replikationszielen oder regionsübergreifendem Verhalten. Daher schlägt er vor, put-bucket-replication zwischen zwei STACKIT-Buckets zu erproben oder einen geplanten Sync einzurichten.

Daten und Cutover: den Schutz lückenlos halten

Backups sollten auf beiden Seiten überlappen, bis das Ziel sich bewährt hat.

PrüfungWo die Antwort stehtErledigt, wenn
AWS Backup und DLM weiterlaufen lassen, bis das erste STACKIT-Backup jeder Ressource abgeschlossen ist (Praxis).Zeitpläne in terraform/backup.tf und data.tfJe geschützter Ressource ein abgeschlossenes STACKIT-Backup.
Vor dem Schreibstopp ein letztes Backup jeder Quelldatenbank ziehen (Praxis).Schreibstopp-Schritt in terraform/handover/database-orders/data-move.mdDie Backup-ID ist vermerkt.
Versionierte Buckets samt Versionshistorie kopieren, wenn die Historie zählt.terraform/s3api/documents/data-copy.mdVersionszahlen je Schlüssel stimmen auf beiden Seiten.
Bucket-Replikation durch einen geplanten Sync oder durch Schreibvorgänge der Anwendung ersetzen, oder Replikation zwischen zwei STACKIT-Buckets vorab erproben.Kommentar in terraform/storage.tfEin getesteter Mechanismus, keine Annahme.
Die Rollback-Grenze festhalten: ab wann ein Rollback am Ziel geschriebene Daten verliert.terraform/handover/database-orders/data-move.md und terraform/s3api/documents/data-copy.md (Prüfung „rollback-limit“)Datum und Verantwortlicher sind vermerkt.

Nachbereitung: beweisen, dass Sie wiederherstellen können

Ein Backup, das nie wiederhergestellt wurde, ist eine Hoffnung.

PrüfungWo die Antwort stehtErledigt, wenn
Ein Volume-Backup des Servers auf ein neues Volume wiederherstellen und Dateien daraus lesen; STACKIT dokumentiert diese teilweise Wiederherstellung.Ihr eigenes Runbook, basierend auf dem Zeitplan in terraform/backup.tfDateien und Anwendungsprüfung sind in Ordnung; Dauer notiert.
Die Datenbank zu einem Zeitpunkt als Klon wiederherstellen.Kommentare in terraform/data.tfDer späteste wiederherstellbare Punkt passt zum benötigten Recovery Point.
Eine alte Objektversion aus dem Bucket wiederherstellen.terraform/s3api/documents/Die Version wird geliefert.
Temporäre Zugänge des Umzugs entfernen und AWS Backup nach der beschlossenen Aufbewahrungsdauer stilllegen.execution/manual/actions.mdQuell-Vault und Pläne an einem vermerkten Datum entfernt.

Fragen zur Backup-Migration

Gibt es bei STACKIT ein Gegenstück zu AWS Backup?

Laut Begründung des Laufs gibt es keinen zentralen Backup-Dienst wie AWS Backup. Jeder Dienst hat sein eigenes: Server-Backup-Zeitpläne, Volume-Automationen, die eingebauten Backups verwalteter Datenbanken und Snapshots für Dateispeicher.

Bekomme ich einen unveränderlichen Vault?

Der Lauf hält fest, dass die Isolation der Backups des Automation Service keine Lock-, Write-once- oder Unveränderlichkeitseinstellung ist. Die Object-Storage-Dokumentation von STACKIT beschreibt Object Lock mit Compliance-Aufbewahrung bis zu 365 Tagen für Buckets; das ist ein anderer Baustein.

Erstellt oder stellt StackToIT Backups wieder her?

Nein. StackToIT liest Terraform und schreibt einen Entwurf, Skripte und Dokumente. Backups und Restores führt Ihr Team aus.

Wird die S3-Bucket-Replikation übernommen?

Nein. stackit_objectstorage_bucket hat kein Replikationsattribut. Der Lauf schlägt vor, Replikation zwischen zwei STACKIT-Buckets zu erproben oder einen geplanten Sync einzurichten, und vermerkt die Kopie in eine zweite Region als nicht unterstützt.

Warum verlangt der Entwurf eine Server-ID?

Weil ein Server-Backup-Zeitplan bei STACKIT zu genau einem Server gehört, nicht zu einem Tag. Der Lauf hat die Tag-Selektion auf aws_instance.app aufgelöst, lässt die ID aber als Variable stehen; setzen Sie sie auf den STACKIT-Server, der diese Instanz ersetzt.

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.