GCP TERRAFORM → STACKIT TERRAFORM

GCP-Terraform zu STACKIT-Terraform

StackToIT liest Ihr Google-Cloud-Terraform so, wie Ihre Entwickler es geschrieben haben, samt Modulen und Variablen, und schreibt STACKIT-Provider-Code, den Ihr Plattformteam prüfen, versionieren und über die eigene Pipeline ausrollen kann. Der Lauf auf dieser Seite hat die öffentliche Jump-Start-Solution „Dynamic Python Web App“ von Google Cloud (37 Ressourcen in 18 Dateien) unverändert an einem festgelegten Commit bewertet: 11 Migrationseinheiten und 5 weitere, die erst bei der Planung feststehen. 11 der 16 Einheiten sind als 10 STACKIT-Ressourcenblöcke entworfen, die die OpenTofu-Validierung akzeptiert. Den vollständigen Lauf finden Sie unter stacktoit.com/examples/gcp-python-webapp/.

Eine echte Konvertierung: Cloud SQL zu PostgreSQL Flex

Die Datenbank der Dynamic Python Web App von Google Cloud, unverändert bewertet mit einer Variablendatei aus einer Zeile (project_id = "example-project"). Links steht die Cloud-SQL-Instanz genau so, wie Google sie veröffentlicht, rechts der Block genau so, wie StackToIT ihn im Lauf geschrieben hat. Die Kommentare, die der Entwurf über jedem Block führt, sind hier weggelassen.

Google-Cloud-Quelleinfra/database.tf
resource "google_sql_database_instance" "postgres" {
  name                = var.random_suffix ? "${var.instance_name}-${random_id.suffix.hex}" : var.instance_name
  database_version    = "POSTGRES_14"
  project             = var.project_id
  region              = var.region
  deletion_protection = false

  settings {
    tier        = "db-custom-2-4096" # 2 CPU, 4GB Memory
    user_labels = var.labels
  }
  depends_on = [module.project_services]

}
STACKIT-Terraform von StackToITterraform/data.tf
resource "stackit_postgresflex_instance" "postgres" {
  project_id = var.project_id
  name       = "postgres"
  version    = "14"
  flavor_id  = "2.4"
  storage = {
    class = var.postgresflex_storage_class
    size  = var.postgres_storage_size
  }
  backup_schedule = "0 2 * * *"
  network = {
    acl = var.postgres_allowed_cidrs
  }
  retention_days = 32
}
  • Engine, Version und Größe übernommen

    Aus POSTGRES_14 wird eine PostgreSQL-Flex-Instanz in Version 14. Das Tier db-custom-2-4096 (2 CPU, 4 GB Arbeitsspeicher) wird zum Flavor 2.4, also 2 vCPU und 4 GiB auf einem einzelnen Knoten im eu01-Katalog vom 18. Oktober 2026.

  • Backups und Aufbewahrung

    Die Quelle nennt keine Startzeit für Backups. Der Entwurf setzt deshalb den Standard 02:00 täglich (0 2 * * *) und sagt das offen. Die Aufbewahrung der Quelle ist statisch nicht sichtbar; retention_days steht auf 32, dem STACKIT-Minimum (32 bis 90).

  • Werte, über die Sie entscheiden, werden zu Variablen

    Die Quelle nennt keine Datenträgergröße. Ein Cloud-SQL-Datenträger wächst von selbst, ein PostgreSQL-Flex-Speicher hat eine feste Größe: postgres_storage_size ist eine Variable (5 bis 4000 GB), die Sie nach einem Blick auf den aktuellen Datenträger setzen. Auch die Speicherklasse und die erlaubten CIDRs, die den Endpunkt der Instanz per ACL begrenzen, sind Variablen.

  • Jede Eigenschaft erfasst

    Von den 12 relevanten Eigenschaften dieser Cloud-SQL-Einheit (Instanz, Datenbank und Benutzer) sind 6 übernommen oder erklärt und 6 als nicht übernommen benannt: die Labels, das Benutzerpasswort, beide Namen und beide Löschrichtlinien ABANDON. Keine bleibt unerfasst. STACKIT erzeugt das Benutzerpasswort, und Benutzer und Datenbank legen Sie mit stackit_postgresflex_user und stackit_postgresflex_database an.

