Infrastructure as Code (IaC) – Wie kann ich eine Infrastrukturautomatisierung umsetzen?

Infrastructure as Code (auch IaC oder „programmierbare Infrastruktur“ genannt) hat das Ziel Rechenzentren‑Strukturen mit Codezeilen zu beschreiben. Die zur Verfügung gestellten Code‑Sequenzen können mithilfe entsprechender Software IT‑Infrastrukturen konfigurieren, rekonfigurieren und auch wieder löschen. Die Verwendung einer Versionierung ermöglicht weitere Konzepte, wie die Einführung von Testumgebungen sowie die Möglichkeit einer Freigabe von getesteten Umgebungen.

Automatisierung in der Administration – Das Thema ist ja gar nicht so neu! Wieso ist es so interessant?

Den Aspekt der Automatisierung im Infrastrukturbereich mithilfe von Skripten gibt es schon länger. Bisher stand immer der einzelne technische Aspekt zur Lösung eines Teilproblems im Vordergrund. Erst mit der Trennung von Definition und Umsetzung kann sich die neue Arbeitsweise richtig entfalten. Infrastrukturentwickler müssen nur noch definieren, was hinzugefügt oder geändert werden soll. Die Umsetzung erledigt das dafür vorgesehene Tool. Dies bedeutet, allgemeine IaC‑Tools wandeln eine einfache Definition in Infrastruktur-Ressourcen um. Dazu setzen diese Tools auf API‑Calls oder Python Module. Somit wird die bisherige Arbeit durch die Automatisierung der technischen Umsetzung entlastet.

Im Allgemeinen sorgt die Definition als IaC dafür, dass alles oder nichts funktioniert. Dieses System hat einen entscheidenden Vorteil: Kleine, nicht direkt identifizierbare Fehler können sich mit Hilfe von Testumgebungen nicht in dunklen Bereichen der IT oder auf einzelnen Instanzen der Umgebung verstecken.

Quelle: https://blog.stackpath.com/wp-content/uploads/2020/01/infrastructure-as-code.png

Was sind die Herausforderungen des Kunden?

Die Automatisierung, die Reproduzierbarkeit von Umgebungen oder die Einführung von Testumgebungen sind häufige Herausforderungen in der IT. Die Einführung von standardisierten Prozessen mit Hilfe von IaC‑Tools hilft, um sich diesen Herausforderungen zu stellen.

Eine nicht zu vernachlässigende Komponente spielt hier die Nutzung einer Versionsverwaltung. Sobald mehrere Personen an einem Projekt arbeiten, ist es wesentlich, dass Änderungen an der Infrastruktur einer professionellen Verwaltung unterliegen. GitLab oder Github können hier als Lösung in der Cloud oder als On-Premise Instanz helfen die Zusammenarbeit zu vereinfachen. Weiterhin dient die Versionsverwaltung als Basis für die Nutzung von Tools für den Enterprise Betrieb (z.B. der Auditierung und Berechtigungskonzepten).

Was umfasst IaC noch?

IaC steht nicht nur im Zusammenhang mit Compute oder virtuellen Instanzen, sondern auch für die Definition kompletter Umgebungen auf Basis vom Cloud Provider zur Verfügung gestellter Services.

Betrachten wir ein Beispiel: Ein Kunde benötigt eine Kubernetes-Umgebung.
Dazu gibt es zweierlei Möglichkeiten:

Möglichkeit 1

Der Aufbau der Umgebung in einer On-Premise Landschaft durch eine automatisierte Installation von Kubernetes, mit dem dafür benötigten Datenbank-Server, der Netzwerkkonfiguration an den Switches und die Konfiguration eines Backups. Die Liste der Komponenten ist lang und man betreibt hohen Aufwand. Der Vorteil dabei ist, dass man alles unter Kontrolle hat und unabhängig von z.B. dem Cloud Provider ist.

Möglichkeit 2

Der Aufbau einer Kubernetes-Umgebung als Service bei einem Cloud Provider. Hierzu werden die benötigten Services (Kubernetes, Datenbank, Storage, etc.) als Dienstleistung beim Cloud-Anbieter genutzt. Hierbei wird ein Teil der klassischen IT‑Aufgaben als Dienstleistung vom Hersteller übernommen. Allgemeine Themen wie Backup und die Netzwerkkonfiguration müssen jedoch weiterhin betrachtet werden.

Und hier kommt IaC ins Spiel: Egal ob Compute-Instanzen oder Services, Infrastruktur ist das Mittel zum Zweck. Hierbei ist zu beachten, dass man langfristig planen und sich tiefergehende Gedanken über den Aufbau der Infrastruktur machen sollte. Somit kann eine echte Konkurrenz der On-Premise Infrastruktur mit Cloud-Instanzen erschaffen werden. Egal, ob es ein Service-Deployment im eigenen Rechenzentrum oder in der Public Cloud ist, die Vereinfachung des Deployments und die Standardisierung der Services ist gegeben.

Tools zur Umsetzung

Es gibt ein großes Spektrum an Tools. Das Set‑Up des Kunden spielt bei der Tool‑Wahl eine essenzielle Rolle.
Für Public Clouds sind Hersteller‑Tools wie CloudForms oder ARM (Azure Resource Manager) Templates sinnvoll.
Für Hybrid-Cloud Umgebungen sind Tools wie Ansible oder Terraform unumgänglich.

Aufgrund der Tool‑Vielfalt und den verschiedensten Ausgangsbedingungen sind die korrekte Auswahl und eine kompetente Beratung enorm wichtig.

Grenzen des IaC

Wenn man Infrastructure as Code nutzen möchte, hilft dies auf dem Weg in die Automatisierung. Falls man automatisieren möchte, reicht ein Tool allein nicht: Man muss in diesem Fall die ganze Prozesskette betrachten. Hierfür ist oft eine Standardisierung erforderlich, die die Automatisierung stark vereinfachen kann.

Das bedeutet nicht, dass keine manuellen Schritte mehr notwendig sind. Nach einem Test von getroffenen Anpassungen kann beispielsweise immer noch selbst entschieden werden, ob die Änderungen direkt ins System einspielt oder nach und nach freigegeben werden. Auch beim Wechsel des Anbieters kommt es oft zu manuellen Anpassungen, die z.B. eine Änderung an verschiedenen Komponenten für den neuen Anbietern beinhalten.

Zusammengefasst kann eine Automatisierung schnell realisiert werden, aber diese ist ohne intelligente Standardisierung und deren Prozesse nur eine kurzweilige und kompromissbehaftete Lösung.

Wer sich gerne das Thema auf der Audiospur anhören möchte, kann den #TheAgeofDevOps SVA-Podcast zu dem Thema anhören:

Focus On DevOps: E03 – Intransparenz as Code – oder: Configuration Management leicht gemacht