Zum Inhalt springen
Aback Tools Logo

Was prüft terraform validate tatsächlich?

terraform validate prüft HCL-Syntax, Provider-Schema-Konformität und interne Referenzen - aber nicht Ressourcenwerte, State oder Berechtigungen. Hier steht der genaue Umfang.

DH
Tutorials & How-Tos12 Min. Lesezeit2,700 Wörter

terraform validate ist einer der ersten Befehle, die Terraform-Nutzer lernen, aber auch einer der am häufigsten missverstandenen. Es verbindet sich mit keinem Cloud-Provider. Es prüft nicht, ob deine Ressourcenwerte in der realen Welt gültig sind. Es schaut nicht in deinen State. Was es tut, ist schnell, sicher und unverzichtbar - doch genau zu verstehen, wo es aufhört, ist der Unterschied zwischen einer zuverlässigen CI-Pipeline und einem falschen Sicherheitsgefühl vor terraform apply.

0API-Aufrufevollständig offline durchgeführte statische Analyse
3PrüfkategorienSyntax, Schema, Referenzen
< 2 sTypische Laufzeitbei den meisten realen Konfigurationen

Was terraform validate ist

terraform validate ist ein eingebautes Terraform-Unterkommando, das eine statische Analyse deiner Konfigurationsdateien durchführt. Es liest jede .tf- und .tfvars-Datei im aktuellen Arbeitsverzeichnis - und rekursiv alle lokalen Module -, parst sie und prüft, ob die Konfiguration intern konsistent und strukturell gültig ist.

Statische Analyse, keine Ausführung

Das entscheidende Merkmal von terraform validate ist, dass es vollständig statisch ist. Es werden keine Netzwerkverbindungen aufgebaut, keine Provider-APIs aufgerufen und keine State-Datei gelesen. Die Prüfung findet vollständig im Speicher auf der Maschine statt, die den Befehl ausführt. Dadurch ist es in jeder Umgebung sicher, auch auf CI-Runnern ohne Cloud-Zugangsdaten, und es ist bei den meisten realen Konfigurationen in unter zwei Sekunden fertig.

Das steht im Gegensatz zu terraform plan, das dieselben statischen Prüfungen ausführt und dann Provider-APIs kontaktiert, um ein Diff gegen echte Infrastruktur zu berechnen. Validate ist das leichte erste Tor; plan ist das umfassende Tor vor dem Apply. Beide nacheinander auszuführen gibt dir die breiteste Abdeckung, bevor du dich auf eine Infrastrukturänderung festlegst.

Note

terraform validate wurde in Terraform 0.12 deutlich verbessert, als HCL2 zur Konfigurationssprache wurde. Vor 0.12 war die Validierung oberflächlich und viele strukturelle Fehler tauchten erst zur Plan-Zeit auf. Seit 0.12 verfügt validate über ein vollständiges Typsystem und Schema-Kenntnis, was es als eigenständige Prüfung wesentlich nützlicher macht.

Die drei Betriebsmodi

  • Standardmodus – läuft nach terraform init; prüft Syntax, Schema gegen heruntergeladene Provider-Plugins und dateiübergreifende Referenzen
  • Ohne init – existiert kein .terraform-Verzeichnis, läuft validate weiter, überspringt aber Provider-Schema-Prüfungen und meldet nur HCL-Parse-Fehler und Referenzprobleme, die ohne Provider-Metadaten auflösbar sind
  • JSON-Modus (-json) – gibt ein strukturiertes JSON-Objekt mit einem booleschen valid, einer Ganzzahl error_count und einem Array diagnostics aus, geeignet für CI-Auswertung und Editor-Integration

Was terraform validate tatsächlich prüft

Die drei Kategorien zu verstehen, die terraform validate abdeckt, hilft dir, genau zu wissen, was eine bestandene Validierung garantiert - und wo diese Garantie endet.

1. Korrektheit der HCL-Syntax