Zweite Konvertierung: Cloud-Run-Dienst zu STACKIT Kubernetes Engine

STACKIT kennt kein Cloud Run, deshalb wird der Django-API-Dienst zu einem Workload auf STACKIT Kubernetes Engine. Links steht der Dienst genau so, wie Google ihn veröffentlicht. Rechts stehen die Kubernetes-Manifeste, die StackToIT dafür geschrieben hat; sie laufen auf dem Cluster stackit_ske_cluster.containers aus terraform/kubernetes.tf, der auch den Migrationsjob trägt.

Google-Cloud-Quelleinfra/service.tf
resource "google_cloud_run_v2_service" "server" {
  name     = var.random_suffix ? "${var.service_name}-${random_id.suffix.hex}" : var.service_name
  location = var.region

  deletion_protection = false

  template {
    service_account = google_service_account.server.email
    containers {
      image = local.server_image
      env {
        name = "DJANGO_ENV"
        value_source {
          secret_key_ref {
            secret  = google_secret_manager_secret.django_settings.secret_id
            version = "latest"
          }
        }
      }
      env {
        name  = "PYTHONPATH"
        value = ""
      }
      env {
        name  = "DJANGO_SETTINGS_MODULE"
        value = "avocano_api.settings"
      }
      # These variables are a standard part of OpenTelemetry SDK configuration.
      # Details are available at
      # https://opentelemetry.io/docs/reference/specification/sdk-environment-variables/#exporter-selection
      env {
        name  = "OTEL_METRICS_EXPORTER"
        value = "none"
      }
      env {
        name  = "OTEL_TRACES_EXPORTER"
        value = "gcp_trace"
      }
      env {
        name  = "OTEL_PYTHON_EXCLUDED_URLS"
        value = "healthy"
      }
      # Supply the custom suffix, if used, to support automated CSRF code in application settings
      env {
        name  = "DEPLOYMENT_SUFFIX"
        value = var.random_suffix ? random_id.suffix.hex : ""
      }
      volume_mounts {
        name       = "cloudsql"
        mount_path = "/cloudsql"
      }
      liveness_probe {
        http_get {
          path = "/healthy"
        }
      }
    }
    labels = var.labels
    volumes {
      name = "cloudsql"
      cloud_sql_instance {
        instances = [google_sql_database_instance.postgres.connection_name]
      }
    }
  }
  traffic {
    percent = 100
    type    = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
  }

  depends_on = [
    google_secret_manager_secret_version.django_settings
  ]

  lifecycle {
    ignore_changes = [
      scaling,
    ]
  }
}
Kubernetes-Manifeste von StackToITterraform/kubernetes/server/manifests.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: server-env
  labels:
    app.kubernetes.io/name: server
data:
  DEPLOYMENT_SUFFIX: "" # fill in: the value is not copied from the source
  DJANGO_SETTINGS_MODULE: "" # fill in: the value is not copied from the source
  OTEL_METRICS_EXPORTER: "" # fill in: the value is not copied from the source
  OTEL_PYTHON_EXCLUDED_URLS: "" # fill in: the value is not copied from the source
  OTEL_TRACES_EXPORTER: "" # fill in: the value is not copied from the source
  PYTHONPATH: "" # fill in: the value is not copied from the source
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: server
  labels:
    app.kubernetes.io/name: server
