Was ist Infrastructure-as-Code (IaC)?

Infrastructure as Code (IaC) nutzt die DevOps-Methodik und die Versionierung mit einem beschreibenden Modell zur Definition und Bereitstellung von Infrastrukturen wie Netzwerken, virtuellen Computern, Lastverteilern und Verbindungstopologien. Genauso wie der gleiche Quellcode immer die gleiche Binärdatei erzeugt, erzeugt ein IaC-Modell bei jeder Bereitstellung die gleiche Umgebung.

Diagram of infrastructure as code defining the environment in a versioned file.

IaC ist eine wichtige DevOps-Praxis und eine Komponente der kontinuierlichen Bereitstellung. Mit IaC können DevOps-Teams mit einem einheitlichen Satz von Praktiken und Tools zusammenarbeiten, um Anwendungen und ihre unterstützende Infrastruktur schnell und zuverlässig in großem Umfang bereitzustellen.

Vermeidung einer manuellen Konfiguration, um Konsistenz zu erzwingen

IaC wurde entwickelt, um das Problem der Umgebungsabweichung in Release-Pipelines zu lösen. Ohne IaC müssen die Teams die Einstellungen für die Bereitstellungsumgebung einzeln pflegen. Mit der Zeit wird jede Umgebung zu einer „Schneeflocke“, einer einzigartigen Konfiguration, die nicht automatisch reproduziert werden kann. Inkonsistenzen zwischen Umgebungen können zu Problemen bei der Bereitstellung führen. Die Verwaltung und Wartung der Infrastruktur erfordert manuelle Prozesse, die fehleranfällig und schwer nachvollziehbar sind.

IaC vermeidet die manuelle Konfiguration und sorgt für Konsistenz, indem es die gewünschten Umgebungszustände über gut dokumentierten Code in Formaten wie JSON darstellt. Infrastrukturbereitstellungen mit IaC sind wiederholbar und verhindern Laufzeitprobleme, die durch Konfigurationsabweichungen oder fehlende Abhängigkeiten verursacht werden. Release-Pipelines führen die Umgebungsbeschreibungen und Versionskonfigurationsmodelle aus, um die Zielumgebungen zu konfigurieren. Um Änderungen vorzunehmen, bearbeitet das Team die Quelle, nicht das Ziel.

Idempotenz, die Fähigkeit einer bestimmten Operation, immer das gleiche Ergebnis zu erzeugen, ist ein wichtiges IaC-Prinzip. Ein Befehl zur Bereitstellung setzt die Zielumgebung immer in dieselbe Konfiguration, unabhängig vom Ausgangszustand der Umgebung. Idempotenz wird erreicht, indem entweder das vorhandene Ziel automatisch konfiguriert wird oder indem das vorhandene Ziel verworfen und eine neue Umgebung erstellt wird.

Nützliche Tools

Schnelle Bereitstellung stabiler Testumgebungen

IaC unterstützt DevOps-Teams beim Testen von Anwendungen in produktionsähnlichen Umgebungen in einem frühen Stadium des Entwicklungszyklus. Teams können bei Bedarf zuverlässig mehrere Testumgebungen bereitstellen. Die Cloud stellt Umgebungen auf der Grundlage von IaC-Definitionen dynamisch bereit und baut sie wieder ab. Der Infrastrukturcode selbst kann validiert und getestet werden, um allgemeine Probleme bei der Bereitstellung zu vermeiden.

Verwendung deklarativer Definitionsdateien

IaC sollte nach Möglichkeit deklarative Definitionsdateien verwenden. Eine Definitionsdatei beschreibt die Komponenten und die Konfiguration, die eine Umgebung erfordert, aber nicht unbedingt, wie diese Konfiguration erreicht werden kann. So kann die Datei beispielsweise eine erforderliche Serverversion und -konfiguration definieren, aber nicht den Prozess der Serverinstallation und -konfiguration angeben. Diese Abstraktion ermöglicht eine größere Flexibilität bei der Verwendung optimierter Techniken, die der Infrastrukturanbieter bereitstellt. Deklarative Definitionen tragen auch dazu bei, die technischen Schulden bei der Pflege von imperativem Code, wie z. B. Bereitstellungsskripten, zu reduzieren, die im Laufe der Zeit anfallen können.

Es gibt keine Standardsyntax für deklaratives IaC. Die Syntax zur Beschreibung von IaC hängt normalerweise von den Anforderungen der Zielplattform ab. Verschiedene Plattformen unterstützen Dateiformate wie YAML, JSON und XML.

Bereitstellung von IaC auf Azure

Azure bietet native Unterstützung für IaC über das Azure Resource Manager-Modell. Teams können deklarative ARM- oder Bicep-Vorlagen definieren, die die für die Bereitstellung von Lösungen erforderliche Infrastruktur festlegen.

Plattformen von Drittanbietern wie Terraform, Ansible, Chef und Pulumi unterstützen ebenfalls IaC, um eine automatisierte Infrastruktur zu verwalten.