terraform.tfstate ·
Remote State ·
State Locking ·
terraform state ·
Sensitive Data ·
Backends
Der Terraform State ist das Herzstück von Terraform – er speichert den aktuellen Zustand der verwalteten Infrastruktur. Diese Konzepte sind essenziell für die Zusammenarbeit im Team und die sichere Verwaltung von Ressourcen.
terraform.tfstate ist die zentrale Datei, die den aktuellen Zustand der von Terraform verwalteten Infrastruktur speichert. Sie enthält alle Ressourcen, ihre Attribute und Abhängigkeiten.
| Feld | Beschreibung |
|---|---|
| version | State-Format-Version |
| terraform_version | Verwendete Terraform-Version |
| resources | Liste aller verwalteten Ressourcen |
| outputs | Definierte Outputs mit Werten |
| serial | Inkrementelle Versionsnummer bei Änderungen |
| lineage | Eindeutige ID der State-Datei |
Remote State ermöglicht die Speicherung der State-Datei an einem zentralen Ort – ideal für Teamarbeit und Continuous Integration. Terraform unterstützt viele Backends.
| Backend | Beschreibung |
|---|---|
| s3 | AWS S3 (mit DynamoDB für State Locking) |
| azurerm | Azure Storage Account |
| gcs | Google Cloud Storage |
| terraform | Terraform Cloud / Terraform Enterprise |
| consul | HashiCorp Consul |
| kubernetes | Kubernetes Secrets |
| local | Lokale Datei (Standard) |
State Locking verhindert, dass mehrere Benutzer gleichzeitig Änderungen an der State-Datei vornehmen. Es wird von unterstützten Backends (S3+DynamoDB, Azure Storage) automatisch bereitgestellt.
terraform force-unlock sollte nur verwendet werden, wenn das Lock tatsächlich "stecken geblieben" ist (z.B. nach einem Abbruch). Ein manuelles Entsperren kann zu State-Korruption führen!
terraform state Befehle ermöglichen die direkte Manipulation und Einsicht in die State-Datei – nützlich für Refactoring, Fehlerbehebung und Migration.
| Befehl | Beschreibung |
|---|---|
| terraform state list | Alle Ressourcen im State auflisten |
| terraform state show <resource> | Details einer Ressource anzeigen |
| terraform state mv <src> <dst> | Ressource umbenennen oder verschieben |
| terraform state rm <resource> | Ressource aus dem State entfernen |
| terraform state pull | State aus Remote-Backend herunterladen |
| terraform state push | State in Remote-Backend hochladen |
| terraform state replace-provider | Provider in State ersetzen |
terraform state mv ist ideal für Refactoring – Sie können Ressourcen umbenennen, ohne sie neu erstellen zu müssen. terraform state rm entfernt Ressourcen nur aus dem State, die tatsächliche Infrastruktur bleibt erhalten.
Sensitive Data im State – Terraform speichert alle Werte im Klartext in der State-Datei. Verwenden Sie sensitive Attribute und Outputs, um sensible Daten zu schützen.
| Maßnahme | Beschreibung |
|---|---|
| Remote State | State in sicherem Backend speichern (S3, Azure, GCS mit Verschlüsselung) |
| State Encryption | Verschlüsselung für State-Backend aktivieren (z.B. SSE-S3) |
| sensitive = true | Ressourcen-Attribute als sensitive markieren |
| sensitive Outputs | Outputs als sensitive definieren (werden nicht im Log angezeigt) |
| .gitignore | terraform.tfstate und .terraform/ in .gitignore ausschließen |
| Variables | Sensible Variablen als sensitive deklarieren |
sensitive Outputs und Variablen, um zu verhindern, dass sensible Daten in Logs oder Konsolenausgaben erscheinen. Nutzen Sie für Produktion immer Remote State mit Verschlüsselung.
Backends definieren, wo der State gespeichert wird. Die Konfiguration erfolgt im terraform Block. Beim Wechsel des Backends muss terraform init mit speziellen Optionen ausgeführt werden.
| Option | Beschreibung |
|---|---|
| -reconfigure | Backend neu konfigurieren (ignoriert vorhandene Konfiguration) |
| -migrate-state | State von altem zu neuem Backend migrieren |
| -force-copy | Migration ohne Bestätigung erzwingen |
| -backend-config | Backend-Konfiguration über CLI übergeben |
-migrate-state beim Wechsel von lokalem zu Remote-State. Bei einem reinen Backend-Wechsel ohne Migration verwenden Sie -reconfigure.
tfstate
Remote
Lock
state
sensitive
backend
terraform state list ·
terraform state show aws_instance.web ·
terraform state mv aws_instance.old aws_instance.new ·
terraform init -migrate-state