Was ist Infrastructure-as-Code?
Bei Infrastructure-as-Code (IaC) handelt es sich um ein IT-Konzept, demzufolge nicht nur die Applikation, sondern auch die zur Ausführung benötigte Infrastruktur beschrieben wird. Infrastructure-as-Code verwendet eine high-level Coding Language, um die Bereitstellung der IT-Infrastruktur zu automatisieren. Diese Automatisierung erleichtert Entwicklern die Arbeit, denn normalerweise müssen diese jedes Mal, wenn sie eine Softwareanwendung entwickeln, testen oder bereitstellen, die Server, Betriebssysteme, Speicher oder andere Infrastrukturelemente manuell bereitstellen. Die Automatisierung bringt jedoch noch zahlreiche weitere Vorteile mit sich: der Prozess zur Bereitstellung der Infrastruktur wird beschleunigt, ihre Konsistenz wird erhöht und die Entwicklung erfolgt schneller und effizienter.
Infrastructure-as-Code in Azure
Eine der bekanntesten IaC-Methoden in Azure sind Vorlagen für den Azure Ressource Manager (ARM-Templates). ARM-Templates sind die Microsoft-Azure-native Umsetzung des Infrastructure as Code Konzepts. Ein ARM-Template ist im Wesentlichen eine JSON-Datei, in der die Infrastruktur und die Konfiguration für ein Projekt definiert werden, d.h., es enthält Angaben zu den bereitzustellenden Ressourcen und den Eigenschaften für diese Ressourcen. Die dafür verwendete Syntax ist deklarativ, das bedeutet, in den ARM-Templates wird lediglich angegeben was bereitgestellt wird, ohne die Folge der Programmierbefehle für die Erstellung schreiben zu müssen.
Wie funktioniert Terraform?
Ein weit verbreiteter Konkurrent von ARM-Templates ist das Open-Source IaC-Tool Terraform von HashiCorp, das in der Programmiersprache Go entwickelt wurde. Terraform ist nicht auf einen bestimmten Cloud Anbieter ausgerichtet, sondern lässt sich sowohl in Azure als auch für andere Cloud-Anbieter verwenden. Terraform nutzt eine eigene deklarative Sprache mit dem Namen HCL (HashiCorp Configuration Language). Das Tool bietet aber auch die Möglichkeit, die Infrastruktur – analog zu ARM-Templates – im JSON-format zu definieren.
Wie funktioniert Microsoft Azure Bicep?
Azure Bicep ist eine DSL (Domain Specific Language) für ARM-Templates, die von Microsoft entwickelt wurde. Im Vergleich zu den ARM-Templates bietet Azure Bicep eine einfachere und präzisere Syntax. Damit eignet sich Azure Bicep für die Beschreibung, Validierung und Bereitstellung von Azure-Ressourcen als Infrastructure-as-Code.
Terraform vs Azure Bicep: Wo liegen die Unterschiede?
Welche Lösung ein Entwickler wählt, ist eine sehr individuelle Entscheidung, die von der genauen Entwicklungssituation abhängt. Dennoch gibt es ein paar grundlegende Unterschiede zwischen den beiden Tools, die man bei der Auswahl berücksichtigen sollte:
Multiplattform Kompatibilität:
Terraform bietet eine Multiprovider-Kompatibilität, da das Einbinden verschiedener Provider möglich ist. Zudem kann in verschiedenen Cloud-Anbieterumgebungen ausgeführt werden, ohne dass dafür eine neue Programmiersprache erlernt werden muss. Dies kann vor allem beim Einrichten einer Projektarchitektur, die über verschiedene Anbieter verfügt oder bei Migrationen interessant sein. Terraform ermöglicht also im Gegensatz zu Azure Bicep das Managen von hybriden Architekturen über Cloud-Anbietergrenzen hinweg.
Deployment und State-File:
Terraform verfügt über ein State-File, das alles speichert, was durch Terraform deployt wurde. Das Tool nutzt dieses File, um die nötigen Änderungen gegenüber der aktuellen Infrastruktur zu bestimmen. Dadurch wird automatisch erkannt, ob Ressourcen hinzugefügt oder entfernt werden müssen. Auch diese Funktion fehlt wiederum bei Azure Bicep, das lediglich sich selbst gegen die aktuelle Infrastruktur abgleicht.
Beide Bereitstellungsvarianten haben ihre Vor- und Nachteile. Ein Vorteil des State-Files in Terraform ist, dass eine kontinuierliche Weiterentwicklung der Infrastruktur dadurch einfacher ist. Denn durch das Speichern der bereits angelegten Ressourcen im State-File weiß Terraform, welche Ressourcen von ihm gemanagt werden. Eine Änderung jedweder Art betrifft nur diese Ressourcen. Daneben können auch manuell angelegte Ressourcen liegen. Werden zum Beispiel Ressourcen aus dem Template entfernt oder es ändern sich Konfigurationen von Ressourcen, erkennt Terraform automatisch welche Ressourcen entfernt oder geändert werden müssen. Falls nötig, werden Ressourcen gelöscht und neu deployt.
State-Files in Terraform können aber vertrauliche Informationen enthalten und müssen daher ähnlich sicherheitskritisch behandelt werden wie ein Passwort. Deswegen können hier zusätzliche Aufwände entstehen, die in Azure Bicep nicht nötig sind.
Da Azure Bicep kein State-File hat, erkennt es nur über die Namen der Ressourcen, ob die Ressourcen bereits existieren. Eine einfache Umbenennung einer bestehenden Ressource kann damit schon zur Herausforderung werden.
Derjenige, der deployt, muss demnach selbst wissen, ob Ressourcen angepasst werden müssen oder nicht. Das kann naturgemäß sehr schnell unübersichtlich und kompliziert werden und ist deshalb ein Nachteil von Azure B
Was beide Tools bieten, ist eine Syntax-Prüfung. Damit ermöglichen sie den Code vor der Ausführung auf Fehler zu überprüfen. Die Prüfung ist aber keine Garantie dafür, dass beim Deployment nicht dennoch Fehler auftreten.
Day-Zero-Support:
Da Azure Bicep auf ARM-Templates basiert, wird jede neue in Azure verfügbare Ressource sofort auch in Bicep unterstützt. Dies ist als Day-Zero-Support bekannt. Bei Terraform muss einige Tage oder Wochen gewartet werden, bis die Ressource von einem Mitglied der Terraform-Community hinzugefügt wird. Neue Ressourcen könnten weiterhin mithilfe von ARM-Templates oder im Portal bereitgestellt werden, jedoch würde dadurch die Konsistenz des State-Files verloren gehen.
Dokumentation und Community-Support:
Azure Bicep befindet sich aktuell noch in der Beta-Version (Stand: Mai 2021), deshalb wird die Verwendung in der Produktionsumgebung noch nicht empfohlen. Die Dokumentation und der Community Support sind derzeit nur sehr eingeschränkt verfügbar. Terraform ist hingegen einer der Marktführer und seit mehreren Jahren auf dem Markt. Die Dokumentation sowie der Community-Support sind sehr umfangreich und stellen deshalb einen klaren Vorteil von Terraform dar.
Fazit zum Vergleich Azure Bicep vs. Terraform
Azure Bicep und Terraform haben beide ihre Stärken und Schwächen. Terraform bietet den großen Vorteil, auf einer Mulitprovider-kompatiblen Sprache aufgebaut zu sein und wird deshalb von vielen Cloud-Anbietern unterstützt. Azure Bicep kann hingegen ausschließlich für Azure verwendet werden. Azure Bicep basiert allerdings auf ARM-Templates und hat deshalb den Vorteil, Day-Zero-Support für neue Features bereitstellen zu können. Zudem sollte man nicht vergessen, dass Azure Bicep sich zurzeit noch in der Beta-Version befindet und noch nicht allgemein verfügbar ist. Microsoft hat also im Rahmen der noch laufenden Weiterentwicklung die Möglichkeit, weitere Verbesserungen vorzunehmen und zusätzliche Features bereitzustellen.
Ein großer Terraform-Vorteil ist der große Community-Support, der bei Azure Bicep aktuell nur sehr dürftig ausfällt. Nach der offiziellen Veröffentlichung könnte es sein, dass auch hier der Community-Support ansteigt. Für Benutzer von Terraform gibt es momentan keinen Grund für einen Wechsel zu Azure Bicep. Für Benutzer von ARM-Templates, die in Zukunft auf eine leichtere und weniger schreibintensive Sprache umsteigen möchten, könnte Azure Bicep eine geeignete Alternative sein.
Ob man sich in Zukunft in einem Azure-Projekt für Bicep oder Terraform entscheidet, hängt als vor allem an den eigenen Präferenzen und an der weiteren Entwicklung von Azure Bicep. Da Azure Bicep sich aktuell noch in einem frühen Entwicklungsstadium befindet, empfiehlt es sich in jedem Fall, das Tool weiter zu beobachten.