Azure Deployment Stacks wurde 2024 allgemein verfügbar und löst ein grundlegendes Problem im Infrastructure-as-Code-Betrieb auf Azure: die fehlende Lifecycle-Semantik für zusammengehörige Ressourcen. Bisher konnten ARM-Deployments keine Ressourcen automatisch entfernen, die nicht mehr in der Template-Definition vorhanden waren, und es gab keinen eingebauten Schutz vor externen Änderungen an IaC-verwalteten Ressourcen.
Deployment Stacks als atomare Ressourceneinheit
Ein Deployment Stack fasst alle Ressourcen eines ARM- oder Bicep-Deployments zu einer verwalteten Einheit zusammen. Wenn eine Ressource aus dem Bicep-Template entfernt wird und der Stack neu deployed wird, wird die Ressource automatisch gelöscht (oder in einen “Detached”-Zustand versetzt, je nach Konfiguration). Dieses Verhalten entspricht dem aus Terraform bekannten “terraform destroy” für entfernte Ressourcen, ist aber nativ in den Azure Resource Manager integriert. Stacks können auf Subscription- oder Management-Group-Ebene definiert werden und können mehrere Resource Groups umspannen.
Das Kernfeature für Governance-sensible Umgebungen sind DenySettings. Mit DenyDelete-Einstellungen verhindert ein Stack, dass Ressourcen außerhalb des IaC-Workflows gelöscht werden. DenyWriteAndDelete geht einen Schritt weiter und blockiert auch externe Konfigurationsänderungen. So wird sichergestellt, dass der IaC-Code die einzige legitime Quelle für Konfigurationsänderungen bleibt und der “Config Drift” durch manuelle Eingriffe im Azure Portal verhindert wird.
Integration in bestehende IaC-Workflows
Azure Deployment Stacks ist vollständig in die bestehenden Azure-IaC-Toolchains integriert: Azure CLI, PowerShell, das Azure Portal und Azure DevOps/GitHub Actions unterstützen Stacks nativ. Bestehende Bicep-Templates können ohne Änderungen in einem Stack deployed werden. Die Kombination aus atomarem Lifecycle-Management, DenySettings und nativer CI/CD-Integration macht Deployment Stacks zum empfohlenen Werkzeug für produktive Bicep-basierte IaC-Umgebungen, die über einfache Resource-Group-Deployments hinausgehen.
Typische Anwendungsfälle
Häufig gestellte Fragen
Was ist der Unterschied zu einer Resource Group?
Eine Resource Group ist ein logischer Container für Ressourcen ohne Lifecycle-Semantik. Ein Deployment Stack ist ein verwaltetes Deployment, das alle enthaltenen Ressourcen als Einheit behandelt: gemeinsames Update, gemeinsames Löschen, und optionaler DenySettings-Schutz. Eine Stack-Ressource kann mehrere Resource Groups umspannen.
Was sind DenySettings?
DenySettings erlauben es, bestimmte Operationen auf Stack-Ressourcen zu verbieten. 'DenyDelete' verhindert, dass jemand eine Stack-Ressource außerhalb des Stacks löscht. 'DenyWriteAndDelete' verhindert zusätzlich externe Konfigurationsänderungen. So bleibt die IaC-Definition die einzige Wahrheit über den Zustand der Ressourcen.
Ist Azure Deployment Stacks Terraform-kompatibel?
Nein, direkt nicht. Azure Deployment Stacks ist ein nativer ARM-/Bicep-Dienst. Terraform hat ein eigenes State-Management. Für Terraform-Nutzer ist das Terraform-State der Stack-Equivalent. Deployment Stacks ergänzt vor allem ARM/Bicep-basierte IaC-Workflows.
