Blog

Wie Sie Terraform Arbeitsbereiche zur Verwaltung der umgebungsbasierten Konfiguration verwenden

Luca Cavallin

Aktualisiert Oktober 20, 2025
3 Minuten

Ich habe vor kurzem an einem 100%-Terraform-basierten Projekt gearbeitet, bei dem ich ausgiebig von Workspaces und Modulen Gebrauch gemacht habe, um die Infrastruktur für verschiedene Umgebungen in der Google Cloud einfach zu verwalten. In diesem Blogbeitrag wird die Struktur erläutert, die sich meiner Meinung nach am besten für diesen Zweck eignet.

Was sind Terraform Arbeitsbereiche?

Arbeitsbereiche sind separate Instanzen von Zustandsdaten, die vom selben Arbeitsverzeichnis aus verwendet werden können. Sie können Arbeitsbereiche verwenden, um mehrere sich nicht überschneidende Gruppen von Ressourcen mit derselben Konfiguration zu verwalten. Um einen neuen Arbeitsbereich zu erstellen und zu diesem zu wechseln, führen Sie terraform init aus:

terraform workspace create <name>

Um zu anderen Arbeitsbereichen zu wechseln, führen Sie stattdessen aus:

terraform workspace select <name>

Verwenden Sie den ausgewählten Arbeitsbereich in den Terraform-Dateien

Der ausgewählte Arbeitsbereich wird in Ihren .tf Dateien über die Variable terraform.workspace (eine Zeichenkette) verfügbar gemacht. Ich weise den Wert gerne einer lokalen Variable namens environment zu (da der Name des Arbeitsbereichs und der Name der Umgebung übereinstimmen).

locals {
    environment = terraform.workspace
}

Fügen Sie die umgebungsbasierte Konfiguration zu einem neuen Modul hinzu

Da Sie nun eine Variable haben, die die Umgebung enthält (es ist nur eine Zeichenkette), mit der Sie arbeiten, können Sie ein Modul erstellen, das die umgebungsbasierte Konfiguration enthält. Ich habe ein vars Modul im modules Verzeichnis meines Repositorys erstellt, das mindestens die folgenden Dateien enthält:

  • main.tf Diese Datei wird sich nie ändern, da sie nur benötigt wird, um die Variablen zu aggregieren, die exportiert werden sollen.
locals {
  environments = {
    "development" : local.development,
    "acceptance" : local.acceptance,
    "production" : local.production
  }
}
  • outputs.tf Auch diese Datei wird sich nie ändern. Hier definiere ich die Ausgabe des Moduls vars, so dass es von jeder anderen Stelle im Terraform-Repository verwendet werden kann. Die exportierten Werte basieren auf dem ausgewählten Arbeitsbereich.
output "env" {
value = local.environments[var.environment]
}
  • variables.tf Diese Datei definiert die Variablen, die zur Initialisierung des Moduls erforderlich sind. Die outputs des Moduls basiert auf dem ausgewählten Arbeitsbereich (Umgebung), den es kennen muss.
variable "environment" {
description = "The environment which to fetch the configuration for."
type = string
}
  • development.tf & acceptance.tf & production.tf Diese Dateien enthalten die tatsächlichen Werte, die sich je nach Umgebung unterscheiden. Wenn Sie beispielsweise einen GKE-Cluster einrichten, möchten Sie vielleicht billige Maschinen für Ihren Entwicklungs-Knotenpool und leistungsfähigere Maschinen für die Produktion verwenden. Dies können Sie erreichen, indem Sie in jeder Umgebung einen node_pool_machine_type Wert definieren, etwa so:
// in development.tf
locals {
development = {
    node_pool_machine_type = "n2-standard-2"
}
}
// in acceptance.tf
locals {
acceptance = {
    node_pool_machine_type = "n2-standard-4"
}
}
// in production.tf
locals {
production = {
    node_pool_machine_type = "n2-standard-8"
}
}

Das Modul vars ist nun bereit, von einer beliebigen Stelle im Repository aus verwendet zu werden, zum Beispiel in der Datei main.tf. Um auf die Konfigurationswerte zuzugreifen, initialisieren Sie das Modul wie folgt:

#
# Fetch variables based on Environment
#
module "vars" {
    source      = "./modules/vars"
    environment = local.environment
}

Die korrekte Konfiguration wird auf der Grundlage des Terraform Workspace ( environment name) zurückgegeben, der ihr übergeben wird, und die Werte können über module.vars.env.<variable-name> abgerufen werden. Zum Beispiel:

node_pools = [
    {
        ...
        machine_type = module.vars.env.node_pool_machine_type
        ...
    }
]

Zusammenfassung

In diesem Blogbeitrag habe ich Ihnen gezeigt, wie Sie Terraform Workspaces verwenden können, um je nach Arbeitsumgebung zwischen verschiedenen Konfigurationen zu wechseln und dabei die Einrichtung so sauber und einfach wie möglich zu halten. Sind Sie an weiteren Artikeln über Terraform interessiert? Schauen Sie sich an , wie Sie ElasticSearch auf GKE mit Terraform und Helm bereitstellen! Credits: Kopfzeilenbild von Luca Cavallin auf nylavak.com

Verfasst von

Luca Cavallin

Luca is a Software Engineer and Trainer with full-stack experience ranging from distributed systems to cross-platform apps. He is currently interested in building modern, serverless solutions on Google Cloud using Golang, Rust and React and leveraging SRE and Agile practices. Luca holds 3 Google Cloud certifications, he is part of the Google Developers Experts community and he is the co-organizer of the Google Cloud User Group that Binx.io holds with Google.

Contact

Let’s discuss how we can support your journey.