spec:
  replicas: REQUIRED_SERVER_REPLICAS
  selector:
    matchLabels:
      app.kubernetes.io/name: server
  template:
    metadata:
      labels:
        app.kubernetes.io/name: server
    spec:
      containers:
      - name: container-1
        image: "us-docker.pkg.dev/hsa-public/containers/terraform-python-dynamic-webapp/server:v1.13.4"
        ports:
        - containerPort: 8080
          protocol: TCP
        env:
        - name: PORT
          value: "8080"
        - name: DJANGO_ENV
          valueFrom:
            secretKeyRef:
              name: server-secrets
              key: DJANGO_ENV
        - name: PYTHONPATH
          valueFrom:
            configMapKeyRef:
              name: server-env
              key: PYTHONPATH
        - name: DJANGO_SETTINGS_MODULE
          valueFrom:
            configMapKeyRef:
              name: server-env
              key: DJANGO_SETTINGS_MODULE
        - name: OTEL_METRICS_EXPORTER
          valueFrom:
            configMapKeyRef:
              name: server-env
              key: OTEL_METRICS_EXPORTER
        - name: OTEL_TRACES_EXPORTER
          valueFrom:
            configMapKeyRef:
              name: server-env
              key: OTEL_TRACES_EXPORTER
        - name: OTEL_PYTHON_EXCLUDED_URLS
          valueFrom:
            configMapKeyRef:
              name: server-env
              key: OTEL_PYTHON_EXCLUDED_URLS
        - name: DEPLOYMENT_SUFFIX
          valueFrom:
            configMapKeyRef:
              name: server-env
              key: DEPLOYMENT_SUFFIX
        livenessProbe:
          httpGet:
            path: "/healthy"
            port: 8080
        readinessProbe:
          tcpSocket:
            port: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: server
  labels:
    app.kubernetes.io/name: server
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/name: server
  ports:
  - name: p8080-tcp
    port: 8080
    targetPort: 8080
    protocol: TCP
  • Image, Port und Health Check übernommen

    Das Container-Image und der Liveness-Pfad /healthy stammen direkt aus dem Dienst. Die Quelle nennt keinen Port, deshalb nimmt der Entwurf 8080, den Standard von Cloud Run, und ergänzt einen Readiness-Check auf diesem Port.

  • Secret und Umgebung getrennt

    DJANGO_ENV stammt aus einem Secret-Manager-Secret und wird zur Referenz auf ein Kubernetes-Secret, server-secrets, das Sie anlegen. Die fünf einfachen Variablen werden zu den Schlüsseln der ConfigMap server-env; ihre Werte kopiert der Entwurf nicht, die tragen Sie ein.

  • Ein Cluster für Dienst und Job

    Der Cluster stackit_ske_cluster.containers hat einen Node Pool namens workloads. Maschinentyp sowie minimale und maximale Knotenzahl sind Variablen ohne Standardwert, die Zonen stehen standardmäßig auf eu01-1, eu01-2 und eu01-3. Der Migrationsjob wird zu einem Kubernetes Job auf demselben Cluster.

  • Replikazahl angehalten, Erreichbarkeit offen

    Die Zahl der Pods ist eine Pflichteingabe, deshalb hält das Apply, bis Sie sie setzen: 0 für den Apply-Schritt, danach die Zahl, die die Quelle fährt, sobald die Daten geladen sind. Der Service ist ein ClusterIP und macht noch nichts erreichbar: Ein Ingress oder ein Service vom Typ LoadBalancer samt Zertifikat und DNS-Eintrag ist Ihre Entscheidung.

  • Als nicht übernommen benannt

    Das Dienstkonto der Revision, die Labels, die Verkehrsaufteilung zwischen Revisionen, der Löschschutz und das Volume der Cloud-SQL-Verbindung. Die Pods laufen unter dem Standard-ServiceAccount, bis Sie die Identität festlegen, und erreichen die Datenbank über ihre Netzwerkadresse.

