ARCHITEKTUR · KOSTENVERGLEICH UND BUDGET

Kostenvergleich und Budgetplanung für Cloud-Migrationen

Ein Migrationsbudget scheitert auf zwei Arten: Es vergleicht Preise von Dingen, die nicht gleich sind, oder es vergisst alles, was kein Preis ist. Die Architekturfrage lautet, welche Methode eine Zahl liefert, die Sie vertreten können. Diese Seite stellt vier Ansätze vor, zeigt an einem StackToIT-Lauf mit und ohne Annahmen, was ein Listenpreismodell aus Ihrem Terraform aussagen kann, und gibt eine Regel zur Wahl.

Vier Wege zum Budget

Wählen Sie einen als Rückgrat und prüfen Sie ihn mit den anderen. Mit „Praxis“ markierte Zeilen beschreiben allgemeine Methodik, nichts, was StackToIT berechnet.

AnsatzWas Sie bekommenWas er nicht liefert
1. Listenpreismodell aus der bewerteten Umgebung (der Lauf)Eine Zeile je abrechenbarer Ressource auf beiden Seiten, mit Status und zugrunde liegender Annahme; eine schnelle erste Sicht auf die AbdeckungNutzungsabhängige Kosten, Support, Lizenzen, Betrieb, Migrationsaufwand; eine Einsparung über Währungen hinweg ohne Wechselkurs
2. Nutzungsmodell aus Abrechnungsexporten und Monitoring (Praxis)Echte Mengen für Traffic, Anfragen und SpeicherwachstumEin Zieldesign; STACKIT-Zeilen, solange das Design nicht gewählt ist
3. Pilotwelle, gemessen (Praxis)Gemessene Betriebskosten und gemessenen Migrationsaufwand für einen WorkloadEine Zahl für Workloads mit anderem Zuschnitt; die Kosten des Wartens auf den Piloten
4. Anbieterangebot für zugesagte Kapazität (Praxis)Einen Preis für eine genannte ZusageEinen Vergleich, solange die Größen nicht durch einen der Ansätze oben feststehen

Ansatz 1 ist schnell und legt seine Lücken offen. Die Ansätze 2 und 3 füllen die Lücken mit Messwerten.

Was der Lauf bepreist hat und was offen blieb

Von StackToIT am 4. November 2026 bewertet: zwei Anwendungsserver, ein Datenvolume, eine Multi-AZ-PostgreSQL-Datenbank und ein Backup-Bucket auf AWS. Für diese Seite geschrieben.

Beispieleingabemain.tf
resource "aws_instance" "app" {
  count         = 2
  ami           = "ami-0abcdef1234567890"
  instance_type = "m5.xlarge"

  root_block_device {
    volume_size = 80
    volume_type = "gp3"
  }
}

resource "aws_ebs_volume" "data" {
  availability_zone = "eu-central-1a"
  size              = 500
  type              = "gp3"
}

resource "aws_db_instance" "main" {
  identifier        = "main"
  engine            = "postgres"
  engine_version    = "16.3"
  instance_class    = "db.m5.xlarge"
  allocated_storage = 200
  multi_az          = true
  username          = "app"
  password          = "change-me-at-migration"
}

resource "aws_s3_bucket" "backups" {
  bucket = "acme-app-backups"
}
  • Warum diese Form

    Compute, Blockspeicher, eine Datenbank und ein Objekt-Bucket sind die Zeilen, aus denen die meisten Budgets bestehen, und sie zeigen alle vier Gründe, warum eine Zeile ohne Preis bleibt.

Zwei Läufe: warum eine Zeile keinen Preis hat

Die Tabelle der Preisstatus in financial/cost-coverage.md, aus einem Lauf ohne Annahmen und aus einem zweiten Lauf mit der unten gezeigten Annahmendatei.

Lauf 1: ohne Annahmenfinancial/cost-coverage.md
15 lines in all: 6 of the source, 9 of the target.

| State | Lines | Meaning |
|---|---|---|
| AMBIGUOUS | 1 | More than one price fits and none is picked. |
| PRICED | 5 | A price record and a known quantity give an amount. |
| PRICE_SOURCE_ABSENT | 1 | No price source was available for this line. |
| QUANTITY_UNKNOWN | 1 | A price is known and the quantity is not: neither zero nor one. |
| TARGET_NOT_CHOSEN | 7 | The target design does not choose what the price needs. |
Lauf 2: mit Annahmendateifinancial/cost-coverage.md
15 lines in all: 6 of the source, 9 of the target.