Der erste Durchgang parst jede .tf-Datei auf gültige HCL2-Syntax. Das erkennt nicht geschlossene Klammern, fehlende Gleichheitszeichen bei Attributzuweisungen, ungültige Blockdefinitionen, falsche Verwendung der Heredoc-Syntax und jede andere Konstruktion, die kein gültiges HCL ist. Eine Datei, die diese Prüfung nicht besteht, kann von Terraform überhaupt nicht gelesen werden - plan und apply würden ebenfalls fehlschlagen. Validate erkennt diese Fehler sofort mit Dateipfad und Zeilennummer.

2. Konformität mit dem Provider-Schema

Nach dem Parsen prüft validate jeden Ressourcenblock, Data-Source-Block und jede Provider-Konfiguration gegen das Schema des zuständigen Provider-Plugins. Schemas legen fest, welche Argumente gültig sind, welche erforderlich und welche optional sind und welchen Typ jedes Argument erwartet (string, number, bool, list, map, object). Validate erkennt ein Argument, das es für einen Ressourcentyp nicht gibt, ein Argument mit falschem Typ (etwa einen String, wo eine Zahl erwartet wird) und ein vollständig fehlendes Pflichtargument.

Tip

Bevor validate Provider-Schemas prüfen kann, musst du terraform init im Arbeitsverzeichnis ausführen. Init lädt die Provider-Plugins herunter und legt sie im .terraform-Verzeichnis ab. Ohne das hat validate kein Schema zum Vergleichen und überspringt die Validierung auf Ressourcenebene. Der Standard-CI-Workflow lautet immer init → validate → plan.

3. Gültigkeit interner Referenzen

Die dritte Kategorie ist die Prüfung von Querverweisen innerhalb der Konfiguration. Terraform-Konfigurationen referenzieren regelmäßig andere Ressourcen, Variablen, locals, Modul-Outputs und Data Sources über den Namen. Validate prüft, ob jede Referenz (z. B. var.region, local.common_tags, aws_vpc.main.id, module.networking.subnet_ids) auf etwas zeigt, das irgendwo in der Konfiguration tatsächlich deklariert ist. Eine nicht deklarierte Variable, ein Tippfehler in einer Ressourcenreferenz oder ein fehlender Modul-Output werden hier erkannt.

PrüfkategorieBeispielfehlerInit nötig?
HCL-Parse-FehlerNicht geschlossene Klammer in Zeile 14Nein
Unbekanntes Argument"region" ist kein gültiges Argument für aws_s3_bucketJa
Falscher ArgumenttypUnpassender Wert für das Attribut - Zahl erwartetJa
Fehlendes PflichtargumentDas Argument "bucket" ist erforderlichJa
Nicht deklarierte VariableEine verwaltete Ressource kann sich nur auf deklarierte Variablen beziehenNein
Nicht deklarierte RessourcenreferenzReferenz auf nicht deklarierte Ressource "aws_vpc.typo"Nein
Fehlende ModuleingabeDas Argument "vpc_id" ist für module.network erforderlichJa

Was terraform validate nicht prüft

Die Grenzen von terraform validate sind ebenso wichtig wie sein Umfang. Viele Entwickler lernen sie kennen, wenn eine validierte Konfiguration zur Apply-Zeit fehlschlägt. Jede dieser Kategorien erfordert terraform plan, Integrationstests oder Policy-Werkzeuge wie tflint oder Checkov.

Reale Werte von Ressourcenargumenten

Validate prüft, ob ein Argument existiert und den richtigen Typ hat - aber nicht, ob der Wert in der realen Welt gültig ist. Eine aws_instance-Ressource kann ein ami-Argument haben, das ein String ist (typgerecht), doch validate kann nicht wissen, ob diese konkrete AMI-ID in deinem AWS-Konto oder deiner Region existiert. Ein ungültiges AMI, eine nicht existierende Security-Group-ID oder ein falscher Availability-Zone-Name bestehen validate und scheitern erst bei plan oder apply.

State-Datei und bestehende Infrastruktur

Validate liest niemals deine Terraform-State-Datei. Es kann nicht erkennen, dass eine von dir definierte Ressource mit einer bereits bestehenden kollidiert, dass eine Ressource außerhalb von Terraform gelöscht wurde (State-Drift) oder dass eine geplante Änderung eine Einschränkung verletzt, die sich nur gegen die aktuelle reale Infrastruktur bewerten lässt. All das sind Themen der Plan- und Apply-Phase.

