Wie du mit Infrastructure as Code deine IT-Prozesse optimierst

In diesem Artikel geben wir euch einen Überblick über Infrastructure as Code und zeigen, wie ihr es für euer Unternehmen nutzen könnt. Was versteht man darunter, welche Vorteile hat es und wie hilft es, IT-Prozesse zu optimieren?

Macht die Cloud Infrastructure as Code notwendig?

Viele Unternehmen setzen auf die Vorteile der Cloud

Auswirkungen der schnellen Verfügbarkeit von Ressourcen

Managed Kubernetes

Anforderungen, Analysen, Ansätze

Was ist Infrastructure as Code?

“Infrastructure as Code die Praxis, Serverkonfigurationen und Netzwerkeinstellungen in einem textbasierten Format zu beschreiben, um das Provisioning/Deployment von Servern zu vereinfachen.“Kief Morris

Die Vorteile von IaC im Überblick

Infrastruktur wie Programmcode behandeln

Änderungen werden nachvollziehbar und umkehrbar

Infrastructure as Code liefert die Dokumentation direkt mit und ist idempotent

Wie erwähnt, werden IT-Prozesse oft gar nicht oder nur unzureichend dokumentiert, sodass sie im Nachhinein für Kollegen oder einen selbst nur noch schwer zu verstehen sind. IaC-Tools beugen dem Problem der unzureichenden Dokumentation vor, indem sie dem sogenannten deklarativen Programmierparadigma entsprechen und damit selbstdokumentierend sind.

Im Gegensatz zu prozeduralen oder imperativen Sprachen, die beschreiben, auf welchem Weg man zu einem Ziel kommt, definiert man in einer deklarativen Sprache, wie ein Ergebnis am Ende aussehen soll. Zudem sind diese Sprachen leicht zu lesen, weswegen man so gut wie keine zusätzliche Dokumentation benötigt.

Da deklarative Sprachen ein Ziel beschreiben, sind sie darüber hinaus idempotent. Das bedeutet, egal wie oft man eine bestehende Konfiguration anwendet, das Ergebnis einer Ausführung ist immer dasselbe. Das ist eine wichtige und nicht zu unterschätzende Eigenschaft deklarativer Sprachen, die sie für IaC so geeignet macht. Damit wird beispielsweise verhindert, dass bei jedem Aufruf der Konfigurationsdatei ein bereits vorhandener User oder Server erneut erstellt wird und am Ende mehrmals vorliegt.

Stagingumgebung ähnelt der Produktionsumgebung

Auch Prozesse in der Softwareentwicklung lassen sich mit IaC verbessern. Liegt die Infrastruktur als Template in einem Repository, lassen sich damit bessere Entwicklungspipelines bauen. Für eine Staging-Umgebung nutzt man einfach das Template des Produktionsservers, wodurch man identische Ressourcen bereitstellen kann. Tests gewinnen an Aussagekraft und Fehler fallen nicht erst auf, wenn das neue Feature schon live ist.

Infrastruktur selbst wird testbar

IaC konkret – Funktionsweise und Tools im Überblick

Infrastructure Definition Tools & Server Konfigurationstools

Wie bringe ich IaC in mein Unternehmen? Das ist eigentlich gar nicht so schwer. Für die konkrete Umsetzung von IaC benötigt man ein IaC-Tool, von denen es inzwischen einige gibt. Nachdem wir kurz die Unterschiede der einzelnen Tools betrachten, werden wir im Anschluss noch auf zwei unserer Meinung nach besonders empfehlenswerte Umsetzungen eingehen.

In der Regel unterscheidet man bei der Provisionierung die Bereitstellung der Infrastruktur von der Konfiguration der einzelnen Bestandteile. Die verschiedenen IaC-Tools decken dabei nicht immer alle Bereiche des Infrastruktur-Managements ab. Einige bauen aufeinander auf und ergänzen sich, andere wiederum überschneiden sich in ihren Funktionen teilweise stark. Manche Lösungen sind auf einen Bereich spezialisiert, während ältere Anwendungen oft versuchen, den kompletten Prozess abzubilden.

IaC-Tools werden also in zwei Bereiche unterteilt:

  1. Infrastruktur-Definitions-Tools sind für die Initialisierung und das Grundgerüst zuständig. Es wird festgelegt, welche Server wie provisioniert werden und wie sie miteinander in Verbindung stehen. So lassen sich komplexe Serverlandschaften aufbauen, überwachen und verwalten.


  2. Sind die Server bereitgestellt, kann man diese mithilfe von Konfigurationsmanagement-Tools anpassen. Mit diesen lassen sich Änderungen vornehmen, Updates einspielen oder neue Software installieren.

