HUAWEI CLOUD → STACKIT · FALLSTUDIE

Ein Huawei-Cloud-Webshop auf STACKIT: Fallstudie einer vollständigen Bewertung

Eine realistische Umgebung, durchgängig bewertet: ein Webshop mit Server, Load Balancer, öffentlicher Adresse, PostgreSQL-Datenbank, Session-Cache, Objektspeicher, Schlüssel, Secret, DNS und einem kleinen Kubernetes-Cluster für Hintergrundjobs. 15 Terraform-Ressourcen wurden zu 14 Einheiten in drei Wellen: 12 RECONFIGURE und 2 REPLATFORM. Diese Fallstudie zeigt jede Kennzahl, die wichtigen Auszüge und die Entscheidungen, die bei Ihren Architekten bleiben.

Die Umgebung und ihr Ergebnis

Am 4. November 2026 von StackToIT bewertet, aus einer Terraform-Datei und einer Variablendatei mit Platzhalterwerten. Jede Zeile ist eine Einheit; die Welle ist die Reihenfolge, in der ihre Abhängigkeiten den Umzug erlauben.

Huawei-Cloud-Ressource (Welle)STACKIT-ZielKlasse und Konfidenz
VPC (1)STACKIT-NetzwerkRECONFIGURE, MEDIUM
Subnetze app und data (2)STACKIT-Netzwerke mit eigenen BereichenRECONFIGURE, MEDIUM
Security Group (1)STACKIT Security GroupRECONFIGURE, LOW
ECS-Webserver (3)STACKIT-Server, Volume und NetzwerkschnittstelleRECONFIGURE, MEDIUM
EIP (1)STACKIT Public IPRECONFIGURE, MEDIUM
Shared Load Balancer (3)STACKIT Network Load BalancerRECONFIGURE, MEDIUM
RDS for PostgreSQL (3)STACKIT PostgreSQL FlexREPLATFORM, MEDIUM
DCS-Redis-Sessions (3)STACKIT Key Value Store (Valkey)RECONFIGURE, MEDIUM
OBS-Bucket (1)STACKIT Object StorageRECONFIGURE, MEDIUM
KMS-Schlüssel (1) und CSMS-Secret (2)STACKIT KMS und Secrets ManagerRECONFIGURE, MEDIUM
DNS-Record-Set (1)Eintrag in einer STACKIT-DNS-ZoneRECONFIGURE, MEDIUM
CCE-Cluster (3)STACKIT Kubernetes Engine (SKE)REPLATFORM, MEDIUM

Die Regel der Security Group gehört zur Einheit der Gruppe; deshalb ergeben 15 Ressourcen 14 Einheiten. Nichts ist als REDESIGN, BLOCKED oder MANUAL_REVIEW eingestuft.

Die Kennzahlen des Laufs

  • 15 Ressourcen, 14 Einheiten

    Eine Datei gelesen, kein Modul übersehen, 13 Abhängigkeiten zwischen Einheiten. Der Quellstatus ist COMPLETE, weil die Variablendatei die zwei sensiblen Werte lieferte.

  • 12 und 2

    12 Einheiten sind RECONFIGURE: Der Dienst existiert bei STACKIT, seine Einstellungen ändern sich. 2 sind REPLATFORM: Datenbank und Kubernetes-Cluster wechseln das Plattformmodell.

  • 13 MEDIUM, 1 LOW

    Keine Einheit ist HIGH. Der Provider ist nicht per Lock-Datei festgeschrieben, was der Lauf festhält; die LOW-Einheit ist die Security Group, die unten erklärt wird.

  • 3 Wellen: 6, 3 und 5 Einheiten

    Welle 1 enthält, was von nichts abhängt; Welle 2 die Subnetze und das Secret, das den Schlüssel nennt; Welle 3 alles, was im Netzwerk sitzt.

  • 10 Arbeitspakete, 14 manuelle Schritte

    Für eine Huawei-Cloud-Quelle schreibt dieser Build keine STACKIT-Ressourcenblöcke. Alle 14 Einheiten sind manuelle Schritte, die eine Person sofort beginnen kann, gruppiert nach Phase und Verantwortlichen.

  • 1 blockierende Frage

    Die Zielregion, eu01 oder eu02. Vier weitere Anfragen (STACKIT-Projekt, Observability, öffentlicher Zugang und ausgehender Verkehr) hält dieser Build fest, ohne den Entwurf zu ändern; Sie setzen sie in der Zielumgebung.

