“Infrastructure as Code”: Programmierung für Administratoren

CloudCloud-Management

Wo heute der Administrator noch Häckchen setzt, werden künftig selbst programmierte Infrastrukturen auf Code aufbauen. So verfügt jedes Unternehmen über einen individuell abgestimmten Software-Stack, prognostiziert Crisp-Research-Analyst René Büst.

Im Rahmen der Nutzung von Cloud-Infrastrukturen zeigen Erfahrungen, dass Entwickler- und insbesondere Programmierkenntnisse immer wichtiger werden, um Software-defined-Infrastructure-Umgebungen (SDI) aufzubauen. Schließlich werden massiv skalierbare und hochverfügbare Cloud-Infrastrukturen und -Systeme heute und zukünftig konfiguriert, indem sie mit Code oder Skripten programmiert werden – Stichwort: “Infrastructure as Code” (IaC).

Warum ist “Infrastructure as Code” notwendig?

Als Teil der digitalen Transformation gehen immer mehr Unternehmen dazu über, ihre individuelle Digital Infrastructure Platform (DIP) zu entwickeln. Dabei handelt es sich um einen Stack von Software- und Service-Komponenten, die auf unterschiedlichen Ebenen für die notwendige Unterstützung sorgen. Insbesondere die Infrastrukturen der großen Public-Cloud-Anbieter (Amazon Web Services, Microsoft Azure, Google Cloud Platform, IBM Softlayer/ Bluemix) sind Programmierbaukästen, mit denen sich virtuelle Infrastrukturen auf den Cloud-Umgebungen entwickeln lassen, auf welchen dann Web-Applikationen und eigene Services betrieben werden.

Damit nimmt auch die Bedeutung von “Infrastructure as Code” stetig zu, da eine Cloud-Anwendung ist nur so viel wert ist wie die Architektur, auf der sie basiert, denn eine Anwendung muss direkt für die jeweilige Cloud-Umgebung entwickelt werden. Dies impliziert, dass Skalierbarkeit und Hochverfügbarkeit von Beginn an mit zu berücksichtigen sind.

Die Cloud-Anwendung muss also in der Lage sein, eigenständig weitere virtuelle Maschinen hochzufahren, wenn mehr Leistung benötigt wird (Skalierbarkeit) beziehungsweise die nicht mehr benötigten virtuellen Maschinen auch selbstständig wieder herunterzufahren. Analog verhält es sich, wenn eine virtuelle Maschine in einen fehlerhaften Zustand fällt. Hierfür muss die Anwendung selbst dafür sorgen, dass entsprechend eine virtuelle Maschine als Ersatz hochgefahren wird und die defekte Maschine aus dem System verschwindet (Hochverfügbarkeit).

Eine Cloud-Anwendung muss daher jede beliebige virtuelle Maschine (VM) einer Cloud-Infrastruktur als Teil der Applikation betrachten. Dies liegt unter anderem daran, dass jederzeit eine VM ausfallen kann und eine andere neu hochgefahren werden muss. Hinzu kommt, dass auch die Daten, auf die eine Anwendung zugreift, sich zwangsläufig nicht mehr an einem einzigen Ort befinden, sondern über die Cloud verteilt gespeichert sind.

Infrastructure as Code. (Bild: Crisp Research)
Infrastructure as Code. (Bild: Crisp Research)

Wie sich damit gut erkennen lässt, können die so genannten Legacy-Anwendungen somit nicht ohne weiteres 1:1 in die Cloud migriert und damit skalierbar und hochverfügbar betrieben werden. Stattdessen sollten Anwendungen für die Cloud an die Eigenschaften einer (proprietären) Cloud-Infrastruktur angepasst und bestmöglich auf deren Spezifikation abgestimmt werden. Kurzum müssen native Cloud-Anwendungen von Beginn an für die Cloud entwickelt werden. Dazu gehört es, die Anforderungen der entsprechenden Cloud-Infrastruktur zu analysieren und individuell zu berücksichtigen.

Wie funktioniert “Infrastructure as Code”?

