Infrastructure as Code: Hype oder Hilfe?

Was ist Infrastructure as Code und welche Vor- und Nachteile für den Aufbau und das Management von Cloud-Infrastrukturen hat IaC? Fest steht: Mit IaC lassen sich große, verteilte Systeme und serviceorientierte Architekturen einfacher verwalten.

Die Cloud verspricht viel. Statt das eigene Rechenzentrum ständig upzudaten und zu managen, gibt es Rechen- und Speicherkapazität nach Belieben. Wer will sich dann noch mit Serverinstallationen und Upgrades herumschlagen? Doch komplexe Multi-Cloud-Strukturen funktionieren nicht mehr mit ein paar Mausklicks. Zumal Unternehmen immer häufiger gleichzeitig auf die Dienste verschiedener IaaS-Anbieter setzen.

Hardware mit Software steuern

Deswegen beschäftigen sich Cloud-Betreiber und Cloud-Nutzer viel mit Automatisierung. Eine Lösung: „Infrastructure as Code“. Es geht dabei darum, das Management der IT-Infrastruktur wie eine App zu programmieren. Die virtualisierte Hardware wird also per Software gesteuert. Neue Server sind in kürzester Zeit aufgesetzt, da der Code die Arbeit macht. Speicher-, Server- und Netzwerk-Ressourcen sind ohne manuellen Eingriff betriebsbereit und skalierbar.

Infrastructure as Skript-Code definiert zum Beispiel, wie viele und welche Server benötigt werden, zum Beispiel die Anzahl der CPUs oder den benötigten RAM. Der Code legt fest, welche Software auf dem Server vorab installiert und konfiguriert sein muss, auf welche Daten er zugreift und mit welchen Systemen er kommunizieren muss. Welche Datenbanken gehören zur Infrastruktur und wie sind die Load-Balancer konfiguriert.

Manuelles Management ist fehleranfällig

Heute wird die Infrastruktur meist über ein Verwaltungsportal verwaltet. Der Bedarf wird zusammengeklickt und bereitgestellt und dann für lange Zeit nicht mehr angefasst. Doch Rechnerstrukturen sind schnelllebiger, erst recht in der Cloud. Was der Cloud-Nutzer nicht mehr braucht, schaltet er schnellstmöglich ab, um Kosten zu sparen. Und Rechenkapazitäten brauchen die Nutzer kurzfristig, oftmals nur für wenige Tage oder sogar wenige Stunden. Zudem gibt es nicht mehr die großen, fetten und trägen Instanzen, sondern virtuelle, agile und schlanke Server. Manuell ist dies kaum mehr fehlerfrei zu bewältigen. Mit der Zeit wird jede Umgebung zu einer einzigartigen Konfiguration, die nicht automatisch reproduziert werden kann. Inkonsistenzen zwischen den Umgebungen führen zu Problemen bei der Bereitstellung.

Script für Infrastruktur-Konfiguration wiederverwendbar

Die Idee von IaC ist es nun, sich wiederholende, manuelle Aktionen zu automatisieren, in dem ein Entwickler dafür ein Script schreibt. Das wird dann immer automatisch ausgeführt, wenn es gebraucht wird. Zum Beispiel, um virtuelle Maschine mit bestimmter Konfiguration einzuschalten und wieder auszuschalten. Was dann vorliegt, ist eine wiederverwendbarer Code, der sich bei Bedarf einfach anpassen lässt. Damit besteht die Möglichkeit, dieselbe Infrastruktur zu einem anderen Zeitpunkt oder an einer anderen Stelle erneut aufzubauen – und dies durch die erneute Ausführung desselben Skripts.

Auf Basis von Programmcodes lässt sich somit automatisiert eine IT-Infrastruktur aufspannen, innerhalb derer alle vorab definierten Ressourcen existieren. Die gesamte Infrastruktur ist damit Software-definiert, entwickelt auf Basis von Code, wie man es normalerweise nur aus der Programmierung von Applikationen kennt. Zum Beispiel kann IaC einen MySQL-Server installieren, verifizieren, ob er MySQL korrekt ausführt, einen Benutzer-Account und das Passwort erzeugen, eine neue Datenbank einrichten und nicht benötigte Datenbanken entfernen – alles per Code. Nimmt das Team Änderungen vor, bearbeitet es also die Quelle und nicht das Ziel. Diese Änderung wird dann schnell und unkompliziert anderen Systemen bereitgestellt.

IaC ist demnach wiederholbar und verhindert Laufzeitprobleme, die durch Konfigurationsveränderungen verursacht werden. Zudem lässt sich der Automatisierungsgrad damit auf nahezu 100 Prozent steigern. Zum Zeitpunkt des Deployments der Infrastruktur ist damit keine menschliche Interaktion mehr notwendig. Außerdem ist die Infrastruktur in der Lage, sich selbständig zu heilen.

Einfache Updates und mehr Compliance mit IaC

