AWS → STACKIT · FALLSTUDIE

Das AWS Retail Store Sample, von Anfang bis Ende bewertet

Die Retail Store Sample App von AWS Containers ist eine öffentliche Umgebung mit fünf Diensten auf Amazon ECS und fünf verwalteten Datendiensten dahinter. StackToIT las sie unverändert: 282 Ressourcen, 44 Migrationseinheiten, keine davon DIRECT. Diese Fallstudie folgt dem Paket von der ersten Zahl bis zu den Entscheidungen, an denen das Projekt hängt, und sagt klar, was der Lauf nicht belegt.

Bewiesen an einer echten AWS-Umgebung

Die AWS Retail Store Sample App, ein öffentliches Terraform-Projekt von AWS, von StackToIT bewertet und vollständig veröffentlicht, genau so, wie der Lauf es geschrieben hat.

Fallstudie ansehen (Englisch)
282
Terraform-Ressourcendefinitionen analysiert
44
Migrationseinheiten identifiziert
38
Zieleinheiten erzeugt, von 52 betrachteten
331
Planschritte erstellt

So lesen Sie das Paket

In der Reihenfolge, in der ein Architekt die Dateien öffnen würde. Pfade sind relativ zum Ausgabeordner des veröffentlichten Laufs.

  1. Mit Zusammenfassung und erstem Blocker beginnen

    index.html und executive/brief.md nennen die Zahlen und die erste erforderliche Handlung: Aufrufe von STACKIT-APIs zulassen, die nicht allgemein verfügbar sind. Vier Schritte warten auf diese Antwort.

  2. Die Klassen lesen

    assessment.json enthält jede Einheit mit Klasse, Konfidenz und Begründung. Von 44 Einheiten sind 34 RECONFIGURE, 9 REPLATFORM und 1 REDESIGN. Keine hat die Konfidenz HIGH, weil die Provider-Version der Quelle nicht festgelegt ist.

  3. Die Entscheidungen treffen

    executive/decisions.md zählt 16 zu treffende Entscheidungen: 9 Planentscheidungen mit benannten Optionen, 5 manuelle Aktionen und 2 Planaussagen; decisions.json enthält die Datensätze. Zu den Planentscheidungen gehören der Datenumzug, das Downgrade der Engine-Version, der Ingress-Pfad und die Pod-Segmentierung.

  4. Der Reihenfolge folgen

    migration/technical-sequencing.md ordnet Einheiten nach Abhängigkeit in Wellen; migration/data-movement.md führt die sechs zustandsbehafteten Einheiten auf, die eine Methode brauchen.

  5. Den Entwurf öffnen

    terraform/ enthält 38 erzeugte Einheiten. Jeder Block trägt Kommentare dazu, was nicht übernommen wurde, jeweils mit Verweis auf den Engineering-Trace.

  6. Die manuellen Schritte abarbeiten

    execution/manual/actions.md gruppiert die manuelle Arbeit in Pakete mit Verantwortlichem, einer Bedingung für „erledigt“ und einer Rollback-Zeile.

Was aus den 44 Einheiten wurde

Nur vorhandene Einheiten. Acht weitere Einheiten hängen von Werten ab, die OpenTofu erst beim Plan entscheidet, und werden getrennt gezählt.

AWS-QuelleSTACKIT-ZielKlasse
Amazon-ECS-Cluster und fünf ServicesSTACKIT-Kubernetes-Engine-Cluster (SKE)REPLATFORM (6 Einheiten)
Aurora-Cluster für Catalog und OrdersMariaDB (Catalog) und PostgreSQL Flex (Orders)REPLATFORM (2 Einheiten)
OpenSearch-DomainSTACKIT OpenSearchReplatforming
DynamoDB-Tabelle für CartsMongoDB Flex, alternativ PostgreSQL JSONBRedesign
ElastiCache-Replication-GroupKey Value Store (Valkey)Rekonfigurieren
Amazon-MQ-BrokerSTACKIT RabbitMQRekonfigurieren
Application Load BalancerSTACKIT Application Load BalancerRekonfigurieren
10 IAM-RollenService Accounts mit Rollenzuweisungen im ProjektRECONFIGURE (10 Einheiten)
12 Security Groups, VPC, NAT Gateway, Elastic IPSecurity Groups, Netzwerke, impliziter AusgangspfadRECONFIGURE (15 Einheiten)
4 Secrets, ein KMS-Schlüssel, eine Log GroupSecrets Manager, KMS, eine Logs-InstanzRECONFIGURE (6 Einheiten)