So funktioniert die Konvertierung

  1. Umgebung auflösen

    18 Dateien und das Registry-Modul project_services 18.0.0 werden zu einem Abhängigkeitsgraphen: 37 Ressourcen, 11 Migrationseinheiten und 29 Abhängigkeiten, offline gelesen. Fünf weitere Einheiten hängen von Variablen ab und stehen erst fest, wenn OpenTofu plant.

  2. Pro Ressource entscheiden

    Eine versionierte Regelbasis weist jeder Ressource anhand ihrer tatsächlichen Konfiguration ein STACKIT-Ziel und eine Migrationsklasse zu, mit einem Konfidenzwert.

  3. STACKIT-Code schreiben

    10 Ressourcenblöcke in Dateien pro Bereich: Daten, Kubernetes, Messaging, Speicher, Identität und Sicherheit, dazu 13 Variablen, Kubernetes-Manifeste und der auf 0.121.0 festgelegte STACKIT-Provider. Vier Einheiten werden als Module vorgeschlagen, die ausgeschaltet bleiben.

  4. Prüfen und nachverfolgen

    StackToIT hat seine 20 Entwurfsprüfungen ausgeführt, und keine hat einen Verstoß gefunden. OpenTofu 1.13.1 hat tofu init und tofu validate auf den Entwurf angewendet und ihn akzeptiert. Jeder Block trägt eine Trace-ID, die zu seiner Quellressource zurückführt.

Was der Lauf gemeldet hat

Ausgewählte Zeilen der Konsolenzusammenfassung dieses Laufs, wörtlich.

Konsolenzusammenfassung (ausgewählte Zeilen)console.txt
Source files:           18
Resources scanned:      37  (34 in the root module · 3 inside 1 module call)
Migration units:        11 known-present (11 instances) · 5 conditional
Unit dependencies:      29
Modules:                1 module call (1 external, 0 local): 1 loaded, 0 not downloaded, 0 invalid
Source checks:          Built-in source checks passed — OpenTofu validation of the source did not run (LOCK_FILE)

DIRECT              0  
RECONFIGURE         6  ████████████████ 54%
REPLATFORM          2  █████ 18%
CONTAINERIZE        2  █████ 18%
REDESIGN            0  
MANUAL_REVIEW       1  ██ 9%
BLOCKED             0    (the mapping class BLOCKED, not the execution blockers, which Migration readiness counts)
Confidence  HIGH 0 · MEDIUM 10 · LOW 1

69 source properties checked across 11 generated units: 29 carried or explained, 40 NOT CARRIED, 0 unaccounted — see engineering/architect-report.md.

STACKIT draft (this folder/terraform): 11 units generated · 4 proposed, switched off · 0 need no resource · 1 left for the architect · 13 variables
  StackToIT draft checks: PASSED (20 checks, none found a violation)
  OpenTofu validation: PASSED (tofu init -backend=false and tofu validate accepted the draft; tofu 1.13.1)
tofu validate: STATIC_TERRAFORM_VALIDATION_PASSED — deployment readiness and live target behaviour not verified

Next action   Allow the calls of STACKIT APIs that are not generally available — Owner: Platform Architect · details: index.html
  • 37 Ressourcen, 11 Einheiten, 5 zur Planzeit

    34 Ressourcen liegen im Root-Modul und 3 im Registry-Modul. Untergeordnete Ressourcen gehören zur Einheit, der sie dienen, und 8 unterstützende Ressourcen werden von den Einheiten gelesen, die sie nutzen. Fünf weitere Einheiten gibt es nur, wenn eine Variable zur Planzeit greift; sie sind ebenfalls bewertet und entsprechend gekennzeichnet.

  • 11 von 16 Einheiten im Entwurf

    11 Einheiten haben erzeugte STACKIT-Ressourcen, geschrieben als 10 Blöcke. 4 sind vorgeschlagen und bleiben ausgeschaltet, bis Sie entscheiden, und das Firebase-Projekt bleibt bei Ihrem Architekten. Der Entwurf hat 13 Variablen.

  • 69 Eigenschaften, 0 unerfasst

    29 Eigenschaften sind übernommen oder erklärt, und 40 sind als nicht übernommen benannt, in der Datei engineering/not-carried.csv. Die Prüfung umfasst die 11 erzeugten Einheiten.

  • Eine Klasse für jede Einheit

    Der Lauf hat 6-mal RECONFIGURE, 2-mal REPLATFORM, 2-mal CONTAINERIZE und 1-mal MANUAL_REVIEW festgelegt, und assessment.json nennt den Grund für jede Einheit.

  • Die nächste Aktion hat einen Verantwortlichen

    Der Plan hat 78 Schritte. 10 der 12 automatisierten Schritte sind frei von Entscheidungen und warten nur auf Werte wie project_id. 6 Entscheidungen sind offen; die erste, beim Platform Architect, ist die Freigabe von STACKIT-APIs, die nicht allgemein verfügbar sind. 27 Eingabeanfragen sind offen.