Die Web-Ebene: Adresse und Load Balancer

Adresse und Load Balancer sind die zwei Einheiten, deren Ergebnis ändert, was die Außenwelt sieht. Die beiden Eingabe-Fenster zeigen zwei getrennte Ressourcenblöcke aus main.tf, jeweils vollständig.

Beispieleingabe: Adressemain.tf
resource "huaweicloud_vpc_eip" "web" {
  publicip {
    type = "5_bgp"
  }
  bandwidth {
    share_type  = "PER"
    name        = "shop-web"
    size        = 20
    charge_mode = "traffic"
  }
}
Beispieleingabe: Load Balancermain.tf
resource "huaweicloud_lb_loadbalancer" "web" {
  name          = "shop-lb"
  vip_subnet_id = huaweicloud_vpc_subnet.app.ipv4_subnet_id
}
StackToIT-Bewertungassessment.json
{
  "id": "huaweicloud_vpc_eip.web",
  "result": {
    "class": "RECONFIGURE",
    "confidence": "MEDIUM",
    "target": {
      "service": "STACKIT public IP"
    },
    "reason": "An EIP becomes a STACKIT public IP. The address itself changes, so DNS records and allow lists that name it change too."
  }
}

{
  "id": "huaweicloud_lb_loadbalancer.web",
  "result": {
    "class": "RECONFIGURE",
    "confidence": "MEDIUM",
    "target": {
      "service": "STACKIT Network Load Balancer"
    },
    "reason": "A shared load balancer becomes a STACKIT Network Load Balancer. Listeners and backends are rewritten, and the public address changes."
  }
}
  • Die Adresse ändert sich

    Eine EIP wird zu einer STACKIT Public IP, und der Lauf hält fest, dass sich die Adresse selbst ändert. DNS-Einträge und Freigabelisten, die die alte nennen, ändern sich mit.

  • Listener werden neu geschrieben

    Ein Shared Load Balancer wird zu einem Network Load Balancer; Listener und Backends werden neu geschrieben, und die öffentliche Adresse wechselt. Planen Sie Zertifikat und Health Check mit ein.

Die Datenebene: Datenbank und Cache

Zwei zustandsbehaftete Einheiten, zwei verschiedene Umzüge. Die Datenbank behält ihre Engine, der Cache wechselt das Produkt.

Beispieleingabemain.tf
resource "huaweicloud_rds_instance" "db" {
  name              = "shop-db"
  flavor            = "rds.pg.n1.xlarge.2"
  vpc_id            = huaweicloud_vpc.shop.id
  subnet_id         = huaweicloud_vpc_subnet.data.id
  security_group_id = huaweicloud_networking_secgroup.web.id
  availability_zone = ["eu-west-101a"]

  db {
    type    = "PostgreSQL"
    version = "15"
  }

  volume {
    type = "CLOUDSSD"
    size = 200
  }
}

resource "huaweicloud_dcs_instance" "sessions" {
  name               = "shop-sessions"
  engine             = "Redis"
  engine_version     = "6.0"
  capacity           = 4
  flavor             = "redis.ha.xu1.large.r2.4"
  availability_zones = ["eu-west-101a", "eu-west-101b"]
  password           = var.redis_password
  vpc_id             = huaweicloud_vpc.shop.id
  subnet_id          = huaweicloud_vpc_subnet.data.id
}
StackToIT-Bewertungassessment.json
{
  "id": "huaweicloud_rds_instance.db",
  "result": {
    "class": "REPLATFORM",
    "confidence": "MEDIUM",
    "target": {
      "service": "STACKIT PostgreSQL Flex"
    },
    "reason": "Managed PostgreSQL to managed PostgreSQL: data moves with pg_dump/pg_restore or logical replication, and the flavor becomes a Flex flavor."
  }
}

