Infrastructure as Code (IaC): Grundlagen, Geschichte und Praxis mit Ansible und GitLab

25 August, 2025

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.

von | Aug. 25, 2025

Einleitung

Die Art und Weise, wie IT-Infrastruktur bereitgestellt und betrieben wird, hat sich in den vergangenen Jahrzehnten stark verändert. In den frühen Jahren der Systemadministration bestand der Alltag daraus, einzelne Server manuell zu installieren, Softwarepakete einzuspielen, Konfigurationen direkt in Dateien zu editieren und Dienste zu starten. Das war nicht nur zeitaufwändig, sondern auch fehleranfällig und schwer zu reproduzieren. Schon ein kleiner Unterschied in einer Konfiguration konnte zu Problemen führen, die sich kaum nachverfolgen ließen.

Mit der zunehmenden Digitalisierung, Virtualisierung und später Cloud-Technologien stiegen die Anforderungen an IT-Umgebungen enorm. Unternehmen brauchten plötzlich nicht mehr nur einzelne Server, sondern ganze Landschaften aus Dutzenden oder Hunderten Systemen, die konsistent und schnell bereitgestellt werden mussten. Gleichzeitig entstanden neue Anforderungen an Nachvollziehbarkeit, Compliance und Automatisierung. An dieser Stelle setzte sich das Konzept Infrastructure as Code (IaC) durch.

Die Grundidee von IaC ist so simpel wie mächtig: Infrastruktur wird nicht mehr manuell aufgebaut, sondern als Code beschrieben. Dieser Code legt den gewünschten Soll-Zustand einer Umgebung fest und sorgt dafür, dass er automatisiert erreicht wird. Damit wird Infrastruktur genauso behandelt wie Software: Sie ist versionierbar, überprüfbar, testbar und automatisierbar.

Besonders interessant wird IaC in Kombination mit modernen Werkzeugen wie Ansible und Plattformen wie GitLab. Ansible erlaubt es, Server- und Applikationsumgebungen mit klar lesbaren YAML-Playbooks zu beschreiben und zuverlässig zu konfigurieren. GitLab ergänzt diese Arbeitsweise um die Prinzipien der Softwareentwicklung: Versionskontrolle, Code-Reviews und CI/CD-Pipelines. So entsteht ein vollständiger Workflow: Von der Beschreibung der Infrastruktur über die Automatisierung bis hin zum kontrollierten Rollout in produktiven Umgebungen.

In diesem Artikel werfen wir zunächst einen Blick auf die Philosophie von IaC, gehen dann in die Geschichte des Ansatzes und zeigen schließlich anhand eines fortgeschrittenen Ansible-Beispiels, wie IaC praktisch umgesetzt wird. Den Abschluss bildet die Integration in GitLab CI/CD, um die Methoden aus der Softwareentwicklung konsequent auch für Infrastruktur einzusetzen.

Die Geschichte von IaC

Die Idee von Infrastructure as Code reicht weit zurück. Bereits 1993 führte CFEngine das Prinzip der Konvergenz ein: Systeme bewegen sich automatisch zu einem definierten Sollzustand. Mit Puppet (2005) und Chef (2009) wurden diese Ansätze massentauglich – erstmals konnten große Rechenzentren deklarativ und konsistent verwaltet werden.

2012 brachte Ansible den entscheidenden Schritt zur Vereinfachung: agentenlos, leicht lesbar in YAML und dadurch auch für kleinere Teams attraktiv. Kurz darauf entstand mit Terraform ein Tool, das den Fokus von reiner Konfiguration auf Provisionierung erweiterte und Cloud-Ressourcen plattformübergreifend per Code verwaltbar machte.

Heute ist IaC untrennbar mit DevOps und CI/CD verbunden: Plattformen wie GitLab sorgen dafür, dass Infrastruktur-Code versioniert, überprüft und automatisiert ausgerollt wird. Damit zeigt die Geschichte von IaC eine klare Linie: kein Trend, sondern eine konsequente Weiterentwicklung über Jahrzehnte – mit unverändert hoher Relevanz.

Die Philosophie von IaC

Infrastructure as Code ist weit mehr als ein technisches Werkzeug oder ein Automatisierungs-Framework. Es ist eine Denkweise, die den Umgang mit Infrastruktur grundlegend verändert. Während klassische Administration oft reaktiv war – „ein Problem tritt auf, also loggen wir uns ein und beheben es“ – verschiebt IaC den Schwerpunkt hin zu einem proaktiven, planbaren und überprüfbaren Modell.