Die bekanntesten Konfigurations- und Definitionstools sind Puppet, Chef, Jenkins, Ansible und Terraform. Terraform wollen wir im Folgenden genauer vorstellen, da es alle oben genannten Vorteile vereint und immer populärer wird.

Terraform

Infrastruktur-Definition und Templates

Terraform vereinheitlicht das Provisioning über verschiedene Anbieter hinweg

Abhängigkeiten und Komponenten festlegen

Ausführungsplan setzt Konfiguration um

Nachdem die Infrastruktur in einer Konfigurationsdatei beschrieben wurde, generiert Terraform einen Ausführungsplan, indem beschrieben ist, wie die gewünschte Konfiguration erreicht werden kann. Der Ausführungsplan dient der Absicherung, da hier genau aufgeführt wird, welche Komponenten provisioniert, verändert oder gelöscht werden. Erst wenn man diesen Plan bestätigt, führt Terraform alle notwendigen Schritte aus und baut die Infrastruktur dem Plan entsprechend auf.

Bei jeder Ausführung erstellt Terraform eine .tfstate-Datei, die den neuen Status Quo der bereitgestellten Infrastruktur speichert. Diese Datei dient dem Abgleich mit einer geänderten Konfiguration, sodass nicht die komplette Infrastruktur jedesmal komplett neu aufgebaut wird, sondern nur die Modifikationen umgesetzt werden.

Terraform ist schnell

Da Terraform die Erstellung und Modifizierung von nicht-abhängigen Ressourcen gleichzeitig durchführen kann, erfolgt die Bereitstellung der Infrastruktur sehr schnell.

Vorteile gegenüber anderen Infrastructure-Definition-Tools

Anwenderfreundlicher Einstieg in IaC

Insgesamt betrachtet bietet Terraform einen guten und leichten Einstieg in die Definition von Infrastruktur. Der große Vorteil liegt in der anwenderfreundlichen Programmstruktur und in Hinblick auf Wahlfreiheit darin, dass es cloud-agnostic ist.

Server Konfigurationstools

Hat man seine Infrastruktur mithilfe von Terraform aufgesetzt, werden einzelne Programme und Bestandteile der Server mit einem Server-Konfigurationstool eingerichtet und verwaltet. Die Konfigurationstools sind dafür verantwortlich, Änderungen an den Servern durchzuführen und diese nach Möglichkeit synchron zu halten.

Server Change Management

Will man Änderungen an einem Server durchführen, gibt es unterschiedliche Wege das zu tun. Folgende Modelle werden unterschieden:

  • Ad Hoc
  • Configuration Synchronization
  • Immutable Server
  • Containerized Servers.


IaC-Tools setzen auf die Configuration Synchronization. Die Konfigurationsdatei wird periodisch auf den Servern ausgeführt, z. B. jede Stunde. So gewährleistet man, dass Änderungen auf allen Servern gleichermaßen umgesetzt werden und außerdem reproduzierbar sind.

Die bekanntesten Server-Konfigurationstools sind:

  • CFEngine
  • Puppet
  • Chef
  • Ansible
  • Saltstack.

Ansible

Push vs. Pull-Modell

Der Hauptunterschied zwischen Puppet und Chef auf der einen und Ansible auf der anderen Seite ist, wie die Programme Änderungen auf den Server übertragen:

  • Chef und Puppet nutzen das Pull-Modell: Dazu muss auf jedem gemanagten Server ein Agent installiert und konfiguriert werden, der periodisch die neuesten Definitionen lädt.

  • Ansible pusht Änderungen mittels SSH von einem zentralen Server auf die entsprechenden Ressourcen. Das ist bequemer, kann aber unter gewissen Umständen leichter von Angreifern als potentielle Sicherheitslücke attackiert werden. Hier muss man für entsprechende Sicherheitsvorkehrungen sorgen, die auch beim Pull-Modell nicht außer Acht gelassen werden sollten.

Ansible vs Chef

Module für fast jeden Use Case