| State | Lines | Meaning |
|---|---|---|
| AMBIGUOUS | 1 | More than one price fits and none is picked. |
| PRICED | 9 | A price record and a known quantity give an amount. |
| PRICE_SOURCE_ABSENT | 1 | No price source was available for this line. |
| TARGET_NOT_CHOSEN | 4 | The target design does not choose what the price needs. |
  • Lauf 1

    Von 15 Zeilen sind 5 bepreist. 7 warten auf eine Zielwahl wie einen Server-Flavor, 1 ist zwischen mehreren Preisen nicht eindeutig, für 1 fehlt die Preisquelle, 1 hat einen Preis, aber keine Menge.

  • Lauf 2

    Mit der Annahmendatei sind 9 von 15 Zeilen bepreist. Von den 6 übrigen sind 4 das Boot-Volume des Servers und das Datenvolume, deren Ziel die Datei nicht nennt, 1 ist die AWS-Server-Compute-Zeile (Betriebssystem und Tenancy nicht genannt) und 1 der AWS-Bucket-Speicher, für den der Cache keine Preisliste hält.

Die Annahmendatei

Zwei der vier Einträge der Datei, die in Lauf 2 mit --assumptions übergeben wurde. Die beiden anderen nennen einen Server-Flavor und eine PostgreSQL-Storage-Klasse als Zielwahl. Jeder Eintrag nennt Gegenstand, Variable, Wert und Begründung. Die Werte sind Demo-Zahlen, keine Empfehlungen.

Eintrag zur Überlappungassumptions.yaml
schema_version: "1.0"
assumptions:
  - id: cutover
    scenario: STANDARD_730H
    subject: scenario
    variable: parallel_run_months
    value: "2"
    unit: month
    explanation: "Planning figure for this demo: two months of side-by-side running"
Eintrag zum Bucket-Volumenassumptions.yaml
  - id: volume-size-stackit-objectstorage-bucket.backups
    scenario: STANDARD_730H
    subject: stackit_objectstorage_bucket.backups
    variable: volume_size
    value: "2000"
    unit: GB
    explanation: "Demo figure: backups hold about 2 TB on average"
  • Nur Genanntes wird verwendet

    Die Vorlage, die der Lauf schreibt, listet jeden Wert, auf den das Modell wartet. Eine Zeile, die die Datei nicht erwähnt, bleibt ohne Preis. Beachten Sie: In Lauf 2 führt cost-model.json nur die Überlappung und den Bucket-Eintrag als verwendet, obwohl die beiden Zielwahlen ihre Zeilen bepreist haben; prüfen Sie den Begründungstext jeder bepreisten Zeile, der die Annahme nennt.

  • Planungswert für die Überlappung

    parallel_run_months gibt an, wie lange beide Umgebungen gleichzeitig laufen. Der Lauf nennt die Monatswerte jeder Seite, multipliziert sie mit Ihren Monaten und hält das Ergebnis aus jeder Summe und jedem Vergleich heraus. In Lauf 2 waren das 736,47 USD pro Monat für die bepreisten Quellzeilen und 1.355,93 bis 1.531,01 EUR für die bepreisten STACKIT-Zeilen mit den Demo-Werten, jeweils eine Untergrenze, weil unbepreiste Zeilen fehlen.

Wie das Modell eine Zeile ausweist

Aus den beiden Läufen gelesen. Die Klasse sagt, wie viel einer Zeile Fakt ist.

Status oder KlasseBedeutungNächster Schritt im Lauf
PRICEDEin Preiseintrag und eine bekannte Menge ergeben einen BetragKeiner; bei Klasse ASSUMPTION die Annahme prüfen
TARGET_NOT_CHOSENDer Entwurf überlässt Flavor, Plan oder Storage-Klasse einer VariableWahl in der Annahmendatei oder der Eingabedatei nennen
AMBIGUOUSMehrere Preise passen und keiner wird gewählt, etwa das Betriebssystem einer InstanzDie fehlende Tatsache nennen
PRICE_SOURCE_ABSENT, CACHE_MISSINGDie Preisliste des Quellangebots fehlt im CachePreis-Cache einmal online mit stacktoit prices refresh füllen
QUANTITY_UNKNOWN, USAGE_NOT_STATEDEin Preis ist bekannt, die Nutzung eines Monats nicht; die Zeile ist weder 0 noch 1Nutzung nennen, zum Beispiel Gigabyte in einem Bucket
KNOWN, ESTIMATE, ASSUMPTION, OUT_OF_MODELFakt aus der Quelle, ein genannter Multiplikator wie 730 Stunden, eine von Ihnen angenommene Menge oder Klasse, oder nicht berechnetOUT_OF_MODEL als unbekannt behandeln, nie als null

In Lauf 2 war der Vergleich auf Umgebungsebene PARTIAL und nannte keine Einsparung, weil die Quellpreise in USD, die STACKIT-Preise in EUR vorlagen und kein Wechselkurs angegeben war.

