Skalierbarkeit, Wiederverwendbarkeit, Geschwindigkeit und Risikominimierung sind nur einige der Vorteile, die mit Infrastructure as Code versprochen werden und sich hauptsächlich an das Management richten. Diese Philosophie übernimmt Praktiken aus der Software-Entwicklung um die Bereitstellung von Infrastruktur zu optimieren und den Unterhalt zu vereinfachen. Die Umstellung lässt sich in wenigen Schritten angehen.
Anwendungen werden immer komplexer und die Anforderungen an diese immer umfangreicher. Dies wirkt sich direkt auf die zugrundeliegende Infrastruktur aus, welche immer schneller und häufiger den sich verändernden Anforderungen angepasst werden muss. Die Stabilität und Qualität dürfen dabei selbstverständlich nicht darunter leiden.
Diesen Ansprüchen kann mit manueller Bereitstellung der Infrastruktur bei weitem nicht Rechnung getragen werden, wodurch Infrastructure as Code (IaC) ins Spiel kommt.
«If it’s worth documenting, it’s worth automating.» (Kief Morris)
Mit Infrastructure as Code wird allgemein das Bereitstellen und Verwalten von Infrastruktur mit ausführbarem Code anstelle von manuellen Arbeitsschritten bezeichnet, wobei der Begriff Infrastruktur von der Rechenleistung und dem Speicher über die Netzwerkressourcen bis zur Laufzeitumgebung alles umfasst. Dadurch werden das Anpassen und Erweitern der bestehenden Infrastruktur und deren Konfiguration auf die neuen Bedürfnisse ein leichtes.
Die Vorteile
Die Vorteile der Definition von Infrastructure as Code liegen auf der Hand:
- Konsistenz. Dieselben Dinge werden jedes Mal auf die gleiche Art und Weise bereitgestellt.
- Nachvollziehbarkeit. Es ist jederzeit ersichtlich, wie die Infrastruktur aufgebaut, konfiguriert und welche Änderungen vorgenommen wurden.
- Transparenz. Der Code legt die Konfiguration offen und kann unabhängig überprüft werden.
- Geschwindigkeit. Der Aufwand zur Bereitstellung von Infrastruktur wird erheblich reduziert.
- Skalierbarkeit. Die Infrastruktur kann ohne Aufwand und bedarfsgerecht erweitert oder dupliziert werden.
- Wiederverwendbarkeit. Einzelne Schritte oder ganze Systeme können mehrfach eingesetzt werden.
- Wiederherstellbarkeit. Eine bestimmte Version kann jederzeit vollständig wiederhergestellt werden.
- Verlässlichkeit. Die Infrastruktur wird immer gleich erstellt, ist somit testbar und enthält keine Überraschungen.
- Risikominimierung. Die Summe der erwähnten Vorteile unterstützen gemeinsam mit dem Wegfall manueller Anpassungen die Risikominimierung.
- Zusammenarbeit. Gemeinsame Werkzeuge und gemeinsames Verständnis vereinfachen die Zusammenarbeit zwischen Entwicklung und Betrieb.
Los geht’s
«These benefits don’t come out of the box with automation tools or cloud platforms. They depend on the way you use this technology.» (Kief Morris)
Infrastructure as Code ist mehr als die Nutzung von Batch-Skripten, wie es Systemadministrierende seit geraumer Zeit praktizieren, denn handelt es sich dabei weniger um ein Werkzeug als um eine Arbeitsphilosophie.
Mit folgenden Schritten lässt sich der Paradigmenwechsel in Gang setzen:
- Versionsverwaltung einsetzen. Die Voraussetzung um Infrastructure as Code gewinnbringend einzusetzen.
- Alles als Code definieren. Erst dadurch kann von den Vorteilen profitiert werden.
- Infrastruktur-Code wie normalen Code behandeln. Dadurch wird die Qualität aufrechterhalten und der Code nachhaltig gepflegt.
- Variantenreichtum klein halten. Ansonsten ist es mit der Konsistenz schnell vorbei.
- Wiederholbarkeit sicherstellen. Ein Muss für Testbarkeit, Verlässlichkeit und Skalierbarkeit.
Software-Entwickelnden wird die Philosophie von Infrastructure as Code bekannt vorkommen, denn viele Praktiken aus der klassischen Softwareentwicklung können für den Infrastruktur-Code übernommen werden. DRY, SOLID und Co. gelten dadurch auch für Systemadministrierende – oder Software-Entwickelnde übernehmen die Systemadministration gleich mit (DevOps lässt grüssen).
Weiterführende Links zum Thema
Bücher:
- Infrastructure as Code von Kief Morris
- Infrastructure as Code Cookbook von Stephane Jourdan und Pierre Pomes
Blogs:
Werkzeuge: