Neu in Terraform
Terraform liefert zuletzt alle vier bis fünf Monate ein Minor (1.14: 19.11.2025, 1.15: 29.04.2026, 1.16: 26.08.2026), dazwischen Patches auf der aktuellen Linie meist im Ein- bis Zwei-Wochen-Takt. Inhaltliche Leitlinie der letzten drei Releases: Terraform verlässt das reine CRUD-Modell (Actions, Abfragen gegen bestehende Infrastruktur) und macht HCL an Stellen dynamisch, die bisher statisch sein mussten, etwa Modulquellen, Typ-Constraints und Deprecation-Markierungen. Für 1.17 (Beta seit 09.09.2026) führt der CHANGELOG Terraform Policy als allgemein verfügbar (-policies für plan, apply und query) sowie Variablen und Locals in Provider-Requirements.
Zuletzt geprüft: 1. Oktober 2026. Jeder Eintrag stammt aus den Release Notes des Projekts, verlinkt am Seitenende. Das ist eine kuratierte Auswahl, kein vollständiger Changelog.
1.16
26.08.2026- neu import-Blöcke innerhalb von Modulen
import-Blöcke dürfen jetzt in Child-Modulen stehen, nicht mehr nur im Root-Modul. Ein Modul bringt den Import der von ihm verwalteten Ressourcen damit selbst mit. Zielt ein import-Block im aufrufenden Modul auf dieselbe Instanz, hat er Vorrang. Konfiguration per -generate-config-out erzeugt Terraform weiterhin nur für Ziele im Root-Modul. Einsetzen ab 1.16.1: Erst dort werden import-Blöcke nicht mehr ignoriert, wenn mehrere Imports verschiedene count- oder for_each-Instanzen derselben Ressource treffen (#39068).
- neu lifecycle destroy = false
Mit destroy = false im lifecycle-Block plant Terraform statt Delete ein Forget: Das Objekt verschwindet aus dem State und bleibt in der Infrastruktur stehen. Das gilt bei terraform destroy, für Instanzen, die durch kleineres count oder for_each wegfallen, und beim Replace, wo das alte Objekt unverwaltet zurückbleibt (ForgetThenCreate, mit create_before_destroy CreateThenForget). Wer den resource-Block löscht, löscht die Einstellung mit, Terraform plant dann ein normales Delete. Dafür bleibt der removed-Block mit lifecycle { destroy = false }. Anders als prevent_destroy bricht der Plan nicht ab. Zusammen mit create_before_destroy arbeitet es erst ab 1.16.3 korrekt (#39169).
- neu store-Block in terraform_data
terraform_data bekommt einen store-Block. store.input ist write-only und nimmt damit auch ephemeral Werte an. Beim Apply landet der Wert in store.output oder, mit sensitive = true, in store.sensitive_output und bleibt dort stabil, bis sich store.version ändert (ohne version, sobald input abweicht). replace = true ersetzt die Ressource bei einer Änderung. In regulierten Umgebungen beachten: Der gespeicherte Wert steht damit im State, sensitive_output maskiert nur die Anzeige.
- neu Actions: on_failure und Destroy-Events
Action-Trigger an Ressourcen kennen on_failure mit halt, taint oder continue und lassen sich an before_destroy und after_destroy hängen. -invoke kann mit -target kombiniert werden, um die auslösende Ressourceninstanz zu wählen, wenn mehrere Ressourcen dieselbe Action triggern.
- neu Maschinenlesbare Ausgaben und console -scope
terraform state show -json und terraform workspace list -json liefern strukturierte Ausgabe, terraform graph -format=mermaid gibt den Graphen als Mermaid aus. terraform console -scope=<Moduladresse> wertet Ausdrücke im Kontext eines Moduls oder einer konkreten Modulinstanz aus.
- Breaking bastion_host_key wirkt jetzt tatsächlich
Provisioner wenden bastion_host_key korrekt an. Wer den Schlüssel bisher falsch oder als Platzhalter gesetzt hatte, ohne dass es auffiel, bekommt nach dem Upgrade Verbindungsfehler. Vor dem Upgrade prüfen.
1.15
29.04.2026- neu deprecated-Attribut für Variablen und Outputs
Auf variable- und output-Blöcken lässt sich ein deprecated-Attribut setzen. Wer die Variable noch befüllt oder den Output referenziert, bekommt eine Warnung. Für Modul-Maintainer der Weg, Schnittstellen abzukündigen, ohne sie sofort zu brechen.
- neu Variablen und Locals in Modulquellen
source und version eines Modulblocks dürfen Variablen und Locals enthalten. Die Variable muss dafür mit const = true deklariert sein und darf weder sensitive noch ephemeral sein, Werte aus Ressourcen sind zur init-Zeit unbekannt und brechen init ab. Als Folge nehmen die meisten Kommandos Variablenwerte entgegen, weil sie schon vor der Modulinstallation aufgelöst werden müssen.
- neu Typ-Constraints auf output-Blöcken
Outputs können eine explizite Typbeschränkung tragen. Damit ist die Modulschnittstelle in beide Richtungen typisiert, nicht mehr nur auf der Eingabeseite.
- neu convert-Funktion
Die neue Funktion convert erlaubt präzise Typkonvertierungen inline, statt sie über Umwege wie tolist- und tomap-Ketten oder jsondecode zu erzwingen.
- Breaking S3-Backend: FIPS- und Dualstack-Variablen strikt
AWS_USE_FIPS_ENDPOINT und AWS_USE_DUALSTACK_ENDPOINT akzeptieren nur noch true oder false. Vorher galt jeder nicht-leere Wert als true. Wer dort etwa 1 gesetzt hat, verliert den FIPS-Endpunkt still.
1.14
19.11.2025- neu List Resources und terraform query
List Resources werden in *.tfquery.hcl-Dateien definiert und fragen bestehende Infrastruktur ab, inklusive Filterung. terraform query führt sie aus und erzeugt optional direkt Konfiguration zum Import der Treffer. Der Weg für Brownfield-Übernahmen: erst abfragen, dann Konfiguration generieren lassen, dann importieren.
- neu Actions als eigener Top-Level-Block
Provider definieren Actions für Vorgänge außerhalb des CRUD-Modells, etwa das Invalidieren eines CDN-Caches oder einen Lambda-Aufruf. Konfiguriert im action-Block, ausgelöst über den Lifecycle einer Ressource oder per -invoke auf der CLI.
- neu Präzisere generierte Konfiguration beim Import
Über den neuen Provider-RPC GenerateResourceConfiguration können Provider beim Import konkrete Konfigurationswerte liefern statt generischer Platzhalter. Das reduziert die Nacharbeit an generierter Konfiguration, sofern der Provider den RPC implementiert.
- Breaking Parallelität in Container-Runtimes gedeckelt
Terraform respektiert das CPU-Bandwidth-Limit der Container-Runtime, wodurch die Parallelität in CI-Containern niedriger ausfallen kann als bisher. Außerdem setzt 1.14 wegen Go 1.25 mindestens macOS Monterey voraus.
1.13
20.08.2025- neu Variablen-Definitionen in Testdateien
In terraform test können externe Variablen direkt in der Testdatei per variable-Block definiert werden, und Variablenblöcke auf Dateiebene dürfen Run-Outputs referenzieren. Achtung beim Upgrade: bei komplexen externen Variablen erzeugt ein fehlender Definitionsblock jetzt Diagnostics.
- neu Paralleler Teardown in terraform test
Teardown-Operationen in terraform test laufen parallel, was Suiten mit vielen Run-Blöcken und langsamen Providern verkürzt.
- neu Konsistenzprüfung für Dateisystem-Funktionen
Funktionen wie file und templatefile werden während Apply auf konsistente Ergebnisse geprüft, damit Daten, die sich zwischen Plan und Apply ändern, auffallen statt still durchzurutschen.