{
  "id": "huaweicloud_dcs_instance.sessions",
  "result": {
    "class": "RECONFIGURE",
    "confidence": "MEDIUM",
    "target": {
      "service": "STACKIT Key Value Store (Valkey)"
    },
    "reason": "A DCS instance becomes a Valkey instance. The application changes its endpoint and credentials; check the engine and version in use, since a Memcached instance needs a client change."
  }
}
  • PostgreSQL zu PostgreSQL

    Der Lauf nennt pg_dump mit pg_restore oder logische Replikation, und der Flavor wird zu einem Flex-Flavor. Die Quelle läuft mit Version 15; laut den Release Notes von STACKIT endet der Support für Version 14 am 12. November 2026; 15 oder höher ist also ein sicherer Ausgangspunkt, den Sie bestätigen.

  • Der Cache braucht eine eigene Methode

    Huawei führt MIGRATE für DCS Redis 6.0 als gesperrt; die von STACKIT für das eigene Redis-Angebot dokumentierte Kopiermethode greift also nicht wie beschrieben. Das Tutorial zu DCS und Valkey auf dieser Website behandelt es.

  • Daten sind eine Entscheidung, kein Ergebnis

    migration/data-movement.md führt drei zustandsbehaftete Einheiten, Cache, Bucket und Datenbank, jeweils mit Mechanismus UNKNOWN und DECISION_REQUIRED.

Die eine LOW-Einheit: eine Security Group

Die Gruppe selbst lässt sich sauber zuordnen. Die Konfidenz sinkt, weil eine verknüpfte Ressource nicht bewertet wird.

Beispieleingabemain.tf
resource "huaweicloud_networking_secgroup" "web" {
  name        = "shop-web"
  description = "Web tier"
}

resource "huaweicloud_networking_secgroup_rule" "https" {
  security_group_id = huaweicloud_networking_secgroup.web.id
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  ports             = "443"
  remote_ip_prefix  = "0.0.0.0/0"
}
StackToIT-Bewertungassessment.json
{
  "id": "huaweicloud_networking_secgroup.web",
  "result": {
    "class": "RECONFIGURE",
    "confidence": "LOW",
    "reason": "A security group becomes a STACKIT security group. STACKIT rules only allow traffic, so a deny rule or a priority order of the source needs a decision.",
    "findings": [
      {
        "check_id": "uncatalogued-related",
        "severity": "warning",
        "message": "huaweicloud_networking_secgroup_rule.https (huaweicloud_networking_secgroup_rule) is linked to this unit; the knowledge base catalogues it but has no mapping rule, semantic contract or criticality row for it (catalogued but unmapped), so what it does to this unit is not assessed."
      }
    ]
  }
}
  • Katalogisiert, aber nicht zugeordnet

    Der Lauf kennt den Regeltyp und hat dafür keine Zuordnung; er sagt deshalb, was die Regel mit der Gruppe macht, werde nicht bewertet. Lesen Sie die Regel selbst: Das Beispiel erlaubt HTTPS von überall.

  • Deny-Regeln brauchen eine Entscheidung

    STACKIT-Regeln erlauben Verkehr nur. Eine Deny-Regel oder Prioritätsreihenfolge in einer echten Quelle braucht eine bewusste Designentscheidung.

Reihenfolge und Verantwortung

Die Wellen aus migration/technical-sequencing.md und die zehn Arbeitspakete aus execution/README.md.

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