Dynamische Ausdrücke, die von Data Sources abhängen

count-, for_each- und Bedingungsausdrücke sind gültiges HCL und validate parst sie problemlos. Wenn ihre Werte jedoch von einer Data Source abhängen (z. B. for_each = toset(data.aws_availability_zones.available.names)), kann der Ausdruck zur Validierungszeit nicht vollständig ausgewertet werden, weil die Data Source nicht abgefragt wurde. Validate bestätigt, dass die Syntax des Ausdrucks korrekt ist; das Laufzeitergebnis kann es nicht bestätigen.

Provider-Authentifizierung und Berechtigungen

Validate führt keinerlei API-Aufrufe aus. Es erkennt nicht, dass deine AWS-Zugangsdaten abgelaufen sind, dass deinem Servicekonto die nötigen IAM-Berechtigungen fehlen oder dass deine Provider-Konfiguration auf die falsche Region oder das falsche Projekt zeigt. Alle Authentifizierungsfehler treten erst bei plan oder apply auf, wenn der Provider-Client tatsächlich initialisiert wird und Aufrufe erfolgen.

Warning

Eine bestandene terraform validate heißt nicht, dass die Konfiguration bereit zum Anwenden ist. Sie heißt, dass sie syntaktisch korrekt und schema-gültig ist. Lasse auf validate immer terraform plan folgen - wenn möglich in einer Staging-Umgebung -, bevor du in der Produktion terraform apply ausführst.

Sicherheitsrichtlinien und Compliance-Regeln

Validate kennt keine Sicherheitsrichtlinien. Ein als öffentlich konfigurierter S3-Bucket, eine EC2-Instanz ohne Verschlüsselung oder eine Security Group mit 0.0.0.0/0-Ingress auf Port 22 bestehen validate ohne Warnung. Sicherheits- und Compliance-Prüfungen erfordern spezielle Policy-Werkzeuge wie Checkov, tfsec oder HashiCorp Sentinel.

terraform validate vs. terraform plan

Die häufigste Verwirrung rund um terraform validate betrifft den Unterschied zu terraform plan. Sie überschneiden sich deutlich, arbeiten aber auf verschiedenen Ebenen - und beide sind für einen vollständigen Workflow vor dem Apply nötig.

terraform validate prüft, ob eine Konfiguration syntaktisch gültig und intern konsistent ist, unabhängig von übergebenen Variablen oder vorhandenem State.

- HashiCorp-Terraform-Dokumentation

Wo sie sich überschneiden

Beide Befehle parsen deine HCL-Dateien und suchen Syntaxfehler. Beide prüfen Provider-Schemas, wenn Provider-Plugins verfügbar sind. Beide validieren interne Referenzen. Ein Konfigurationsfehler, den terraform validate findet, würde auch von terraform plan gefunden - validate ist einfach schneller und benötigt weder Cloud-Zugangsdaten noch ein State-Backend.

Wo plan weiter geht

terraform plan initialisiert Provider-Clients, authentifiziert sich bei Cloud-APIs, liest den aktuellen State und fragt Data Sources ab. Damit erkennt es Dinge, die validate nicht kann: einen Argumentwert, den die Provider-API ablehnt, eine Data-Source-Abfrage mit unerwarteten Ergebnissen, Quota- oder Rate-Limit-Fehler und Konflikte zwischen der vorgeschlagenen Konfiguration und der im State erfassten bestehenden Infrastruktur.


Fähigkeitterraform validateterraform plan
HCL-Syntaxprüfung✓ Ja✓ Ja
Provider-Schema-Prüfung✓ Ja (nach init)✓ Ja
Prüfung von Querverweisen✓ Ja✓ Ja
Prüfung realer Ressourcenwerte✗ Nein✓ Ja (über API)
Lesen der State-Datei✗ Nein✓ Ja
Abfrage von Data Sources✗ Nein✓ Ja
Prüfung von Auth und Berechtigungen✗ Nein✓ Ja
Prüfung von Sicherheitsrichtlinien✗ Nein✗ Nein (braucht tfsec/Checkov)
Erfordert Cloud-Zugangsdaten✗ Nein✓ Ja
Typische Laufzeit< 2 s5 s bis mehrere Minuten