Was ins Budget gehört und nicht im Modell steht

Das Modell berechnet keine Kosten für Nutzung, Traffic, Support, Lizenzen, Betrieb oder Migrationsaufwand. Nehmen Sie diese selbst ins Budget auf.

  • Datenübertragung und Anfragen

    Das Modell bepreist Nutzung nur, wo die Datei einen Monat davon nennt. Was Ihre Quell-Cloud für das Lesen und Übertragen von Objekten berechnet, bestimmt sie selbst; fragen Sie nach dem Preis für die Volumen, die Sie übertragen.

  • Versionshistorie

    Amazon S3 berechnet für jede gespeicherte Version eines Objekts die normalen Preise, und jede Version ist ein ganzes Objekt. Das Kopieren der Historie vervielfacht das zu lesende und zu speichernde Volumen; entscheiden Sie, ob Sie sie mitnehmen.

  • Redundanzeinstellungen

    Azure-Redundanzoptionen wägen niedrigere Kosten gegen höhere Verfügbarkeit ab. STACKIT Object Storage hat laut Lauf keine verwaltete regionsübergreifende Replikation; eine zweite Kopie ist daher ein Sync-Job mit eigenem Speicher und eigener Übertragung.

  • Parallelbetrieb

    Beide Umgebungen kosten Geld, solange Sie umstellen. Der Lauf weist das getrennt als Einmalposten aus, je Überlappungsmonat und für Ihre angenommenen Monate, und nimmt es in keine Summe auf.

  • Personal und Zeit

    Migrationsaufwand, Schulung und der Pilot sind von Ihnen mit Ansatz 3 zu schätzen.

  • Zeitpunkt der Einsparung (Praxis)

    Eine Einsparung zählt ab dem Tag, an dem die Quelle stillgelegt ist, nicht ab dem Tag, an dem das Ziel läuft. Planen Sie die Stilllegung als eigenen Meilenstein.

So entscheiden Sie

Eine Regel, die Sie in einer Lenkungsrunde anwenden können.

  • Mit Ansatz 1 bei jeder Umgebung beginnen

    Er ist günstig und zeigt, wie viel der Umgebung sich überhaupt bepreisen lässt. Eine Abdeckung von 5 von 15 Zeilen ist ein Befund, kein Scheitern.

  • Zielwahlen mit den Architekten schließen

    TARGET_NOT_CHOSEN-Zeilen sind Designfragen. Beantworten Sie sie in der Eingabedatei und bepreisen Sie neu.

  • Für die größten Kostenzeilen gemessene Mengen ergänzen

    Nutzen Sie Ansatz 2 für Speicher und Traffic dort, wo die Zeile einen Preis und keine Menge hat.

  • Eine Pilotwelle nutzen, wenn Workloads sich unterscheiden

    Hat die Umgebung mehrere Formen, messen Sie vor dem Hochrechnen je eine.

  • Spannen und Abdeckung zeigen, nicht eine einzelne Zahl

    Zeigen Sie den Anteil bepreister Zeilen, die zugrunde liegenden Annahmen und die ausgeklammerten Posten. Lauf 2 nennt für die STACKIT-Seite bereits eine Spanne statt einer einzelnen Zahl.

Fragen aus Finance und Architektur

Sagt StackToIT, wie viel wir sparen?

Nur wenn beide Seiten für dieselben Einheiten in einer Währung bepreist sind. Lauf 2 nannte keine Einsparung und sagte, warum. Ein Einsparungsprozentsatz braucht einen vollständigen Vergleich mit einem Wechselkurs, dessen Quelle und Datum genannt sind.

Sind die Preise aktuell?

Sie stammen aus einem Preis-Cache mit einem im Lauf angezeigten Abrufdatum (hier der 26. Oktober 2026). Beide Läufe zeigten, dass das AWS-S3-Angebot im Cache fehlte, und nannten den Befehl zum Auffrischen. Die Demo-Läufe liefen offline; ohne --offline kann eine Bewertung fehlende öffentliche Preise selbst abrufen.

Ist die Ausgabe eine Rechnung?

Nein. Der Lauf bezeichnet seine Zahlen als erste Schätzung der Infrastrukturkosten unter ausdrücklichen Annahmen, nicht als Rechnung: Listenpreise, keine Rabatte, kein Spot, keine Savings Plans.

Und die Kosten der Migration selbst?

Nicht berechnet. Der einzige Einmalposten, den das Modell ausweist, sind die Kosten des Parallelbetriebs beider Umgebungen, getrennt von jeder Summe.

Welche Währung sollen wir nehmen?

Nehmen Sie für die Entscheidung eine. Das Modell führt jede Seite in ihrer eigenen Währung und vergleicht nur mit einem Wechselkurs, den Sie angeben.

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.