Ein einziger Terraform-Befehl zeigt dir, was in deiner Cloud wirklich los ist.
Wie du „verlorene“ Azure-Ressourcen aufspürst, Risiken reduzierst und Ordnung in deine Cloud bringst.
Update – 21. Mai 2025
In einer früheren Version dieses Artikels habe ich geschrieben, dassterraform plan -refresh-only
zeigt, welche Azure-Ressourcen nicht über Terraform bereitgestellt wurden.Das stimmt so nicht. Der Befehl erkennt nur Änderungen an Ressourcen, die bereits im Terraform-State erfasst sind.
Nicht an externen oder manuell erstellten Ressourcen, die außerhalb von Terraform existieren.
Der Artikel wurde entsprechend überarbeitet, damit er fachlich korrekt bleibt.
Immer wenn ich einen Vortrag halte, kommt zuverlässig diese eine Frage: „Wie finden wir heraus, welche Ressourcen nicht über Terraform laufen?“
Klingt banal, ist aber ein echtes Risiko.
Denn genau hier entsteht, was viele unterschätzen: Schatteninfrastruktur.
Ressourcen, die direkt im Azure-Portal angelegt wurden.
Oder per Skript.
Oder einfach „irgendwann“.
Und heute weiß niemand mehr, wofür sie da sind.
Terraform kennt sie nicht. Der State ist lückenhaft.
Und das wird spätestens dann kritisch, wenn es um Governance, Sicherheit oder Betriebsverantwortung geht.
Schritt 1: Der Realitätscheck
Unterschiede bei Terraform Ressourcen können relativ einfach und schnell gefunden werden:
terraform plan -refresh-only
Damit wird das State-File mit dem Ist-Zustand in deiner Cloud Umgebung verglichen, ohne das tatsächlich Änderungen vorgenommen werden.
Also nur: Just for information
Was also Terraform-State anders ist oder fehlt, taucht als Diff auf.
Und genau da wird’s spannend: Diese Unterschiede zeigen, was Terraform (noch) nicht kennt.
Willst du alle Azure-Ressourcen finden, auch solche, die nie über Terraform gebaut wurden, brauchst du zusätzliche Werkzeuge:
Azure Resource Graph (ARG) mit einer Query wie:
Resources | project name, type, resourceGroup, tags
Vergleich mit dem Terraform State - z. B. per Skript oder automatisiertem Scan
Optional: Tools wie
aztfexport
oderterraformer
, um bestehende Ressourcen als Terraform-Code zu extrahierenTools wie Firefly, Spacelift oder Terragrunt bieten eine Drift Detektion an.
Schritt 2: Was tun mit den Fundstücken?
Du hast drei Optionen:
Importieren
Mitterraform import
bringst du Ressourcen unter IaC-Kontrolle.Löschen & neu provisionieren
Wenn’s zu unübersichtlich ist, Neustart mit sauberem Code.Ignorieren
Möglich, aber selten nachhaltig.
Schritt 3: Klare Spielregeln schaffen
Was sich bewährt hat:
Zentrale Infrastruktur – Netzwerke, Peering, Firewall – wird immer mit Terraform verwaltet.
Workload-nahe Ressourcen können von Teams eigenständig gebaut werden – inkl. Verantwortung für Betrieb und Lifecycle.
Das schafft Transparenz: Was zentral gemanagt wird, bleibt nachvollziehbar.
Was dezentral läuft, ist bewusst delegiert aber nicht aus dem Blick.
Schatteninfrastruktur ist kein Betriebsunfall – sie ist ein Risiko
Nicht gemanagte Ressourcen erschweren Audits, treiben Kosten und können Sicherheitslücken verursachen.
Was hilft: Azure Policies.
Sie setzen technische Richtlinien automatisiert durch:
Nur bestimmte Regionen erlauben
Pflicht-Tags erzwingen
Unerwünschte Ressourcentypen blockieren
Denn: Was gar nicht erst entsteht, muss später auch nicht bereinigt werden.
Fazit
Terraform ist dein Kontrollzentrum - aber nicht dein Scanner.
Um verlorene Ressourcen zu finden, brauchst du ergänzende Sichtbarkeit in Azure und klare Regeln, was „rein“ soll und was nicht.
Starte heute mit terraform plan -refresh-only (Link zur Doku).
Du wirst überrascht sein, was du findest.
In der nächsten Ausgabe zeige ich dir, wie du Ressourcen sauber importierst und typische Fehler vermeidest.
Ciao!
Über mich
Ich bin Matthias, Cloud-Architekt mit Fokus auf Azure und Infrastructure-as-Code.
In diesem Newsletter bekommst du echte Einblicke aus Projekten, keine Buzzwords, sondern Lösungen, die im Alltag funktionieren.
Jetzt abonnieren und bring Mehrwert in deine Cloud.