Note

In CI-Pipelines erfüllen validate und plan unterschiedliche Zwecke. Führe validate bei jedem Pull-Request-Commit aus - es ist schnell, ohne Zugangsdaten und erkennt die meisten Autorenfehler früh. Führe plan in einem separaten Job mit Staging-Zugangsdaten aus, ausgelöst beim Merge oder als manueller Freigabeschritt.

Wie man terraform validate ausführt

terraform validate auszuführen ist unkompliziert, doch die Schritte drumherum sind wichtig, um das Beste aus dem Befehl herauszuholen.

1

Führe terraform init aus, um Provider zu laden

Führe in deinem Terraform-Arbeitsverzeichnis terraform init aus. Das lädt die im required_providers-Block definierten Provider-Plugins herunter und legt sie im .terraform-Unterverzeichnis ab. Ohne init überspringt validate die Provider-Schema-Prüfungen und führt nur HCL-Parsen und Referenzvalidierung aus. Nutze terraform init -backend=false in der CI, um die Konfiguration des entfernten State zu überspringen, wenn keine Zugangsdaten vorhanden sind.

2

Führe terraform validate aus

Führe terraform validate im selben Verzeichnis aus. Der Befehl endet mit Code 0 (bestanden) oder Code 1 (fehlgeschlagen). Bei Erfolg gibt er „Success! The configuration is valid." aus. Bei Fehlschlag gibt er jeden Fehler mit Dateipfad, Zeilen- und Spaltennummer und Beschreibung aus. Nutze terraform validate -json für strukturierte Ausgaben in CI-Skripten.

terminal
bash
# Grundlegende Validierung
terraform validate

# JSON-Ausgabe für die CI-Auswertung
terraform validate -json

# Beispiel für die JSON-Ausgabestruktur
{
  "valid": false,
  "error_count": 2,
  "diagnostics": [
    {
      "severity": "error",
      "summary": "Unsupported argument",
      "detail": "An argument named 'regoin' is not expected here. Did you mean 'region'?",
      "range": {
        "filename": "main.tf",
        "start": { "line": 8, "column": 3 }
      }
    }
  ]
}
3

Prüfe und korrigiere gemeldete Fehler

Jede Diagnose enthält einen Dateipfad und eine Zeilennummer. Öffne die markierte Datei und schaue dir die gemeldete Zeile plus die 3-5 Zeilen darüber an - HCL-Fehler treten manchmal etwas nach dem tatsächlichen Fehler auf. Häufige Korrekturen sind das Berichtigen von Argumentnamen (Tippfehler sind am häufigsten), das Ergänzen eines fehlenden Pflichtarguments, das Beheben eines Typkonflikts (eine Zahl in Anführungszeichen setzen, die ohne sein sollte) oder das Deklarieren einer referenzierten, aber nicht definierten Variable.

4

Fahre mit terraform plan fort

Sobald validate ohne Fehler durchläuft, führe terraform plan in einer Umgebung mit gültigen Zugangsdaten aus. Das ist das zweite Tor, das Laufzeitprobleme erkennt, die validate nicht sieht: ungültige Ressourcenwerte, Berechtigungsfehler und Konflikte mit dem Infrastruktur-State. Beide Befehle zusammen decken die gesamte Validierungsfläche vor dem Apply ab.

HCL-Formatierer

Normalisiere HCL-Einrückung, Blockabstände und Attributausrichtung in deinen Terraform-Dateien, bevor du validate ausführst - im Browser, ohne Anmeldung.

Open tool

terraform validate in CI/CD

terraform validate passt hervorragend in CI-Pipelines, weil es keine Cloud-Zugangsdaten benötigt, in Sekunden läuft und die meisten Autorenfehler erkennt, bevor sie eine Plan-Ausführung verschwenden oder ein Code-Review erreichen. Das Standardmuster ist, es bei jedem Pull Request auszuführen, der .tf-Dateien ändert.

Beispiel für GitHub Actions