| Unit | Class | Target |
|---|---|---|
| `huaweicloud_dns_recordset.www` | RECONFIGURE / MEDIUM | STACKIT DNS |
| `huaweicloud_kms_key.shop` | RECONFIGURE / MEDIUM | STACKIT KMS |
| `huaweicloud_networking_secgroup.web` | RECONFIGURE / LOW | STACKIT security groups |
| `huaweicloud_obs_bucket.media` | RECONFIGURE / MEDIUM | STACKIT Object Storage |
| `huaweicloud_vpc.shop` | RECONFIGURE / MEDIUM | STACKIT network |
| `huaweicloud_vpc_eip.web` | RECONFIGURE / MEDIUM | STACKIT public IP |

## Wave 2 — 3 unit(s)

| Unit | Class | Target |
|---|---|---|
| `huaweicloud_csms_secret.db` | RECONFIGURE / MEDIUM | STACKIT Secrets Manager |
| `huaweicloud_vpc_subnet.app` | RECONFIGURE / MEDIUM | STACKIT network |
| `huaweicloud_vpc_subnet.data` | RECONFIGURE / MEDIUM | STACKIT network |

## Wave 3 — 5 unit(s)

| Unit | Class | Target |
|---|---|---|
| `huaweicloud_cce_cluster.jobs` | REPLATFORM / MEDIUM | STACKIT Kubernetes Engine (SKE) |
| `huaweicloud_compute_instance.web` | RECONFIGURE / MEDIUM | STACKIT Compute Engine |
| `huaweicloud_dcs_instance.sessions` | RECONFIGURE / MEDIUM | STACKIT Key Value Store (Valkey) |
| `huaweicloud_lb_loadbalancer.web` | RECONFIGURE / MEDIUM | STACKIT Network Load Balancer |
| `huaweicloud_rds_instance.db` | REPLATFORM / MEDIUM | STACKIT PostgreSQL Flex |
Arbeitspaketeexecution/README.md
| Package | Owner | Phase | Steps | Resources | Decisions to answer | State |
|---|---|---|---|---|---|---|
| [`WP-01`](manual/actions.md) Set up by hand the resources the draft writes nothing for (foundation) | Network Architect | foundation | 3 | 3 | — | a person can start it now |
| [`WP-02`](manual/actions.md) Set up by hand the resources the draft writes nothing for (security) | Network Architect | security | 1 | 1 | — | a person can start it now |
| [`WP-03`](manual/actions.md) Set up by hand the resources the draft writes nothing for (security) | Owner assignment required | security | 2 | 2 | — | a person can start it now |
| [`WP-04`](manual/actions.md) Set up by hand the resources the draft writes nothing for (data services) | Data Architect | data services | 2 | 2 | — | a person can start it now |
| [`WP-05`](manual/actions.md) Set up by hand the resources the draft writes nothing for (data services) | Storage Architect | data services | 1 | 1 | — | a person can start it now |
| [`WP-06`](manual/actions.md) Set up by hand the resources the draft writes nothing for (platform services) | Network Architect | platform services | 1 | 1 | — | a person can start it now |
| [`WP-07`](manual/actions.md) Set up by hand the resources the draft writes nothing for (platform services) | Platform Architect | platform services | 1 | 1 | — | a person can start it now |
| [`WP-08`](manual/actions.md) Set up by hand the resources the draft writes nothing for (workloads) | Network Architect | workloads | 1 | 1 | — | a person can start it now |
| [`WP-09`](manual/actions.md) Set up by hand the resources the draft writes nothing for (workloads) | Platform Architect | workloads | 1 | 1 | — | a person can start it now |
| [`WP-10`](manual/actions.md) Carry out the cutover steps | Network Architect | cutover | 1 | 1 | — | a person can start it now |
  • Ein Paket hat keine Verantwortlichen

    WP-03 enthält Schlüssel und Secret und zeigt „Owner assignment required“, weil dieser Build keine verantwortliche Rolle für die Kategorie security kennt. Der Lauf führt das Ausführungspaket als unvollständig, bis jemand benannt ist.

  • Abhängigkeiten erklären die Wellen

    Das Datenbank-Secret wartet auf den Schlüssel, weil es ihn nennt. Alles in Welle 3 wartet auf die Subnetze, die längste Kette der Umgebung.