Nach Bereichen sind die 44 Einheiten 16 Netzwerk, 15 Identität, 6 Compute, 5 Daten, 1 Observability und 1 Messaging.

Zwei Datendienste, nebeneinander entworfen

Blöcke aus terraform/data.tf des veröffentlichten Laufs, ohne die Kommentarzeilen darüber. Links die Orders-Datenbank, ein Aurora-Cluster, umgezogen auf PostgreSQL Flex. Rechts die Carts-Tabelle, eine DynamoDB-Tabelle, umgezogen auf MongoDB Flex als Alternative, nicht als Gegenstück.

Orders-Datenbankterraform/data.tf
resource "stackit_postgresflex_instance" "dependencies_orders_rds_this" {
  project_id = var.project_id
  name       = "retail-store-ecs-orders"
  version    = "15"
  flavor_id  = "2.4"
  storage = {
    class = var.postgresflex_storage_class
    size  = var.orders_rds_storage_size
  }
  backup_schedule = "0 2 * * *"
  network = {
    acl          = coalescelist(var.orders_rds_allowed_cidrs, stackit_ske_cluster.retail_app_ecs_cluster.egress_address_ranges)
    access_scope = var.orders_rds_access_scope == "SNA" ? "SNA" : null
  }
  retention_days = 32
}
Carts-Tabelleterraform/data.tf
resource "stackit_mongodbflex_instance" "dynamodb_tables" {
  project_id = var.project_id
  name       = "dynamodb-tables"
  acl        = var.dynamodb_tables_allowed_cidrs
  version    = var.dynamodb_tables_version
  flavor = {
    cpu = var.dynamodb_tables_cpu
    ram = var.dynamodb_tables_ram
  }
  replicas = 3
  storage = {
    class = var.mongodbflex_storage_class
    size  = var.dynamodb_tables_storage_gb
  }
  backup_schedule = "0 2 * * *"
  options = {
    type                       = "Replica"
    point_in_time_window_hours = var.dynamodb_tables_pitr_hours
  }
}
  • Größen aus der Quelle abgeleitet

    Plan und Flavor folgen aus der Größe der Quelle. Der Lauf stellt dazu eine Entscheidung; der Standardwert ist als unbestätigt markiert.

  • Zugriffslisten

    Die Orders-Datenbank lässt die ausgehenden Adressbereiche des Clusters zu, sofern Sie keine CIDRs liefern; der Datenbankblock hängt also von der Cluster-Ressource ab.

  • DynamoDB ist ein Redesign

    Schlüsseldesign, Kapazitätsmodi, Streams und bedingte Schreibvorgänge werden nicht übernommen. Die Datenzugriffsschicht wird gegen die MongoDB-API neu geschrieben, und die Daten ziehen per Export und Import um.

Compute und Logging

Der Cluster, der die ECS-Services ersetzt, und die Logs-Instanz für die Task-Logs. Die Node-Pool-Größen des Clusters sind Variablen.

SKE-Clusterterraform/kubernetes.tf
resource "stackit_ske_cluster" "retail_app_ecs_cluster" {
  project_id = var.project_id
  name       = "reta-7b7ce2"
  node_pools = [{
    name               = "workloads"
    machine_type       = var.cluster_machine_type
    minimum            = var.cluster_nodes_min
    maximum            = var.cluster_nodes_max
    availability_zones = var.availability_zones
  }]
}
Logs-Instanzterraform/observability.tf
resource "stackit_logs_instance" "logs_retention_180d" {
  project_id     = var.project_id
  display_name   = "logs-retention-180d"
  retention_days = 180
}
  • Die Workloads sind Manifeste

    terraform/kubernetes/ enthält je Service einen Manifestsatz. Die ausgehenden Adressbereiche des Clusters werden berechnet, daher warten die Zugriffslisten der verwalteten Dienste darauf.

  • 180 Tage sind die Obergrenze

    Die Quell-Log-Group bewahrt ihre Logs unbegrenzt auf; das kann eine Logs-Instanz nicht. Der Lauf hält fest, dass ältere Logs nicht erhalten bleiben, und stellt die Entscheidung zur Archivierung.