Wie der Name bereits verrät, handelt es sich bei “Infrastructure as Code” um die Entwicklung von Programmcode. Auf Basis von Skripten und durch Tools wie Chef, Puppet, Ansible oder Salt unterstützt, wird beschrieben, wie eine Infrastruktur aussehen soll.

Innerhalb des Skript-Codes wird zum Beispiel festgehalten,

  • wie viele Server benötigt werden
  • um welche Art von Server (Anzahl CPU, RAM, etc.) es sich handelt
  • welche Software (z.B. Betriebssystem, Webserver, Datenbank) auf dem Server vorab installiert und konfiguriert ist
  • wie Autoscaling Groups konfiguriert werden
  • auf welche Daten der Server zugreift und wo sich diese befinden
  • mit welchen anderen Systemen der Server kommuniziert
  • mit welchen anderen Microservices oder Platform-Services die Infrastruktur interagiert
  • welche Datenbanken Teil der Infrastruktur sind
  • wie der/ die Load Balancer konfiguriert sind
  • wie das virtuelle Netzwerk-Design ausschaut
  • wie die Zuweisung von Security Groups erfolgt

Auf Basis dieses Skripts beziehungsweise des Programmcodes wird somit automatisiert eine IT-Infrastruktur “aufgespannt”, innerhalb derer alle vorab definierten Ressourcen existieren. Die gesamte Infrastruktur ist damit “Software-defined” entwickelt auf Basis von Code, wie man es normalerweise nur aus der Programmierung von Applikationen kennt.

Ein großer Vorteil des “Infrastructure as Code” Konzepts besteht in der Wiederverwendbarkeit beziehungsweise Anpassbarkeit des verwendeten Skripts/Code. Damit besteht die Möglichkeit, dieselbe Infrastruktur zu einem anderen Zeitpunkt oder an einer anderen Stelle (zum Beispiel eine andere Region beim selben Cloud-Anbieter) erneut aufzubauen – und dies durch die erneute “simple” Ausführung desselben Skripts. Zudem lässt sich der Automatisierungsgrad damit auf nahezu 100 Prozent bringen. Zum Zeitpunkt des Deployments der Infrastruktur ist damit keine menschliche Interaktion mehr notwendig. Außerdem lassen sich damit  Ausnahmesituationen berücksichtigen, indem die Infrastruktur anhand von weiteren Services und Tools wie “Netflix Simian Army” in der Lage ist, sich “selbständig zu heilen”.

Der Admin 2.0 programmiert

“Infrastructure as Code” ist unter den “coolen Jungs” schon seit mehreren Jahren weit verbreitet und wird in den nächsten ein bis zwei Jahren endgültig auch in der Breite einen wichtigen Platz in IT-Abteilungen einnehmen (müssen), um die Entwicklung und den Betrieb moderner, Cloud-nativer Applikationen zu unterstützen.

Eine wesentliche Erkenntnis der “Infrastructure as Code” Ära folgt der Logik: Der Administrator 1.0 klickt, der Admin 2.0 programmiert. Somit ändert sich auch das Skillset dieser Berufsgruppe maßgeblich. Der moderne Administrator ist ein Entwickler und sollte u.a. die folgenden Kenntnisse besitzen:

  • Verständnis für Cloud-Architekturkonzepte
  • Programmierkenntnisse
  • Offen gegenüber dem DevOps-Konzept
  • Kenntnisse über IaC-Tools wie Chef, Puppet, Ansible und Salt
  • Umgang mit APIs
  • Kenntnisse in Programmiersprachen wie Java, Node.js, Python usw.
  • Verständnis für den Aufbau von verteilten, skalierbaren und hochverfügbaren Infrastrukturen

Es ist daher nicht verwunderlich, dass z.B. in Berlin derzeit bis zu 20.000 Euro Headhunter-Gebühren bezahlt werden, um Mitarbeiter mit diesem Skillset zu bekommen. Wer sich aus technischer Perspektive tiefer mit dem Thema “Infrastructure as Code” auseinandersetzen möchte, dem ist das Buch “Infrastructure as Code: Managing Servers in the Cloud” von Kief Morris zu empfehlen.