Wie die 11 Einheiten und die 5 zur Planzeit entschieden wurden

Google-Cloud-QuelleSTACKIT-EntwurfKlasse
google_sql_database_instance.postgresstackit_postgresflex_instance, Version 14, Flavor 2.4Replatforming
google_pubsub_topic.fauxstackit_rabbitmq_instance, geteilt: Das Topic wird zu einem Exchange, der von Hand in RabbitMQ angelegt wirdReplatforming
google_cloud_run_v2_service.serverKubernetes Deployment, ConfigMap und Service auf stackit_ske_cluster.containersContainerisierung
google_cloud_run_v2_job.migrateKubernetes Job auf demselben ClusterContainerisierung
google_secret_manager_secret.django_settingsstackit_secretsmanager_instance.migrated_secrets, geteiltRekonfiguration
google_secret_manager_secret.django_admin_passwordDieselbe stackit_secretsmanager_instance; die Werte schreibt ein API-Schritt, sie werden nie kopiertRekonfiguration
google_storage_bucket.mediastackit_objectstorage_bucket.media; die Objekte werden mit rclone kopiertRekonfiguration
google_service_account.serverstackit_service_account.serverRekonfiguration
google_service_account.clientstackit_service_account.clientRekonfiguration
google_service_account.automationstackit_service_account.automationRekonfiguration
google_firebase_project.defaultKein STACKIT-Ziel: STACKIT hat keine Backend-Plattform für Mobile- oder Web-Apps, Ihr Architekt entscheidet App für AppArchitekturentscheidung
google_service_account.init (zur Planzeit entschieden)stackit_service_account.initRekonfiguration
google_cloudbuild_trigger.activategcb (zur Planzeit entschieden)Vorgeschlagen, ausgeschaltet: ein Workflow in STACKIT Git Pipelines oder Ihre eigene CI/CDRedesign
google_cloudbuild_trigger.init (zur Planzeit entschieden)Vorgeschlagen, ausgeschaltet: ein Workflow in STACKIT Git Pipelines oder Ihre eigene CI/CDRedesign
google_cloudbuild_trigger.placeholder (zur Planzeit entschieden)Vorgeschlagen, ausgeschaltet: ein Workflow in STACKIT Git Pipelines oder Ihre eigene CI/CDRedesign
google_firebase_hosting_site.client (zur Planzeit entschieden)Vorgeschlagen, ausgeschaltet: Object Storage als Ursprung einer CDN-Distribution mit eigener DomainRedesign

Klassen, wie der Lauf sie festgelegt hat. Die ersten 11 Zeilen sind die Einheiten, die in der Quelle stehen; die letzten 5 gibt es nur, wenn eine Variable beim Planen von OpenTofu greift, und sie greift mit den Standardwerten dieses Laufs.

Was in terraform/ landet

Das STACKIT-Terraform dieses Laufs, so gegliedert, wie ein Plattformteam es pflegt.

