Blog

Variable Rückverfolgbarkeit mit Terraform Cloud

Andrew Stump

Andrew Stump

Aktualisiert Oktober 15, 2025
5 Minuten

Kürzlich hatte ich die Gelegenheit, umgebungsbasierte Terrafrom-Arbeitsbereiche für einen Kunden aus der realen Welt zu implementieren. Wann immer Sie eine grundlegende Lösung auf die reale Welt erweitern müssen, treten unvorhergesehene Probleme auf. Das Hauptproblem ist eines, das viele größere Unternehmen haben, und zwar die Rückverfolgbarkeit. In diesem Artikel werde ich das Problem der Rückverfolgbarkeit zusammen mit einigen Lösungen behandeln, um es bei der Verwendung dieser Bereitstellungsmethode zu lösen.

Rückverfolgbarkeit

Bei der Entwicklung von Code ist die Rückverfolgbarkeit von wesentlicher Bedeutung, um die vorgenommenen Änderungen zu verfolgen. Durch die Nachverfolgung dieser Änderungen können wir Fehler schnell beheben und alles, was ein Problem verursacht hat, rückgängig machen. Mit der in meinem vorherigen Artikel beschriebenen Methode der umgebungsbasierten Arbeitsbereiche von Terraform Cloud erhalten wir diese Nachvollziehbarkeit für den Code selbst. Wenn wir jedoch die Terraform Cloud-Benutzeroberfläche für die Verwaltung unserer Variablen verwenden, können wir nicht nachverfolgen, wann diese geändert wurden, und müssen den Benutzern auch keine Berechtigungen für den Zugriff auf diese Variablen erteilen. Diese Methode funktioniert gut für kleine Teams und Projekte, aber sobald wir anfangen, eine große Anzahl von Ressourcen mit einer großen Anzahl von Variablen zu definieren und bereitzustellen, gerät das Ganze außer Kontrolle.

Bei der Implementierung dieser Methode für einen Kunden stellte sich heraus, dass der Ansatz mit den UI-Variablen nicht ausreichte und eine andere Lösung erforderlich war. Dies führte zur Entwicklung der folgenden Lösung.

Lösung

.tfvars Datei

Die Verwendung von .tfvars-Dateien pro Umgebung zur Definition von Variablen ist kein neuer Ansatz, aber die Implementierung in Terraform Cloud erfordert einige Anpassungen. Das erste, was Sie bei der Verwendung dieses Ansatzes beachten müssen, ist die Verzeichnisstruktur des Terraform-Verzeichnisses:

terraform/
|- env_vars/
|  |- dev.tfvars
|  |- stg.tfvars
|  |- prd.tfvars
|- main.tf
|- variables.tf

Wie Sie sehen können, haben wir jeden Satz von Umgebungsvariablen in eine eigene .tfvars Datei ausgelagert. Jeder Satz sollte die gleichen Variablen enthalten, aber mit unterschiedlichen Werten, z.B.:

dev.tfvars

env          = "dev"
machine_type = "e2-micro"

stg.tfvars

env          = "stg"
machine_type = "e2-small"

prd.tfvars

env          = "prd"
machine_type = "e2-medium"

und unsere Variablen werden in der Datei variables.tf definiert:

variable "env" {
  description = "Environment name"
  type        = string
}
variable "machine_type" {
  description = "Machine type to be used for the VM"
  type        = string
}

Anhand dieser Struktur können wir leicht erkennen, wann eine Variable während eines Git Merge oder Push hinzugefügt oder geändert wurde. Wenn Sie mit einer Standard-Git-Entwicklungsmethode arbeiten, können diese Änderungen vorgenommen und nachverfolgt werden, ohne dass Sie über die Benutzeroberfläche auf die Variablen zugreifen müssen.

HINWEIS: Da diese Dateien in Git gespeichert werden, ist es wichtig, dass keine sensiblen Werte in diesen Dateien gespeichert werden. Alle sensiblen Variablen sollten weiterhin über die Benutzeroberfläche hinzugefügt werden

Datei spezifizieren

Bei der lokalen Anwendung kann das -var-file Flag verwendet werden, um auszuwählen, welche .tfvars Datei die Variablen in die Bereitstellung einfügen soll. Bei der Anwendung über Terraform Cloud ist es jedoch nicht so einfach, dieses Flag dem Befehl hinzuzufügen. Da wir den apply-Befehl nicht direkt ändern können, müssen wir die Umgebungsvariable TF_CLI_ARGS verwenden. Diese Variable fungiert als Befehlszeilenargument und wird, wenn sie definiert ist, an das Ende des terraform apply Befehls angehängt. Damit Terraform Cloud diese Variable verwenden kann, müssen wir sie in der Benutzeroberfläche definieren. Dadurch müssen wir nicht mehr alle unsere Variablen in der Benutzeroberfläche separat definieren, sondern nur noch eine. Um diese Variable hinzuzufügen, gehen Sie einfach in der Benutzeroberfläche zu Ihrem Arbeitsbereich und fügen Sie unter Variables eine Variable hinzu:

Stellen Sie sicher, dass Sie diese Variable als Umgebungsvariable und nicht als Terraform-Variable hinzufügen. Dies geschieht, weil wir sie während der Laufzeit übergeben wollen. Stellen Sie außerdem sicher, dass der Pfad korrekt ist und mit der Arbeitsumgebung übereinstimmt, d.h. env_vars/{environment}.tfvars

HINWEIS: Aufgrund der Arbeitsweise von Terraform Cloud kann es notwendig sein, den Variablennamen in TF_CLI_ARGS_plan zu ändern, um Fehler zu vermeiden. Das liegt daran, dass Terraform Cloud die Variablen in die Planphase einfügt und diesen Plan dann für weitere Phasen speichert. Das bedeutet, dass es nicht möglich ist, die Variablen in späteren Phasen zu injizieren.

Wenn wir nun unseren Lauf starten, wählt terraform cloud die gewünschte .tfvars Datei aus und verwendet die darin enthaltenen Variablen, um sie in den Plan zu injizieren.

Ausgabe

Mit einer einfachen Ausgabe in der Datei main.tf können wir überprüfen, ob unsere Umgebungen wie erwartet reagieren:

output "vars" {
  value = "${var.env} - ${var.machine_type}"
}

Wenn wir die Umgebungen anwenden, erhalten wir

dev

stg

prd

Zusammenfassung

Mit unseren .tfvars Dateien haben wir nun unsere Variablen nach Umgebung getrennt. Genau das haben wir zuvor mit dem UI-Speicheransatz gemacht. Da die Dateien jedoch in Git gespeichert sind, können wir diesmal verfolgen, wann eine Variable aktualisiert wird. Außerdem haben alle Entwickler, die Zugriff auf das Repository haben, auch Zugriff auf die Variablen. So müssen wir nicht zusätzlich zu den Repository-Berechtigungen auch noch die Berechtigungen für die Variablen des Terraform Cloud UI-Arbeitsbereichs verwalten.

Dann wählt jeder Arbeitsbereich mithilfe unserer Terraform Cloud-Umgebungsvariable die zugehörige .tfvars Datei aus und verwendet sie für die Bereitstellung.

Verfasst von

Andrew Stump

Contact

Let’s discuss how we can support your journey.