Infrastructure as Code (IaC)
Geht es um IT-Infrastruktur, führt mittlerweile kaum ein Weg an virtualisierter, per Software steuerbarer Hardware vorbei. Punktgenau lassen sich Speicher-, Server- und Netzwerk-Ressourcen oder gar komplette Rechenzentren zusammenstellen und jederzeit skalieren, ohne dass hierfür ein manueller Zugriff auf die jeweiligen Geräte erforderlich ist. Dank Infrastructure-as-a-Service-Providern kann die zugrundeliegende, softwaredefinierte Hardware sogar kostengünstig gemietet werden, was Inhouse-Infrastruktur gänzlich entbehrlich macht.
Anspruchsvoll bleibt das Management der verschiedenen Ressourcen dennoch – insbesondere aufgrund der stetig steigenden Ansprüche an IT-Infrastruktur und der Tatsache, dass häufig gleichzeitig auf die Dienste mehrerer unterschiedlicher IaaS-Anbieter zurückgegriffen wird. Einen immer höheren Stellenwert nimmt daher das Prinzip „Infrastructure as Code“ ein, das auch unter der Bezeichnung „programmierbare Infrastruktur“ bekannt ist.
Was ist Infrastructure as Code (IaC)?
Bei Infrastructure as Code, oder kurz IaC, handelt es sich um ein IT-Paradigma, demgemäß nicht nur Software, sondern auch die zur Ausführung benötigte Infrastruktur wie Speicherplatz (Storage), Rechenpower oder Netzwerkressourcen in Computersprache beschrieben wird. Es geht prinzipiell also darum, auch Hardware-Strukturen als ausführbaren Code zu programmieren, der sich jederzeit problemlos anpassen, duplizieren, löschen und versionieren lässt. Dabei baut das Infrastructure-as-Code-Konzept auf modernen Cloud-Technologien wie Virtualisierung und softwaredefiniertem Ressourcen-Handling auf, die ein solches Hardware-Management ohne manuellen Zugriff auf die zugrundeliegenden Geräte erst möglich machen.
Infrastructure as Code: Infrastructure as Code (IaC) ist ein Paradigma in der Informationstechnik, das die Beschreibung von Hardware in maschinenlesbarem Code vorsieht. Auf diese Weise lassen sich der Aufbau und das Management von IT-Infrastruktur in hohem Maße automatisieren, um punktgenau auf wechselnde bzw. neue Anforderungen reagieren zu können.
Was ist die Zielsetzung von Infrastructure as Code?
Die Ansprüche an Software-Produkte sind in den vergangenen Jahren rapide gestiegen. Daraus resultierende Konsequenzen sind z. B. immer kürzer werdende Entwicklungszyklen und ein Streben nach maximaler Verfügbarkeit und Flexibilität. Neben einer optimierten Code-Entwicklung zählt daher auch die ständige Verbesserung und intensive Pflege der zugrundeliegenden Hardware-Infrastruktur zu den Eckpfeilern für ein erfolgreiches, stabiles und vor allem konkurrenzfähiges Gesamtkonstrukt. An dieser Stelle kommt Infrastructure as Code ins Spiel, denn das Konzept „programmierbare Infrastruktur“ ist speziell dafür entwickelt worden, die Qualität und Effizienz von Infrastrukturen zu erhöhen. Zu den elementaren Zielen und Aufgaben von IaC zählen dabei u. a.:
- manuelle Prozesse so weit wie möglich zu automatisieren
- die Grenzen zwischen Anwendungen und den Umgebungen, in denen sie ausgeführt werden, aufzuheben
- einen flexiblen Workflow zu schaffen, der die unternehmensweite Zusammenarbeit für alle, die am Entwicklungsprozess beteiligt sind, vereinfacht
- Bewegungen von Inhalten und Änderungen jederzeit transparent und detailliert nachvollziehbar zu machen
- Hardware-Set-ups in gleichem Maße „testbar“ wie Software zu machen
Wie setzt sich Infrastructure as Code von bisherigen Ansätzen ab?
Im klassischen, nichtvirtualisierten Umfeld sind sämtliche Ressourcen immer direkt an physische Hardware gebunden, was nicht nur eine wenig flexible Infrastruktur zur Folge hat, sondern auch mit einer Menge Handarbeit bei jeglichen Änderungen am Set-up verbunden ist.
Mit der Virtualisierung von Server-Hardware, Speicher und Netzwerkstrukturen hat sich diese Ausgangslage erheblich geändert: Dank der Technologie haben Provider die Möglichkeit, Kunden zentral regulierbare Ressourcen anzubieten, ohne hierfür dedizierte Hardware zuweisen zu müssen. Das sorgt zum einen für eine deutlich höhere Ausfallsicherheit, da etwa defekte Hardware umgehend ersetzt werden kann. Zum anderen ist auch das Hinzubuchen neuer Ressourcen bzw. das Zurückfahren bereits gemieteter Ressourcen für beide Seiten deutlich einfacher.
Einen Schritt weiter als gewöhnliche virtualisierte Infrastrukturen gehen softwaredefinierte (Software Defined) Umgebungen. Diese zeichnen sich dadurch aus, dass die Steuerlogik komplett aus den einzelnen Hardware-Komponenten abstrahiert und in eine zentrale Steuersoftware implementiert wird. Provider und Kunden können diese Steuereinheit dank entsprechender Schnittstellen und Tools problemlos ansteuern und IT-Strukturen ganz individuell zusammenstellen sowie punktgenau skalieren. Zudem profitieren beide Seiten von einer erhöhten Leistungsfähigkeit der Hardware, da diese nicht für die Datenverarbeitung zuständig ist.
Bei softwaredefinierten Services haben Sie die Wahl zwischen Einzelpaketen wie Software Defined Storage (Speicher), Software Defined Computing (Rechenpower) oder Software Defined Networking (Netzwerkstrukturen) und dem Komplettpaket Software Defined Data Center (Rechenzentrum).
Infrastructure as Code bedient sich der zuvor genannten Techniken, indem es das softwaregesteuerte Management der jeweiligen virtualisierten Ressourcen automatisiert, um das Potential der Cloud optimal auszuschöpfen. Damit ist IaC nicht als Alternative, sondern als Ergänzung bzw. Optimierung softwaredefinierter Infrastruktur zu verstehen.
Welche Vorteile und Nachteile hat Infrastructure as Code?
Infrastructure as Code trägt entscheidend dazu bei, die Anforderungen agiler Software-Entwicklung zu erfüllen. Erforderliche Änderungen an der Infrastruktur sind dank fertig konfigurierter Skripte in einem Tempo vollzogen, das Sie bei manueller Administration schlichtweg nicht erreichen können. Dabei spielt es keinerlei Rolle, ob die Anpassungen mitten in der Nacht, am Wochenende oder an einem Feiertag zu realisieren sind. Darüber hinaus sinkt das Fehlerpotenzial – insbesondere bei Administrationsschritten, die es häufig zu wiederholen gilt –, da Eingabe- und Tippfehler ausgeschlossen sind. Zusätzlich zur hohen Geschwindigkeit und der geringen Fehleranfälligkeit punktet Infrastructure as Code gegenüber manueller Administration durch folgende Vorteile:
- Hohe Effizienz: IaC bietet die Möglichkeit, den Großteil des Ressourcenmanagements zu automatisieren und trägt damit entscheidend zur Optimierung des Software Development Life Cycles (SDLC), also des gesamten Entwicklungsprozesses, bei.
- Wiederverwendbarkeit: Sobald der Code für eine Infrastruktur geschrieben ist, lässt er sich jederzeit und so oft wie gewünscht ausführen, um diese Infrastruktur umzusetzen. Gleiches gilt z. B. auch für Sandbox-Umgebungen während der Entwicklungsphase(n).
- Versionsverwaltung: Wo Code ist, ist auch Versionsverwaltung möglich – und so erlaubt Infrastructure as Code die Dokumentation und Verfolgung jeglicher Änderungen, die an einer Infrastruktur vorgenommen werden. Das hat u. a. den Vorteil, dass sich ein vorangegangenes Set-up ohne Probleme wiederherstellen lässt.
- Minimierung von Kosten/Aufwand: Die Automatisierung der Infrastrukturverwaltung spart eine Menge Aufwand und Kosten, die wiederum in andere Bereiche investiert werden können.
Der zuletzt genannte Vorteil, Kosten und Zeit einzusparen, ist allerdings nicht ohne Einschränkungen zu nennen. Auf eine gut programmierte Infrastructure-as-Code-Umgebung trifft diese Tatsache zwar zu – allerdings darf der Aufwand, der mit ihrer Konzeption und Umsetzung verbunden ist, nicht außer Acht gelassen werden: So bedeutet das IaC-Modell für viele verantwortliche Administratoren große Umstellungen, denn ohne ein umfassendes Verständnis von Cloud-Architektur-Konzepten sowie ohne Know-how in Programmiersprachen wie Java, Node.js, Python usw. und im Umgang mit APIs ist der Umstieg auf eine automatisierte Infrastruktur bzw. deren Realisierung kaum möglich. Gerade zu Beginn ist daher mit vergleichsweise hohen Kosten und einem hohen Einarbeitungsaufwand zu rechnen.
IaC-Tools: Wichtige Stützen bei der Programmierung von Infrastructure as Code
Bereits eingangs ist thematisiert worden, dass Unternehmen in den meisten Fällen auf die Dienste mehrerer verschiedener IaaS-Provider setzen. Das hat zur Folge, dass Administratoren sich mit den Eigenheiten und vor allem mit den unterschiedlichen Schnittstellen der jeweiligen Plattformen auseinandersetzen müssen. Alternativ bieten spezielle IaC-Tools bzw. -Frameworks eigene Konfigurationssprachen, die ein anbieterübergreifendes Management der Ressourcen ermöglichen und genaue Kenntnisse über die angesprochenen APIs überflüssig machen. Einige der beliebtesten Lösungen sind:
- Terraform: Grundsätzlich Open Source lässt sich das von HashiCrop entwickelte Terraform in seiner Basisversion kostenfrei herunterladen und nutzen. Zwei kostenpflichtige Editionen bieten Features für Einrichtungen und Organisation sowie für die Arbeit im Team.
- AWS CloudFormation: CloudFormation ist das hauseigene IaC-Tool der Amazon Web Services (AWS) und als solches quasi unverzichtbar für alle, die mit AWS-Produkten wie ELB, S3 oder EFS arbeiten. Für die Nutzung fallen keine zusätzlichen Gebühren an, sodass Nutzer lediglich die gebuchten Ressourcen zahlen.
- Google Cloud Deployment Manager: Was CloudFormation für AWS ist, ist der Deployment Manager für die Google-Cloud-Plattform. Wer seine IaaS-Ressourcen also aus dem Hause Google bezieht, kann diese mit dem kostenlosen Tool bequem über zentrale Konfigurations-Dateien in der Auszeichnungssprache YAML verwalten.
- Chef Infra: Chef Infra ist die IaC-Lösung des US-amerikanischen Unternehmens Chef. Seit April 2019 unter der freien Apache-2.0-Lizenz stehend, wird Chef Infra u. a. von Facebook genutzt. Zu den unterstützten Plattformen zählen Google Cloud, Microsoft Azure, Amazon EC2 und OpenStack.
- Red Hat Ansible Tower: Das Infrastructure-as-Code-Werkzeug Ansible gehört seit 2015 zum Portfolio der Software-Schmiede Red Hat. Es bietet ein visuelles Dashboard, eine eigene Kommandozeile und eine leistungsstarke REST-API. Die beiden verfügbaren Pakete „Standard“ und „Premium“ sind allerdings kostenpflichtig.
Infrastructure as Code: Beispiele
Der Infrastructure-as-Code-Ansatz ist für alle Unternehmen interessant, die komplexe Anwendungen entwickeln und betreiben und aus diesem Grund auf ebenso umfassende und leistungsstarke Infrastruktur angewiesen sind. Entscheidende Gründe, auf die Programmierung von Infrastruktur zurückzugreifen, sind:
- die Nutzung einer großen Menge an IaaS-Ressourcen
- Infrastruktur ist bei vielen verschiedenen Providern bzw. Plattformen gemietet
- Infrastruktur bedarf regelmäßiger Anpassungen
- eine gute Dokumentation der Infrastruktur-Änderungen ist gefragt
- eine optimale Zusammenarbeit von Administratoren und Entwicklern ist gewünscht
Auch wenn Unternehmen grundsätzlich eigene IaC-Konfigurationsdateien programmieren könnten und dies sicherlich zum Teil auch tun, gehört der Einsatz der oben genannten Tools bzw. Frameworks wohl bei allen Administratoren, die mit IaC arbeiten, zum Alltag. Anstelle von konkreten Infrastructure-as-Code-Beispielen zeigen daher folgende Clips zum Abschluss, wie sich Infrastruktur-Code mit den praktischen IaC-Werkzeugen (hier: AWS CloudFormation und Terraform) programmieren lässt.