Die Entscheidungen, die Ihre Architekten treffen

  1. Region und Netzwerkdesign

    Beantworten Sie target.region, wählen Sie Adressbereiche für die zwei STACKIT-Netzwerke und entscheiden Sie, ob das Routing eine Network Area braucht.

  2. Datenbankversion und -methode

    Wählen Sie die PostgreSQL-Hauptversion bei STACKIT, dann den Umzug: Dump und Restore oder logische Replikation, je nach der Ausfallzeit, die Sie akzeptieren.

  3. Kopiermethode für den Cache

    Entscheiden Sie, wie Schlüssel ohne MIGRATE nach Valkey gelangen, und ordnen Sie Zugangsdaten und erlaubte Bereiche zu. Mehrere Datenbanknummern brauchen einen eigenen Plan.

  4. Umgang mit Schlüssel und Secret

    Neu verschlüsseln statt exportieren, den Algorithmus gegen STACKITs Liste prüfen und das Secret selbst in Abhängigkeitsreihenfolge schreiben. Das Tutorial zu KMS und CSMS auf dieser Website zeigt den Ablauf im Detail.

  5. Kubernetes-Version

    Der CCE-Cluster läuft auf v1.31. Die CCE-Seite dieser Website behandelt die SKE-Versionen, die als Ziel in Frage kommen.

  6. Cutover

    Senken Sie die DNS-TTL, liefern Sie die neuen Adressen für den Eintrag, schreiben Sie für jeden manuellen Schritt einen Rollback und vereinbaren Sie das Fenster.

Was dieser Lauf Ihnen nicht sagt

  • Kein STACKIT-Terraform

    Der Entwurfsordner enthält für diese Quelle Provider, Variablen und eine README. Die Zielressourcen sind in der Bewertung benannt, nicht geschrieben.

  • Keine Datenvolumen

    Größen, Änderungsraten und tolerierte Ausfallzeiten stehen nicht im Terraform. Dort steht NOT_PROVIDED, bis Sie sie liefern.

  • Keine Prüfung bei STACKIT

    Gegen ein STACKIT-Projekt wird nichts geplant oder angewendet. Das Paket sagt es selbst.

  • Kein Blick auf das, was der Code nicht zeigt

    Per Konsole angelegte Ressourcen, Anwendungskonfiguration und Daten auf Server-Platten liegen außerhalb des Laufs.

Fragen zu dieser Fallstudie

Ist das eine typische Huawei-Cloud-Umgebung?

Es ist ein bewusst gewöhnlicher Shop: Web, Datenbank, Cache, Speicher, Secrets, DNS und ein Job-Cluster. Die Kennzahlen gehören nur zu dieser Umgebung. Ihr eigener Lauf zählt anders.

Warum ist der Entwurf leer, wenn der Lauf erfolgreich war?

Der Lauf hat alle 14 Einheiten bewertet und sein Paket veröffentlicht. Für eine Huawei-Cloud-Quelle schreibt dieser Build keine STACKIT-Ressourcenblöcke; die Migrationsschritte sind also manuell, und der Terraform-Ordner enthält nur ein Gerüst.

Mit welchen Einheiten würden Sie beginnen?

Mit denen aus Welle 1 und 2, von denen alle anderen abhängen: Netzwerk, Schlüssel und Security Group. Die Sequenzdatei ist ein Ausgangspunkt für Ihren eigenen Zeitplan, kein Plan mit Terminen.

Kann ich das nachvollziehen?

Ja, mit Ihrem eigenen Terraform: Bewertung auf dem Ordner ausführen, dann index.html öffnen und in dieser Reihenfolge assessment.json, migration/technical-sequencing.md und execution/manual/actions.md lesen.

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.