Ein Unternehmen kann Infrastructure as Code auch mit Containern kombinieren, die die Anwendung von der Infrastruktur auf Betriebssystemebene abstrahieren. Da die Betriebssystem- und Hardware-Infrastruktur automatisch bereitgestellt und die Anwendung darauf gekapselt wird, ergänzen sich diese Technologien für verschiedene Bereitstellungsziele wie Test, Staging und Produktion. Die Vorteile der Codierung der Ressourcen reichen also von der Durchsetzung der Konfiguration über einfachere Updates bis hin zu mehr Compliance.

Da alles Code ist, muss das IT Operations-Team verstehen, wie sie den Code schreiben muss. IT-Administratoren müssen also Code-Struktur, Syntax und Design verstehen. Und die IT-Mitarbeiter müssen lernen, die Infrastruktur in den Scripten zu verwalten und Konfigurationseinstellungen nicht in irgendeiner anderen Form zu ändern. Es wird unvermeidlich Fälle geben, in denen ein Admin eine Konfiguration direkt auf dem Server ändert und sich dann fragt, warum der Server die Konfiguration ohne Vorwarnung wiederherstellt. Alle Änderungen an der Infrastruktur müssen in dem Code vorgenommen werden, der diese Bereitstellung vorschreibt.

Versionshistorie immer verfügbar

Unternehmen können dank Infrastruktur as Code sicher sein, dass jedes Gerät eine Anwendung so unterstützt, wie es ausgeführt werden soll. Die Dokumentation wird nicht veraltet sein, denn sobald der IT-Administrator eine Dokumentation aktualisiert, folgt der Server sofort dem Beispiel. Wenn Administratoren Infrastrukturcode unter Source Control stellen, wird jede Änderung aufgezeichnet und kann leicht rückgängig gemacht. Es gibt keine Rätsel mehr, wenn sich etwas geändert hat. Ein Blick auf die Historie der Versionen reicht. Wenn Änderungen fehlschlagen, kehren Sie zur alten Version zurück, und das Gerät kehrt ebenfalls zu seiner vorherigen Konfiguration zurück.

Einfachere Auditierung und Sicherheit sind weitere Vorteile von IaC. Wenn ein Auditor Berichte über den Zustand eines Netzwerks benötigt, müssen Administratoren in aller Eile Skripte schreiben, die die gewünschten Informationen von Servern beziehen – nur um festzustellen, dass sie nicht richtig konfiguriert sind. Wenn alles im Code definiert ist, kann der IT-Betrieb dem Auditor ein Netzwerkdiagramm in Form aller Serverkonfigurationen zur Verfügung stellen.

Vorsicht bei Konfigurationsveränderungen

Trotz ihrer Vorteile weist IaC potenzielle Nachteile auf. Es erfordert zusätzliche Werkzeuge, wie ein Konfigurationsmanagementsystem. Fehler können sich schnell über Server ausbreiten. Daher ist es wichtig, die Versionskontrolle zu überwachen und umfassende Vorabtests durchzuführen. Wenn Administratoren Serverkonfigurationen ändern, ohne gleichzeitig den IaC-Code anzupassen, verbreiten sich möglicherweise die Konfigurationsveränderungen über das gesamte Rechenzentrum hinweg. Es ist daher wichtig, IaC komplett in die Systemadministration, den IT-Betrieb und die DevOps-Prozesse mit gut dokumentierten Richtlinien und Verfahren zu integrieren.

Fazit: Trotz gewisser Nachteile handelt es sich bei IaC um die nächste Generation des Infrastrukturmanagements. Wo bisher mehrere Arbeitsstunden und Personalressourcen für den Softwarebereitstellungszyklus anfielen – vom Entwickler über den System- und Datenbankadministratoren bis zum Tester – reicht jetzt die einmalige Erstellung eines Scripts aus. Wer IaC vollständig umsetzt, könnte sich fragen, wie er jemals seine Infrastruktur anders verwaltet hat.

Virtuelle Ersatzmaschinen automatisiert hochfahren

Mit Infrastruktur as Code schreibt ein Entwickler den Anwendungscode sowie Anweisungen zum Konfigurationsmanagement auf, die Aktionen aus der Virtualisierungsumgebung und anderen Umgebungen wie Datenbank, Appliances, Testwerkzeuge, Bereitstellungstools und mehr auslösen.

Bei der Lieferung von neuem Code erstellt das Konfigurationsmanagement automatisch eine neue virtuelle Testumgebung mit einem Anwendungsserver und einer Datenbankinstanz, die die Struktur der realen Betriebsumgebung exakt widerspiegelt.

Eine Cloud-Anwendung ist also damit in der Lage, eigenständig weitere virtuelle Maschinen hochzufahren, wenn mehr Leistung benötigt wird, oder nicht mehr benötigte virtuelle Maschinen selbstständig wieder herunterzufahren. Analog verhält es sich, wenn eine virtuelle Maschine ausfällt. Dann sorgt die Anwendung selbst dafür, dass eine virtuelle Ersatzmaschine hochfährt – dank IaC komplett identisch mit dem ausgefallenen System. Die manuelle Wiederherstellung dagegen lässt die Türen für eine Vielzahl von menschlichen Fehlern offen.