data.tf
PostgreSQL-Flex-Instanz für die Cloud-SQL-Instanz
kubernetes.tf
Ein SKE-Cluster mit Node Pool für Cloud-Run-Dienst und -Job
kubernetes/
Manifeste für server (ConfigMap, Deployment, Service) und migrate (Job)
messaging.tf
RabbitMQ-Instanz für das Pub/Sub-Topic
rabbitmq/
Topologiedatei und Skript für Exchanges und Queues, die der Provider nicht anlegt
storage.tf
Object-Storage-Bucket für den Media-Bucket
identity.tf
Die 4 Dienstkonten
security.tf
Secrets-Manager-Instanz und der Migrationsbenutzer, der die Secrets schreibt
proposals.tf, proposals/
8 Module, jedes hinter einem Schalter, der aus bleibt, bis Sie entscheiden
handover/
Vorbereitungshinweise für den Datenbankumzug, die Medienkopie und den Clusterzugang
variables.tf
Die 13 Werte, die Ihr Team setzt oder bestätigt, jeweils mit Beschreibung
terraform.tf
Festgelegter STACKIT-Provider
README.md
Was der Entwurf enthält, welche Dienste zuerst freizuschalten sind, die Sicherheits-Checkliste und was nicht übernommen wird

Was zum Terraform dazukommt

Derselbe Lauf schreibt das Material, mit dem Ihre Architekten und Betreiber arbeiten.

assessment.json
Pro Einheit: Klasse, Konfidenz, STACKIT-Ziel, Begründung und Befunde
engineering/not-carried.csv
Die 40 Eigenschaften, die der Entwurf nicht übernimmt, je eine Zeile mit Begründung
engineering/trace/
Eine Trace-Datei pro Entwurfsdatei, von jedem Block zurück zur Quelle
architecture/
Diagramme der aktuellen und der Zielarchitektur, der Netzwerksicherheit und der Datenflüsse
migration/technical-sequencing.md
4 Wellen, aus den Abhängigkeiten zwischen den Einheiten berechnet
execution/
Das Ausführungspaket: 24 Arbeitspakete mit 64 manuellen Schritten, 2 API-Schritte, ein Deploy-Skript und ein Pipeline-Beispiel
decisions.json
Das strukturierte Entscheidungsregister, in diesem Lauf mit 6 zu treffenden Entscheidungen
financial/
Preiszeilen und Abdeckung: 2 von 8 STACKIT-Zeilen bepreist, kein Vergleich ausgewiesen
review/
Vorlagen für Ihre Antworten und Zielwerte, die der nächste Lauf einliest

Nachgewiesen an einer echten Google-Cloud-Umgebung

Die Dynamic Python Web App von Google Cloud, ein öffentliches Terraform-Projekt von Google: von StackToIT bewertet und vollständig veröffentlicht, genau so, wie der Lauf die Ergebnisse erzeugt hat.

Fallstudie ansehen (Englisch)
37
Terraform-Ressourcendefinitionen analysiert
11
Migrationseinheiten identifiziert
11
Zieleinheiten erzeugt, von 16 betrachteten
78
Planschritte erstellt

Fragen aus Plattformteams

Konvertiert StackToIT Terraform-Module?

Ja. StackToIT löst Registry- und lokale Module auf. Diese Umgebung ruft ein Registry-Modul auf, project_services 18.0.0, das der Lauf zusammen mit dem Root-Modul geladen und gelesen hat: Seine 3 Ressourcen gehören zu den 37 und bilden keine eigene Migrationseinheit.

Funktioniert das mit OpenTofu?

Ja. StackToIT liest Terraform- und OpenTofu-Root-Module. In diesem Lauf hat OpenTofu 1.13.1 tofu init -backend=false und tofu validate auf den STACKIT-Entwurf angewendet, beide Schritte waren erfolgreich. Das ist statische Validierung gegen das festgelegte Provider-Schema; gegen ein STACKIT-Projekt wurde kein Plan ausgeführt.

Was passiert mit einem Cloud-Run-Dienst und -Job?