1. Vom Handgriff zum Sollzustand

Im traditionellen Ansatz beschreibt ein Administrator Arbeitsschritte: „Installiere Paket X“, „Ändere Zeile Y in der Konfiguration“, „Starte Dienst Z neu“. IaC dagegen beschreibt Zustände: „Der Webserver ist installiert und läuft“, „Die Firewall erlaubt Port 80“. Damit tritt der Weg in den Hintergrund, und das Ziel rückt in den Mittelpunkt.

Diese Unterscheidung ist entscheidend: Skripte reproduzieren Befehle, IaC reproduziert Ergebnisse.

2. Wiederholbarkeit und Idempotenz

Ein zentrales Prinzip ist die Idempotenz. Wird ein IaC-Playbook mehrfach ausgeführt, entstehen keine unerwarteten Nebenwirkungen. Ansible-Module beispielsweise prüfen stets, ob ein gewünschter Zustand bereits erreicht ist, bevor sie eine Änderung durchführen. Das bedeutet: Infrastruktur „driftet“ nicht auseinander, sondern konvergiert immer wieder zum definierten Sollzustand.

3. Infrastruktur wird zu Code

Indem Infrastruktur in deklarativen Dateien beschrieben wird, wird sie Teil desselben Ökosystems wie Software:

  • Änderungen liegen in Git-Repositories.
  • Anpassungen werden über Merge Requests diskutiert.
  • Qualität wird durch Tests und Pipelines sichergestellt.

Damit verschwindet die Trennlinie zwischen Entwicklern und Administratoren: Infrastruktur ist genauso versionierbar, überprüfbar und automatisierbar wie Anwendungs-Code.

4. Zusammenarbeit statt Inselwissen

Früher war es oft so: „Nur Admin X weiß, wie man den Server aufsetzt.“ Mit IaC verschwindet dieses Risiko. Der Code dient als lebende Dokumentation: Jeder im Team kann nachvollziehen, wie Systeme aufgebaut sind, und Änderungen sind transparent. Dadurch wird Wissen geteilt und nicht in Köpfen einzelner Personen versteckt.

5. Geschwindigkeit und Sicherheit schließen sich nicht aus

Ein oft gehörter Vorwurf lautet: „Automatisierung ist gefährlich, man verliert die Kontrolle.“ In Wahrheit ist das Gegenteil der Fall. Ohne IaC führt jede manuelle Änderung zu einer Abweichung, die nicht dokumentiert ist. Mit IaC dagegen ist jede Änderung sichtbarprüfbar und im Zweifel auch rücksetzbar. Dadurch steigt nicht nur die Geschwindigkeit der Bereitstellung, sondern auch die Sicherheit und Nachvollziehbarkeit.

6. IaC als Teil des DevOps-Gedankens

IaC fügt sich nahtlos in die Ideen von DevOps ein. Entwickler und Administratoren sprechen über denselben Code, arbeiten im selben Repository und nutzen dieselben Prozesse. Ansible beschreibt den gewünschten Systemzustand, GitLab CI/CD sorgt für die automatisierte Ausführung, Tests und Überprüfungen. Infrastruktur wird so nicht mehr „nebenbei“ betrieben, sondern aktiv in Entwicklungs- und Delivery-Prozesse eingebunden.

Praxis: Ein Webserver mit Ansible

Playbook und Rollenstruktur

- name: Provisioniere Webserver mit Ansible
  hosts: webserver
  become: yes

  roles:
    - common
    - nginx

Rolle common: Basispakete und Firewall-Regeln.
Rolle nginx: Installation, Konfiguration per Template, Handler zum Reload.

Beispiel Template:

server {
    listen {{ nginx_listen_port }};
    server_name {{ nginx_server_name }};
    location / {
        root /var/www/html;
        index index.html;
    }
}

Philosophie in Aktion:

  • Zustand statt Befehle: „Nginx läuft mit dieser Config“, nicht „führe apt-get aus“.
  • Wiederholbar: Ein Host oder hundert – das Ergebnis ist gleich.
  • Nachvollziehbar: Jede Änderung ist als Git-Diff sichtbar.

Von Code zur Pipeline: Ansible mit GitLab CI/CD