Die Entscheidungen, an denen das Projekt hängt

  • Wie die Daten umziehen

    Sechs zustandsbehaftete Einheiten brauchen eine Methode: Export und Import, Replikation durch die Engine oder ein eigenes Werkzeug. Die Quelle nennt weder Größe noch Änderungsrate noch tolerierte Ausfallzeit; daher wählt der Lauf keinen Mechanismus.

  • Catalog auf OpenSearch

    Der Catalog-Service hängt von OpenSearch 3.3 ab, während die Region Version 2 anbot. Optionen: Daten in die angebotene Version 2 übernehmen, die Engine selbst auf SKE betreiben oder warten. Bis dahin ist die Anwendung blockiert.

  • Carts und Checkout

    DynamoDB hat kein Gegenstück; die Services, die es nutzen, brauchen daher Codeänderungen. Checkout teilt zudem den Valkey-Endpunkt, der nur TLS annimmt.

  • Ingress-Pfad

    Einen NodePort mit dem Load Balancer auf Node-IPs behalten, einen Ingress Controller betreiben oder die Load-Balancer-Erweiterung für SKE nutzen. Jeder Weg verändert, was Ihr Team betreibt.

  • Pod-Segmentierung

    Security Groups auf Node-Ebene sind gröber als die Gruppen je Service der Quelle. NetworkPolicies werden von Hand geschrieben.

  • Öffentliche Endpunkte und feste Egress-Adresse

    Verwaltete Dienste haben standardmäßig öffentliche Endpunkte hinter Zugriffslisten. Die feste Adresse des NAT Gateways entfällt, wenn Server keine eigene öffentliche IP erhalten.

Was dieser Lauf nicht belegt

Vom Lauf selbst genannt, nicht nachträglich ergänzt.

  • Die Quelle wurde nicht validiert

    Die Upstream-Umgebung hat keine Provider-Lock-Datei, daher lief die OpenTofu-Validierung der Quelle nicht, und jede Einheit ist auf MEDIUM-Konfidenz begrenzt.

  • Nichts wurde auf STACKIT geplant oder angewendet

    Der Entwurf bestand die statische Validierung gegen das Provider-Schema. Gegen ein echtes Projekt lief kein Plan, und keine Einheit ist für die Automatisierung freigegeben.

  • Kein Kostenvergleich

    Die Quelle nennt keine AWS-Region, daher wurde kein AWS-Preis abgerufen. Fünf von vierzehn STACKIT-Zeilen sind bepreist; das ist ein Teilwert und keine Ersparnis.

  • Keine Anwendung ist bereit

    Keine der fünf Anwendungen ist bereit: Catalog ist blockiert, Carts und Checkout brauchen ein Redesign, Orders und UI sind nicht bereit, weil Umgebungswerte oder die Workload-Identität noch offen sind.

Fragen zu dieser Fallstudie

Ist die Retail-Store-Umgebung bearbeitet?

Nein. Der Lauf bewertete die ECS-Terraform-Wurzel so, wie sie upstream veröffentlicht ist, samt der lokalen Module, die sie aufruft. Der Quellcode wird nicht erneut veröffentlicht; das verlinkte Repository enthält ihn.

Warum ist nichts DIRECT?

Jede vorhandene Einheit braucht mindestens eine Konfigurationsänderung, etwa bei Identität, Netzwerken oder Endpunkten. Einem Lift-and-Shift am nächsten kommt die Gruppe der RECONFIGURE-Einheiten.

Wie viele Schritte enthält der Plan?

331 Planschritte: 53 OpenTofu-Schritte, 4 STACKIT-API-Schritte hinter einem Opt-in, 272 manuelle Schritte und 2 abgelehnte. Keiner der 57 automatisierten Schritte läuft so, wie er geschrieben ist: 48 sind frei von Entscheidungen und manuellen Voraussetzungen, und alle 48 warten auf einen Wert wie die Projekt-ID.

Kann ich das Paket selbst prüfen?

Ja. Die Ausgabe ist unverändert mit ihrem Manifest veröffentlicht, und der Prüfschritt bestätigt, dass alle 145 Dateien nach Größe und SHA-256 übereinstimmen. Für Ihre eigene Umgebung erzeugt eine Bewertung ihrer Terraform-Dateien ein Paket derselben Art.

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.