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.
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.
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.
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.
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.
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.
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-Quelle | STACKIT-Ziel | Klasse |
|---|---|---|
| Amazon-ECS-Cluster und fünf Services | STACKIT-Kubernetes-Engine-Cluster (SKE) | REPLATFORM (6 Einheiten) |
| Aurora-Cluster für Catalog und Orders | MariaDB (Catalog) und PostgreSQL Flex (Orders) | REPLATFORM (2 Einheiten) |
| OpenSearch-Domain | STACKIT OpenSearch | Replatforming |
| DynamoDB-Tabelle für Carts | MongoDB Flex, alternativ PostgreSQL JSONB | Redesign |
| ElastiCache-Replication-Group | Key Value Store (Valkey) | Rekonfigurieren |
| Amazon-MQ-Broker | STACKIT RabbitMQ | Rekonfigurieren |
| Application Load Balancer | STACKIT Application Load Balancer | Rekonfigurieren |
| 10 IAM-Rollen | Service Accounts mit Rollenzuweisungen im Projekt | RECONFIGURE (10 Einheiten) |
| 12 Security Groups, VPC, NAT Gateway, Elastic IP | Security Groups, Netzwerke, impliziter Ausgangspfad | RECONFIGURE (15 Einheiten) |
| 4 Secrets, ein KMS-Schlüssel, eine Log Group | Secrets Manager, KMS, eine Logs-Instanz | RECONFIGURE (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.
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
}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.
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
}]
}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.