Ein Playbook im Repository ist wertvoll – richtig stark wird IaC aber erst dann, wenn Änderungen automatisiert überprüft und angewendet werden. GitLab bietet mit CI/CD dafür eine ideale Plattform. Der Grundgedanke: Jede Änderung an Infrastruktur-Code durchläuft denselben Lebenszyklus wie Software – Commit, Review, Tests und Deployment.

Beispiel .gitlab-ci.yml

stages:
  - lint
  - test
  - deploy

ansible-lint:
  stage: lint
  image: cytopia/ansible-lint
  script:
    - ansible-lint playbooks/site.yml

ansible-dry-run:
  stage: test
  image: willhallonline/ansible:latest
  script:
    - ansible-playbook -i inventories/prod playbooks/site.yml --check --diff

deploy-prod:
  stage: deploy
  image: willhallonline/ansible:latest
  script:
    - ansible-playbook -i inventories/prod playbooks/site.yml
  only:
    - main

Erklärung

Linting (Qualitätssicherung)

In der ersten Stufe prüft ansible-lint, ob die Playbooks syntaktisch korrekt sind und gängige Best Practices einhalten. Fehler wie falsche Indents oder unsichere Module werden frühzeitig erkannt – bevor überhaupt etwas ausgerollt wird.

Dry-Run (Tests)

Mit --check --diff wird ein Probelauf gestartet. Dabei zeigt Ansible, welche Änderungen notwendig wären, ohne sie tatsächlich umzusetzen. Zusätzlich werden Unterschiede in Konfigurationsdateien angezeigt. So können Reviewer und Administratoren nachvollziehen, ob ein Merge die gewünschten Auswirkungen hat.

Deployment (Produktiv-Rollout)

Nur wenn alle Tests erfolgreich waren, wird im deploy-prod-Job das Playbook tatsächlich ausgeführt. GitLab sorgt dafür, dass dieser Schritt nur im main-Branch läuft – also nachdem die Änderung über Merge Request geprüft und freigegeben wurde. Damit werden versehentliche Schnellschüsse vermieden.

Warum GitLab + Ansible so gut zur IaC-Philosophie passen

  • Versionskontrolle: Jede Änderung wird über Commits und Merge Requests dokumentiert.
  • Transparenz: Pipelines laufen automatisch und zeigen klar, was wann wo passiert.
  • Nachvollziehbarkeit: Linting, Dry-Runs und Diffs machen die Auswirkungen sichtbar, bevor etwas live geht.
  • Sicherheit: Rollouts passieren nur nach Review und erfolgreicher Pipeline.
  • Automatisierung: Infrastruktur wird wie Software behandelt – kein manuelles „Playbook anstoßen“ mehr.

Fazit

Infrastructure as Code hat eine lange Entwicklung hinter sich – von CFEngine über Puppet und Chef bis zu modernen Workflows mit Ansible und GitLab CI/CD. Neu ist der Ansatz nicht, doch relevanter denn je: Ohne IaC wäre es kaum möglich, komplexe und dynamische Infrastrukturen reproduzierbar, nachvollziehbar und sicher zu betreiben.

Ansible zeigt in der Praxis, wie die IaC-Philosophie umgesetzt wird: deklarativ, modular und idempotent. GitLab CI/CD erweitert diesen Ansatz um die Werkzeuge der Softwareentwicklung – Versionierung, Reviews, Tests und automatisierte Deployments. Zusammen entsteht ein durchgängiger Workflow, der sowohl Stabilität als auch Geschwindigkeit bringt.

Für viele Organisationen ist der Einstieg in IaC jedoch eine Herausforderung: Welche Tools passen zur bestehenden Umgebung? Wie baut man Playbooks und Rollen nachhaltig auf? Wie integriert man GitLab-Pipelines so, dass sie Prozesse sicher und reproduzierbar unterstützen? Und wie gelingt es, Teams auf diese neue Arbeitsweise vorzubereiten?

Genau hier kann NETWAYS helfen: mit Beratung bei der Tool-Auswahl, Best Practices für Architektur und Playbooks, Schulungen für Teams und Support bei Betrieb und Weiterentwicklung. Damit wird IaC nicht nur als Konzept verstanden, sondern auch im Alltag erfolgreich angewendet.

Events

Schulungen

Professional Services

Web Services

Wie hat Dir unser Artikel gefallen?