Die Hauptkomponenten in Ansible bilden die Module. Es gibt über 2000 für beinahe jeden Anwendungsfall. Sie können in jeder beliebigen Programmiersprache geschrieben sein.

  • Inventory File
    Welche Hosts orchestriert werden sollen, legt man in einem sogenannten Inventory-File fest. Hier lassen sich auch Gruppen anlegen, um Server kollektiv anzusprechen.
    Ansible lässt sich dann für Ad-Hoc Kommandos über das Terminal nutzen, z. B. um den Status der Infrastruktur in Erfahrung zu bringen.

  • Das Playbook
    Will man mehrere Befehle entsprechend des Infrastructure-as-Code-Gedankens kombinieren und in abrufbaren Dateien speichern, können die Module als Tasks in einem Playbook zusammengefasst werden, das im YAML-Format geschrieben ist. Den einzelnen Modulen sind dabei Hosts oder Hostgruppen aus der Inventory File zugeordnet.
    Die Module können z. B. einen nginx-Server installieren oder systemd ansprechen. Dazu gibt man meist einen Namen an, der den Task beschreibt, dann eine Rechtezuweisung und den Paket-Namen. Häufig können noch weitere Parameter angegeben werden, wie Status, Bedingungen, oder Quell- und Zielpfade. Das Playbook startet man mit dem Befehl »ansible-playbook«.

  • Nutzen von Variablen
    Auch die Nutzung von Variablen ist möglich. Diese helfen, bestimmte Einstellungen zentral abzuspeichern, um sie dann in verschiedenen Playbooks verwenden zu können, beispielsweise um immer die aktuellste Version eines Programms zu laden oder einen bestimmten Pfad zu speichern. Ansible nutzt dabei die aus Python bekannte Jinja-Syntax (zwei geschweifte Klammern: {{ }} ).
    Einige Variablen liefert Ansible von Haus aus mit. Bei jedem Start eines Playbooks sammelt Ansible ein paar Details über den Server ein, die dann für die weitere Nutzung zur Verfügung stehen.

  • Aufgaben in Module fassen
    Darüber hinaus lassen sich in Playbooks Rollen definieren, um verschiedene Aufgaben zu Modulen zusammenfassen, die sich auf verschiedene Servergruppen anwenden lassen.

Leicht und umfangreich

Insgesamt ist Ansible leicht zu lernen. Es ist wie Terraform ein guter Einstieg in Infrastructure as Code. Die umfangreiche Modulbibliothek bildet viele Anwendungsfälle ab, sodass sich Einstellungen schnell konfigurieren lassen.

Infrastructure as Code lohnt sich trotz Einstiegshürden

Damit haben wir sowohl Infrastructure as Code im Allgemeinen betrachtet, als auch die Funktionsweise einzelner Tools beschrieben. Mit diesem Vorwissen solltet ihr entscheiden können, ob ihr IaC ausprobieren möchtet und ob die Vorteile euer Unternehmen weiterbringen.

Grundsätzlich lässt sich sagen, je höher die Zahl der zu verwaltenden Services, desto sinnvoller wird die Verwaltung der Infrastruktur mit IaC.

In der Serververwaltung erfreut sich IaC aufgrund komplexer werdenden Infrastrukturen immer größerer Beliebtheit. Zwar erfordert die Einarbeitung etwas Zeit und das Lernen neuer Tools und Sprachen ist auf den ersten Blick aufwendig – hat man diese Einstiegshürden aber gemeistert, überwiegen die Vorteile. So können IT-Prozesse automatisiert werden, wodurch die Verwaltung der Infrastruktur einfacher, schneller, sicherer und weniger fehleranfällig wird. Weniger Fehler und Systemausfälle sparen am Ende einiges an Zeit und Kosten, die für sinnvollere Projekte genutzt werden können. Die Teilbarkeit der Templates stärkt und vereinfacht die Zusammenarbeit über verschiedene Teams hinweg. Die wichtige Dokumentation, um Prozesse schnell nachzuvollziehen, wird mit IaC stets mitgeliefert.

Auch in der Softwareentwicklung können Prozesse und Workflows verbessert werden. Verlässlichere und schneller aufgesetzte Entwicklungspipelines beschleunigen die Entwicklung. Im Hinblick auf moderne Softwarekonzepte wie Microservices, bei denen jeder Service auf einem eigenen Server läuft, ist effizientes Infrastruktur-Management ohne IaC kaum noch umsetzbar.

Mehr Lesestoff

Infrastructure as Code mit Terraform

Infrastructure as Code mit Terraform

Wir stellen vor: der offizielle Terraform Provider für gridscale!

Infrastructure as Code: Hype oder Hilfe?

Infrastructure as Code: Hype oder Hilfe?

Was ist Infrastructure as Code und welche Vor- und Nachteile für den Aufbau und das Management von Cloud-Infrastrukturen hat IaC?

Terraform auf dem Mac einrichten und mit gridscale verwenden

Terraform auf dem Mac einrichten und mit gridscale verwenden

Erfahre, wie du Terraform auf dem Mac Rechner installieren und ganz einfach sowohl neue Server, als auch Storages im gridscale Panel erstellen kannst.