STACKIT kennt kein Cloud Run. Der Lauf stuft den Dienst server und den Job migrate als CONTAINERIZE ein: Beide werden zu Kubernetes-Workloads auf einem SKE-Cluster. Image, Port, Health Check und Secret-Referenzen werden übernommen; Maschinentyp, Knotenzahlen und Pod-Anzahl sind Eingaben, und wer den Dienst aufrufen darf, entscheidet ein Mensch.

Was passiert mit Pub/Sub?

Das Topic wird zu einem Exchange auf einer geteilten STACKIT-RabbitMQ-Instanz (REPLATFORM), seine Subscriptions werden zu Queues. Namen, Zustellung, Aufbewahrung und Push-Einstellungen werden nicht erzeugt; eine Topologiedatei und ein Skript liegen bei. Zwei API-Schritte, für die RabbitMQ-Topologie und für Secrets Manager, rufen STACKIT-APIs auf, die der Lauf als Vorabversion behandelt (die Messaging-API ist eine Vorabversion, die Secrets-Manager-API nennt keinen Release-Status). Der Plan führt sie deshalb erst nach ausdrücklicher Freigabe aus.

Und Firebase?

Das Firebase-Projekt ist als MANUAL_REVIEW eingestuft. Keiner der 115 Ressourcentypen des festgelegten STACKIT-Providers ist eine Backend-Plattform für Mobile- oder Web-Apps (geprüft am 5. November 2026); ein Mensch entscheidet deshalb App für App, welches Backend die Firebase-Dienste ersetzt. Die Hosting-Site ist als Object Storage hinter einer CDN-Distribution vorgeschlagen und bleibt ausgeschaltet.

Was passiert mit dem Datenbankpasswort?

Es wird nicht kopiert. STACKIT erzeugt das Passwort des PostgreSQL-Flex-Benutzers, und Sie geben das neue an die Anwendung weiter.

Warum ist die Konfidenz auf MEDIUM begrenzt?

Das Repository enthält keine .terraform.lock.hcl und beschränkt google auf ">= 6, < 8", was das Release 8.4.0 ausschließt, gegen das die Wissensbasis geprüft wurde. Die OpenTofu-Validierung der Quelle lief deshalb nicht, und jede Einheit bleibt bei MEDIUM oder darunter. Die Abhilfe ist benannt: die Lock-Datei einchecken, die tofu init schreibt, und erneut laufen lassen.

Gibt es einen Preisvergleich?

In diesem Lauf nicht. Der Preis-Cache enthält keinen Google-Cloud-Preis, deshalb weist der Bericht keine Ersparnis aus. 2 von 8 STACKIT-Zeilen sind bepreist, 164,67 EUR im Monat als Teilsumme zu Listenpreisen, und der Bericht nennt die Befehle, die die fehlenden Preise nachladen.

Wie wiederhole ich den Lauf?

Das Upstream-Repository am Commit 7c9e8fb klonen, eine Variablendatei mit der einen Zeile project_id = "example-project" anlegen und stacktoit assess im Ordner infra ausführen: stacktoit assess . ../../run-python-webapp --var-file ../../example.tfvars. Danach stacktoit verify auf den Ausgabeordner anwenden; bei der veröffentlichten Kopie stimmen 146 Dateien mit manifest.json überein.

Wer führt das Apply des STACKIT-Terraform aus?

Ihr Team über Ihre eigene Pipeline, nachdem Ihre Architekten den Entwurf geprüft haben. StackToIT ändert in keiner Cloud etwas; die Variable region steht standardmäßig auf eu01 und ist der eine Standardwert, den der Bericht von einem Menschen bestätigen lässt.

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.

Hinterlassen Sie Ihre Kontaktdaten, dann melden sich unsere Spezialisten bei Ihnen.

Lieber direkt schreiben? connect@stacktoit.com

Wir verwenden Ihre Angaben nur, um diese Anfrage zu beantworten und ein mögliches Pilotprojekt zu besprechen. Datenschutz