Der folgende Workflow installiert Terraform, führt init mit -backend=false aus, um keine State-Zugangsdaten zu benötigen, und führt validate aus. Schlägt validate fehl, endet der Workflow mit einem Exit-Code ungleich null und blockiert das Mergen des Pull Requests.

.github/workflows/terraform-validate.yml
yaml
name: Terraform Validate

on:
  pull_request:
    paths:
      - '**.tf'
      - '**.tfvars'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: '1.8.0'

      - name: Terraform Init (no backend)
        run: terraform init -backend=false

      - name: Terraform Validate
        run: terraform validate -json | tee validate-output.json
        # Exit code 1 on any error - fails the workflow automatically

Tip

Die Verwendung von -backend=false bedeutet, dass terraform init die Provider-Plugins herunterlädt, ohne zu versuchen, das entfernte State-Backend zu initialisieren. Das ist das richtige Muster für Pull-Request-CI-Jobs, die die gemeinsam genutzte State-Datei nicht berühren sollen und keine Backend-Zugangsdaten haben.

validate mit tflint kombinieren

tflint ist ein Linter, der Probleme erkennt, die terraform validate übersieht - providerspezifische Regelprüfungen (etwa ungültige AWS-Instanztypen), ungenutzte Deklarationen und eigene Policy-Regeln. tflint nach validate im selben CI-Job auszuführen, ergibt eine breitere Abdeckung der statischen Analyse. tflint bietet providerspezifische Regel-Plugins für AWS, Azure und GCP, die Argumentwerte gegen bekannte gültige Optionen prüfen und damit Fehler finden, die die generische Schema-Prüfung von validate nicht erkennt.

  • terraform fmt -check – prüft, ob der Code den Terraform-Stilkonventionen entspricht (schlägt fehl, wenn eine Datei neu formatiert werden muss)
  • terraform validate – prüft Syntax, Schema-Konformität und interne Referenzen
  • tflint – providerspezifische Regeln, Erkennung ungenutzter Variablen, Durchsetzung eigener Policies
  • Checkov oder tfsec – Scanning von Sicherheits- und Compliance-Richtlinien
  • terraform plan – Laufzeitvalidierung in einer Staging-Umgebung mit echten Zugangsdaten

Prüfer für Terraform-Namenskonventionen

Validiere Terraform-Bezeichner für Ressourcen, Module, Variablen und Outputs auf konsistenten Namensstil und Policy-Konformität - vollständig im Browser.

Open tool

Best Practices für vollständige Validierung

terraform validate ist ein Fundament, keine Obergrenze. Ein ausgereifter Terraform-Workflow stapelt mehrere Validierungstechniken, um verschiedene Fehlerklassen an der richtigen Stelle im Entwicklungszyklus zu erkennen.

Erst formatieren, dann validieren

Führe in jedem Workflow - lokal und in der CI - terraform fmt vor validate aus. Kanonische HCL-Formatierung ist nicht nur Stil: Sie verhindert Grenzfälle, in denen uneinheitliche Abstände oder Kommentarplatzierung echte Fehler in der Parse-Ausgabe verschleiern. Der HCL-Formatierer von Aback Tools bietet dieselbe Normalisierung im Browser, ohne dass Terraform installiert sein muss - nützlich für schnelle Reviews oder zum Bearbeiten auf Maschinen, auf denen du terraform fmt nicht ausführen kannst.

In der CI immer init vor validate

validate ohne init liefert nur eine Teilanalyse - HCL-Parsen und Referenzprüfung, aber keine Provider-Schema-Validierung. Wer die Schema-Prüfungen überspringt, kann eine Konfiguration mergen, die einen Argumentnamen mit Tippfehler verwendet oder den falschen Typ an ein Ressourcenattribut übergibt. Die paar zusätzlichen Sekunden, die init -backend=false zum CI-Job hinzufügt, sind die Abdeckung wert.

-json für strukturierte CI-Ausgaben nutzen

