IaC – Wie der Systemadministrator zum Programmierer wird

In der traditionellen Verwaltung der IT-Infrastruktur arbeiten Systemadministratoren an der physischen Hardware oder über diverse Interfaces, in welche sie Befehle eingeben, um Infrastruktur zu warten oder bereitzustellen. Diese Grundsätze ändern sich mit dem Schritt zur Cloud, hier trumpft „Infrastructure as Code (IaC)“ auf.

Was ist „Infrastructure as Code“?

Wie sich aus dem Begriff „Infrastructure as Code (IaC)“ ableiten lässt, werden Infrastrukturen durch erstellen eines Codes konfiguriert oder aufgebaut. Im Code wird beschrieben, wie die Infrastruktur auszusehen hat (deklarativ) und mittels Softwareschnittstelle (API), werden die Ressourcen erstellt oder konfiguriert. Dabei werden Prinzipien der agilen Softwareentwicklung angewandt.

IaC Workflow

Warum „Infrastructure as Code“?

Früher wurden Änderungen der Infrastruktur von Hand erledigt. Systemadministratoren mussten entweder an physischer Hardware oder in der virtuellen Schicht (Beispiel VMware) Ressourcen bereitstellen. Die Infrastruktur war jedoch begrenzt und konnte nur durch Beschaffung neuer Ressourcen erweitert werden. Dies stellt ein sehr träges Unterfangen dar. Die Cloud hingegen suggeriert scheinbar unendliche Ressourcen, die binnen Minuten zur Verfügung stehen. Somit verändern sich die Ressourcen einer IT-Infrastruktur (Compute, Storage und Networking) in der Cloud von unflexibler physischer Hardware in dynamische Software. Wo früher Handarbeit gefragt war, bildet heute eine programmierbare API die Schnittstelle.
Diese Tatsache bringt Systemadministratoren in unbekanntes Gebiet und stellt sie dadurch vor eine Reihe neuer Aufgaben und Herausforderungen. Anstatt einen neuen Server in ein Rack zu schrauben, zu verkabeln und zu installieren, muss sich der Administrator nun auf einer webbasierten Konsole die Ressourcen zusammenstellen.
Doch auch die Ansprüche der Verbraucher verändern sich aufgrund der neuen Möglichkeiten. So wird erwartet, dass neue Server oder Dienste keine monatelange Wartezeit nach sich ziehen. Dieser Umstand zwingt den Systemadministrator dazu, einen möglichst hohen Automatisierungsgrad zu erreichen. Eine Lösung bietet der „Infrastructure as Code“ Ansatz. Dies ist kein neues Tool, sondern eher als Paradigmenwechsel im Verwalten der Infrastruktur zu verstehen. Der Prozess der Erstellung einer Infrastruktur wird als programmieren verstanden und nutzt dabei die bekannten Möglichkeiten aus der Softwareentwicklung. Der Code soll beliebig duplizierbar, validiert und versioniert sein.

„The enabling idea of infrastructure as code is that the system and devices used to run software can be treated as if they, themselves, are software“ – Kief Morris

Vorteile

  • Dokumentiert: Die Infrastruktur ist durch den Code dokumentiert. Man hat stets ein komplettes Abbild der Infrastruktur bei sich im Code Repository.
  • Wiederverwendbar: Der Code kann mehrmals verwendet werden. Beispielsweise beim Aufbau verschiedener Umgebungen (DEV, Produktion) oder von unterschiedlichen Personen.
  • Validiert: Durch den Einsatz bekannter Softwareentwicklungstools kann im Code und daraus resultierend auch auf der Infrastruktur, eine validierte Umgebung geschaffen werden.
  • Geschwindigkeit: Komplexe Umgebungen können sehr schnell erstellt und konfiguriert werden.
  • Nachvollziehbarkeit: Durch die Versionskontrolle kann lückenlos festgestellt werden, wer wann welche Änderung vollzogen hat.
  • Fehlerreduktion: Mittels Review-Prozess (z.B. mit GitLab) können Fehler reduziert werden.
  • Kosten: Durch die hohe Automatisierung und Wiederverwendbarkeit werden die Aufwände und die daraus resultierenden Kosten reduziert.

Praxisbeispiel

Nehmen wir an, eine Firma entwickelt Webapplikationen für Kunden und nutzt die AWS Cloud für diese Infrastruktur. Eine Webapplikation benötigt einen Webserver und eine Datenbank (sehr stark vereinfacht ausgedrückt). Der Systemadministrator erhält die Aufgabe, ebendiese Server für einen neuen Kunden bereitzustellen. Er öffnet dazu die AWS-Konsole und stellt die geforderten Ressourcen aufwändig zusammen.
Wird die Applikation rege genutzt, werden zusätzliche Server benötigt und ein Loadbalancer, welcher die Last auf die Systeme verteilen kann. Das Potential der Cloud, Ressourcen binnen Minuten zur Verfügung zu stellen, wird durch die langsame Handarbeit der Administratoren verringert. Um dem entgegen zu wirken, kommt IaC ins Spiel.
Ein Beispiel für ein solches Tool ist Terraform. Es handelt sich dabei um eine von HashiCorp entwickelte IaC Software, welche im Juli 2014 in seiner ersten Version veröffentlicht wurde.
Mit Terraform schreibt der Administrator für das Erstellen von 5 Servern mit vorgeschaltetem Loadbalancer folgenden Code und führt diesen mit dem Befehl «terraform apply» aus.

Dieses Beispiel zeigt deutlich, wie einfach Infrastruktur mittels IaC erstellt werden kann und welche Vorteile alleine schon die Wiederverwendung des Codes mit sich bringen.

Fazit

Um Cloud Infrastrukturen effizient zu verwalten, benötigt es neue Methoden und Ansätze. In dieser API-gesteuerten Cloud liegt der Schlüssel zur Effizienz darin, dass sich die Systemadministratoren öffnen und in die Bereiche des Programmierens vordringen.

Weiterführende Links:

 

Beitrag teilen