Die standardmäßige, für Menschen lesbare Ausgabe von validate ist beim lokalen Debuggen klar, aber in automatisierten Pipelines ist die JSON-Ausgabe weit nützlicher. Mit -json kannst du das diagnostics-Array auswerten, um Dateipfade und Zeilennummern zu extrahieren, Pull-Request-Diffs mit Inline-Fehlerkommentaren über die GitHub-Checks-API annotieren oder Fehler in eine eigene Slack-Benachrichtigung einspeisen. Werte zuerst den booleschen valid aus - ist er true, kann das diagnostics-Array dennoch Warnungen enthalten, die es wert sind, angezeigt zu werden.

Alle Module unabhängig validieren

terraform validate in einem Root-Modul prüft auch aufgerufene lokale Module, entfernte Module werden jedoch erst geprüft, nachdem init sie heruntergeladen hat. Führe für Modul-Repositories validate während der Entwicklung separat in jedem Modulverzeichnis aus. So treten Schemafehler im Modul selbst zutage, bevor Konsumenten es überhaupt referenzieren.

Warning

Ein verbreitetes Missverständnis ist, dass terraform validate Sicherheit abdeckt. Das tut es nicht. Eine völlig gültige Terraform-Konfiguration kann öffentlich zugängliche Storage-Buckets, unverschlüsselte Datenbanken oder übermäßig permissive IAM-Rollen bereitstellen. Führe Checkov, tfsec oder einen ähnlichen Policy-Scanner immer als separaten Schritt nach validate in deiner CI-Pipeline aus.

.tf-Dateien vor dem Commit formatiert halten

Nutze einen Pre-Commit-Hook, der terraform fmt -check ausführt und fehlschlägt, wenn eine .tf-Datei nicht kanonisch formatiert ist. Das hält die gesamte Codebasis konsistent, vermeidet reine Stil-Diffs in Code-Reviews und macht die validate-Ausgabe leichter lesbar, weil der Code eine saubere Struktur hat. Entferne Entwicklerkommentare aus Produktionskonfigurationen mit dem Terraform-HCL-Kommentar-Entferner, um committete Dateien sauber und lesbar zu halten.

Key takeaways

  • terraform validate prüft HCL-Syntax, Provider-Schema-Konformität und interne Querverweise - es führt keine API-Aufrufe aus und benötigt keine Cloud-Zugangsdaten.
  • Du musst terraform init vor validate ausführen, um Provider-Schema-Prüfungen zu aktivieren; ohne das überspringt validate die Validierung von Ressourcenargumenten.
  • Validate kann ungültige Argumentwerte, State-Drift, fehlende Berechtigungen und Verstöße gegen Sicherheitsrichtlinien nicht erkennen - das erfordert terraform plan und spezielle Policy-Werkzeuge.
  • Das Flag -json gibt strukturierte Diagnosen aus (valid, error_count, diagnostics[]) - ideal für CI-Auswertung, Inline-PR-Annotationen und eigene Reporting-Pipelines.
  • Der korrekte CI-Workflow ist: terraform fmt -check → terraform init -backend=false → terraform validate → tflint → terraform plan (in Staging mit Zugangsdaten).
  • Nutze den HCL-Formatierer und den Prüfer für Terraform-Namenskonventionen für Stil- und Namenshygiene vor der Validierung.
  • Eine bestandene terraform validate heißt nicht, dass die Konfiguration bereit zum Anwenden ist - sie heißt, dass sie syntaktisch und strukturell korrekt genug ist, um zu plan weiterzugehen.

Häufige Fragen

terraform validate prüft drei Dinge: die Korrektheit der HCL-Syntax (gültige Blöcke, korrekte Attributsyntax, keine Parse-Fehler), die Schema-Konformität (ob die verwendeten Attribute vom Provider erkannt werden und kompatible Typen haben) und die Gültigkeit interner Referenzen (ob jede Variable, jedes local, jeder Modul-Output und jede Ressourcenreferenz irgendwo in der Konfiguration deklariert ist). Es verbindet sich mit keiner Provider-API und kann daher nicht prüfen, ob eine Ressource mit diesen Argumenten wirklich existiert oder erstellt werden kann.

Ja, für eine vollständige Validierung. terraform init lädt die Provider-Plugins und ihre Schemadefinitionen herunter - ohne sie kann terraform validate nicht prüfen, ob die verwendeten Argumente für einen Ressourcentyp gültig sind. Seit Terraform 0.13 erzeugt validate ohne init einen Fehler bei Konfigurationen, die Provider referenzieren. Wenn du die Provider-Schema-Prüfungen ganz überspringen willst (etwa für eine reine Syntaxprüfung), akzeptiere diese Einschränkung, aber der Standard-Workflow ist init und dann validate.

terraform validate ist ein rein statischer Analyseschritt - es liest deine .tf-Dateien, prüft Syntax und Schema und endet, ohne eine Provider-API zu kontaktieren. terraform plan führt dieselben Prüfungen aus und verbindet sich danach mit den Provider-APIs, um zu ermitteln, welche Änderungen tatsächlich vorgenommen würden. Plan erkennt, was validate nicht sieht: ungültige Argumentwerte (etwa einen nicht existierenden Regionsnamen), fehlende Berechtigungen, Quota-Grenzen und State-Drift. Validate ist schnell und CI-sicher; plan benötigt Zugangsdaten und echten Infrastrukturzugriff.

Nein. terraform validate findet strukturelle und Schema-Fehler, übersieht aber eine wichtige Klasse von Laufzeitfehlern. Es erkennt weder eine ungültige AMI-ID in einer AWS-Instanz noch einen GCS-Bucket-Namen, der Zeichenregeln verletzt, noch eine Ressource, die mit einer bestehenden im State kollidiert. Ebenso wenig validiert es die Logik von count- und for_each-Ausdrücken, wenn diese von Data Sources oder entfernten Werten abhängen. Sieh validate als schnelles erstes Tor - notwendig, aber nicht ausreichend für volles Vertrauen vor dem Apply.

Füge einen CI-Job hinzu, der terraform init und danach terraform validate ausführt. Nutze die Action hashicorp/setup-terraform, um die richtige Terraform-Version zu installieren, führe init mit -backend=false aus, um die Initialisierung des entfernten State zu überspringen (die Zugangsdaten benötigt), und danach validate. Der validate-Schritt endet bei jedem Fehler mit einem Exit-Code ungleich null, wodurch der Workflow fehlschlägt und der Pull Request blockiert wird. Dieses Muster erkennt HCL-Syntax- und Schemafehler bei jedem Commit, ohne Cloud-Zugangsdaten in der CI-Umgebung zu benötigen.

Das Flag -json bewirkt, dass terraform validate statt menschenlesbarem Text ein strukturiertes JSON-Objekt ausgibt. Das Objekt enthält einen booleschen Wert valid (true oder false), eine Ganzzahl error_count und ein Array diagnostics. Jeder Eintrag in diagnostics enthält eine severity (error oder warning), eine Zusammenfassung, einen Detailtext und ein Objekt range mit filename, Startzeile und Endzeile. Dieses Format eignet sich ideal für die Auswertung in CI-Skripten, die Integration in eigene Reporting-Dashboards oder die Anbindung an Editor-Erweiterungen mit Inline-Annotationen.

Ja, teilweise. terraform validate prüft, ob Modulaufruf-Blöcke eine Modulquelle referenzieren, die lokal existiert oder auflösbar ist, ob die erforderlichen Eingabevariablen des Moduls angegeben sind und ob die an Moduleingaben übergebenen Typen mit den Variablendeklarationen des Moduls kompatibel sind. Entfernte Module werden zur Validierungszeit nicht heruntergeladen, außer terraform init hat sie bereits geladen. Nach init liegt die heruntergeladene Modulquelle lokal vor und kann vollständig gegen das Schema geprüft werden.

Ein vollständiger Terraform-Qualitäts-Workflow stapelt mehrere Werkzeuge. terraform validate deckt Syntax und Schema ab. terraform plan deckt das Laufzeitverhalten ab. tflint ergänzt providerspezifische Regelprüfungen und eigene Policy-Regeln über das hinaus, was validate erzwingt. Checkov und tfsec führen Sicherheits-Policy-Scans durch. Für HCL-Formatierung und Stilkonsistenz vor alldem normalisiert der HCL-Formatierer von Aback Tools Einrückung und Blockstruktur, und der Prüfer für Terraform-Namenskonventionen validiert Bezeichner nach den Konventionen deines Teams.

ShareXLinkedIn