Definition

Infrastructure as Code (IaC)

Was ist Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) ist eine IT-Praxis, bei der die zugrunde liegende IT-Infrastruktur als Software kodifiziert und verwaltet wird. Damit können Entwickler und Betriebsteams Ressourcen automatisch verwalten, überwachen und bereitstellen, anstatt Hardwaregeräte, Betriebssysteme, Anwendungen und Dienste manuell zu konfigurieren. IaC wird auch als programmierbare oder softwaredefinierte Infrastruktur (Software-defined Infrstructure) bezeichnet.

Das Konzept von IaC ähnelt der Programmierung von Skripten, die IT-Prozesse automatisieren. Skripte werden jedoch in erster Linie verwendet, um eine Reihe statischer Schritte zu automatisieren, die sich mehrfach auf mehreren Servern wiederholen. IaC verwendet eine höhere, beschreibende Sprache, um vielseitigere und anpassungsfähigere Bereitstellungs- und Implementierungsprozesse zu codieren.

Beispielsweise können die IaC-Funktionen des IT-Management- und Konfigurations-Tools Ansible einen MySQL-Server installieren, dessen ordnungsgemäße Funktion überprüfen, ein Benutzerkonto und ein Passwort erstellen, eine neue Datenbank einrichten und nicht benötigte Datenbanken entfernen.

Der codebasierte Prozess der Infrastrukturautomatisierung ähnelt den Praktiken im Softwaredesign, bei denen Anwendungsentwicklungsteams deklarativen Code entwickeln, Codeversionen kontrollieren, Iterationen testen und die Bereitstellung einschränken, bis die Software für die Produktion freigegeben ist.

IaC hat dasselbe Ziel wie Cloud Computing, nämlich die Abstraktion von IT-Ressourcen, automatisiert jedoch den gesamten Prozess – von der Bereitstellung und Konfiguration bis hin zur Bereitstellung und Verwaltung. IaC wird auch zur Bereitstellung und Verwaltung von Cloud-Infrastrukturen verwendet, wobei die Programmierschnittstellen (APIs) des Cloud-Anbieters für den Zugriff auf und die Interaktion mit den Ressourcen und Diensten des Anbieters genutzt werden.

Wie funktioniert Infrastructure as Code?

Einfach ausgedrückt verwendet IaC Softwarecode, um eine IT-Infrastruktur bereitzustellen und zu verwalten. Durch die Verwendung von Code zur Definition eines gewünschten IT-Ergebnisses können Unternehmen die Konsistenz, Sicherheit, Automatisierung und Leistung ihrer Infrastruktur verbessern.

Die manuelle Bereitstellung und Konfiguration von Servern, Speichern, Netzwerken, Betriebssystemen, Anwendungen und anderen Geräten und Diensten wie Datenbanken, Load Balancern und Firewalls ist mit einem hohen Zeit- und Arbeitsaufwand verbunden. Es kann Stunden oder sogar Tage dauern, bis ein Mensch eine geeignete Bereitstellungsumgebung für die Workloads und Daten eines Unternehmens bereitstellt. Bei dieser manuellen Arbeit können menschliche Fehler in vielen Bereichen auftreten, was zu folgenden Problemen führen kann:

  • Inkonsistente Ergebnisse, da keine zwei Umgebungen identisch sind.
  • Sicherheitslücken, wenn Einstellungen und Konfigurationen falsch vorgenommen werden.
  • Schwierigkeiten bei der Fehlerbehebung, wenn die Infrastrukturdokumentation unzureichend oder nicht vorhanden ist.
  • Compliance- und Geschäftskontinuitätsprobleme aufgrund von Sicherheits- und Fehlerbehebungsproblemen.
  • Problematische Verwaltung und Änderungskontrolle.

IaC umfasst alle Anweisungen, die zum Aufbau und zur Bereitstellung einer gewünschten IT-Umgebung als Softwareentität erforderlich sind. Entwickler und IT-Mitarbeiter können detaillierte Anweisungen erstellen, um die erforderlichen Schritte zu bewerten und die Ergebnisse des Codes zu messen.

Der Infrastrukturcode liefert reproduzierbare Ergebnisse und kann auf Knopfdruck oder als Reaktion auf bestimmte Bedingungen ausgeführt werden. Er sorgt für ein hohes Maß an Automatisierung bei der Bereitstellung und Verwaltung.

Änderungen sind einfacher zu verwalten, da jede Änderung am Infrastrukturcode zu einer neuen Version führt, die gut dokumentiert ist und mit jedem gängigen Versionskontrollsystem verwaltet werden kann. Wenn aufgrund einer Änderung ein Problem auftritt, kann es durch Ausführen einer zuvor als funktionsfähig bekannten Version des Codes behoben werden. Dies vereinfacht die Fehlerbehebung und verbessert die Compliance und Sicherheit für das Unternehmen.

Die folgenden vier Grundtypen von IaC werden häufig zusammen verwendet:

  1. Skripte werden häufig zur Automatisierung einfacher Ad-hoc-Aufgaben verwendet.
  2. Konfigurationsmanagementcode definiert und automatisiert die Installation und Konfiguration von Geräten wie Servern.
  3. Provisioning-Code automatisiert die Einrichtung einer Gesamtinfrastruktur und verbindet verschiedene Aspekte der Umgebung miteinander.
  4. Containercode basiert auf Vorlagen, um Image-Dateien mit Bibliotheken und Abhängigkeiten zu definieren, die für die Bereitstellung und Ausführung einer Anwendung erforderlich sind.

Der IaC-Prozess umfasst in der Regel die folgenden drei Schritte:

  1. Ein Entwickler erstellt mit einer domänenspezifischen Sprache Spezifikationen für die gewünschte Infrastruktur.
  2. Die Spezifikationsdateien werden an einen Server oder ein Repository wie GitHub oder eine API gesendet oder dort bereitgestellt.
  3. Die IaC-Plattform verwendet die Spezifikationsdateien entweder automatisch oder auf Anfrage, um die gewünschte Infrastruktur zu erstellen und zu konfigurieren.
Infrastructure as Code Infografik
Abbildung 1: Mit IaC können IT-Teams die physischen Ressourcen, Dienste und einzelnen Konfigurationen eines Rechenzentrums in Code umwandeln, um diese Ressourcen automatisch bereitzustellen und zu verwalten.

IaC-Ansätze: Deklarativ versus imperativ

Infrastructure-as-Code-Tools arbeiten mit deklarativen und imperativen Ansätzen.

Deklarativer Ansatz

Ein deklarativer Programmieransatz beschreibt den gewünschten, beabsichtigten Zustand der Infrastruktur, listet jedoch nicht explizit die Schritte auf, um diesen Zustand zu erreichen. Er deklariert ein beabsichtigtes Ziel und überlässt es den zugrunde liegenden IaC-Tools, zu entscheiden, wie diese Ziele umgesetzt werden. Eine bekannte deklarative Programmiersprache ist Structured Query Language (SQL). Amazon Web Services (AWS) CloudFormation-Vorlagen sind unter anderem im deklarativen Stil von Infrastructure as Code geschrieben.

Imperativer Ansatz

Ein imperativer Programmieransatz definiert Befehle, mit denen die Infrastruktur den gewünschten Zustand erreichen kann. Er definiert die genauen Schritte und deren Reihenfolge, um ein gewünschtes Ergebnis zu erzielen, und weicht nicht von diesen Schritten ab. Objektorientierte Sprachen wie C++ und Java können für die imperative Programmierung verwendet werden. Ein Tool wie Chef kann je nach Bedarf deklarativ, aber auch imperativ eingesetzt werden.

Bei beiden Ansätzen wird IaC auf einer Vorlage konfiguriert, in der der Benutzer die für jeden Server in der Infrastruktur erforderlichen Ressourcen angibt. Die Vorlage wird verwendet, um zu überprüfen, ob ein System korrekt konfiguriert oder ordnungsgemäß eingerichtet wurde. Vorlagen können als eine Reihe von Ressourcenebenen aufgebaut sein, wie beispielsweise in AWS CloudFormation, wodurch ein Stack entsteht.

Bewährte Verfahren für IaC

IaC umfasst die Infrastrukturkonfiguration und das Infrastrukturmanagement mit einem hohen Grad an Automatisierung. Es gibt zwar keinen universellen Ansatz für die Bereitstellung und Verwendung von IaC, aber zahlreiche Best Practices helfen dabei, diese Bereitstellungen zu optimieren. Zu den Standard-Best Practices für IaC gehören die folgenden:

  • Verwenden Sie eine Versionskontrolle. Die Bereitstellung und Konfiguration der Infrastruktur über Software bedeutet, dass IaC viele Best Practices der Softwareentwicklung einhält, wie zum Beispiel eine strenge Versionskontrolle. Unternehmen sollten Repositorys für IaC-Dateien, eine umfassende Versionskontrolle sowie eine strenge Dokumentation und Aufzeichnung verwenden, um nachzuverfolgen, wer auf die Dateien zugreift und welche Änderungen zwischen den Versionen vorgenommen wurden.
  • Geben Sie keine Geheimnisse weiter. Viele Konfigurationselemente in IaC erfordern Passwörter oder Verschlüsselungszertifikate. Diese sind oft ungeschützt in IaC-Dateien enthalten, wodurch sensible Systeme gefährdet und die Sicherheit beeinträchtigt werden können. Verwenden Sie einen separaten Secrets Manager (Geheimnismanager), um Identitäts- und Zugriffsmanagementdetails geschützt zu speichern.
  • Bewahren Sie Dateien sicher auf. IaC soll die gleiche kollaborative Haltung wie DevOps und Agile fördern. IaC-Dateien enthalten jedoch wahrscheinlich geistiges Eigentum, Geheimnisse oder andere sensible Inhalte. Es ist wichtig, diese genauso sicher aufzubewahren wie anderen Quellcode, den das Unternehmen verwendet.
  • Testen und validieren Sie Dateien. IaC-Dateien sollten niemals als selbstverständlich angesehen werden. Sie sollten auf die gleiche Weise getestet und validiert werden wie andere Software, bevor sie für die Produktion freigegeben werden. Dazu werden häufig Continuous Integration/Continuous Delivery (CI/CD), DevOps und agile Techniken eingesetzt.
  • Verwenden Sie kleinere Dateien. Mehrere kleinere IaC-Dateien können zur Ausführung bestimmter Aufgaben verwendet und dann mit einem Skript oder einer anderen IaC-Vorlage verbunden werden. Die Verwendung einer größeren Anzahl kleinerer Dateien ermöglicht eine bessere Modularität und erleichtert die Wiederverwendung von IaC-Dateien, anstatt eine einzige große Datei zu erstellen und zu pflegen, die alles erledigt.
  • Überwachen und korrigieren Sie Abweichungen. Bei ordnungsgemäßer Implementierung und unter sorgfältiger Beachtung der Unveränderlichkeit sollte IaC idealerweise keine Konfigurationsabweichungen zulassen. Abweichungen können jedoch aufgrund von Systemproblemen, Fehlerbehebung und menschlichem Versagen dennoch auftreten. Es ist wichtig, die Infrastrukturumgebung zu überwachen, die Umgebung mit der IaC-Definition zu vergleichen, um Abweichungen zu finden, und alle Instanzen zu dokumentieren und zu korrigieren.
  • Verwenden Sie Code als einzige Quelle der Wahrheit. IaC sollte als Referenzpunkt für Infrastrukturkonfigurationen dienen. Die Behandlung von IaC-Code als einzige Quelle der Wahrheit sollte dazu beitragen, die Konsistenz zwischen den Umgebungen sicherzustellen, Abhängigkeiten zu minimieren und Fehler zu reduzieren, die manuell auftreten könnten.
  • Konzentrieren Sie sich auf eine unveränderliche Infrastruktur. Software definiert eine Infrastruktur. Mit IaC sollte ein unveränderlicher Infrastrukturansatz verwendet werden. Nach der Bereitstellung und Implementierung des Codes sollten keine Änderungen an der Infrastruktur vorgenommen werden. Wenn eine Änderung erforderlich ist, sollte die aktuelle Infrastruktur gelöscht und eine neue Infrastruktur unter Verwendung neuer Versionen der IaC-Dateien implementiert werden. Dadurch wird jede Möglichkeit einer Konfigurationsabweichung verhindert.

Unveränderliche versus veränderliche Infrastruktur

Eine veränderliche Infrastruktur bezieht sich auf die Änderung von Komponenten in der Produktion, während der gesamte Dienst oder die gesamte Anwendung normal weiterläuft. Eine unveränderliche Infrastruktur stellt Komponenten und Ressourcen zusammen und konfiguriert sie, um einen vollständigen Dienst oder eine vollständige Anwendung zu erstellen. Wenn eine Änderung an einer Komponente erforderlich ist, wird diese nicht geändert oder neu konfiguriert, sondern vollständig aktualisiert und in einer Instanz effektiv neu bereitgestellt. Eine neue Iteration wird zusammengestellt, getestet, validiert und gestartet, während die alte Iteration eingestellt und ihre Ressourcen zur Wiederverwendung freigegeben werden.

Eine unveränderliche Infrastruktur hat insbesondere in Cloud- und Microservices-Umgebungen, die hoch skalierbar sind und viele voneinander abhängige Komponenten und Dienste umfassen, an Beliebtheit gewonnen. Jede einmalige Aktualisierung zur Behebung spezifischer Probleme kann zu Konfigurationsabweichungen führen, die sich mit der raschen Bereitstellung von Updates in der Produktion kaskadieren. Die erneute Bereitstellung unveränderlicher Dienste und Komponenten ist effizienter als das Patchen und Neukonfigurieren einzelner Infrastrukturkomponenten. IaC legt den Schwerpunkt auf die Verwendung unveränderlicher Infrastrukturtechniken, obwohl Unveränderlichkeit keine Voraussetzung für IaC ist.

Vorteile und Herausforderungen von Infrastructure as Code

IaC bietet viele Vorteile, von der Effizienz der Automatisierung bis hin zur Flexibilität bei der Anpassung an andere moderne IT-Praktiken. Weitere Vorteile von IaC sind unter anderem:

  • Geschwindigkeit und Effizienz. Die automatisierte Bereitstellung und Verwaltung ist schneller und effizienter als manuelle Prozesse. Dies gilt für bereitgestellte Ressourcen und Virtualisierung, Datenbanken, Netzwerke, Benutzerkontenverwaltung und andere damit verbundene Dienste. IaC kann auch Code enthalten, der automatisch skaliert, indem Umgebungen und Ressourcen hinzugefügt oder abgeschaltet werden, wenn sie nicht mehr benötigt werden.
  • Konsistenz. Softwareentwickler können Code verwenden, um Server und Anwendungen gemäß den Geschäftspraktiken und Richtlinien bereitzustellen und zu implementieren, anstatt sich in einer DevOps-Umgebung auf Systemadministratoren verlassen zu müssen. Ein Entwickler kann eine Konfigurationsdatei erstellen, um eine neue Anwendung für die Qualitätssicherung oder für experimentelle Bereitstellungen zur Verfügung zu stellen und zu implementieren, bevor der Betrieb die Live-Bereitstellung in der Produktion übernimmt.
  • Verantwortlichkeit. Code und die entsprechende Repository-Verwaltung bieten eine solide Grundlage für die Dokumentation von IaC-Code. Es ist leicht zu erkennen, wer die einzelnen Versionen entwickelt hat und welche Änderungen zwischen den IaC-Codeversionen vorgenommen wurden. Dies stärkt die Einhaltung von Unternehmensrichtlinien und Code-Qualitätsstandards.
  • Return on Investment. Die Implementierung von IaC erfordert zwar erhebliche Investitionen, aber die Vorteile in Bezug auf Geschwindigkeit, Effizienz, Konsistenz, Compliance, Fehlerbehebung und Automatisierung sind in der Regel die Investition wert. IaC ersetzt einen manuellen Prozess, der Stunden dauern kann, durch einen automatisierten Prozess, der in Minuten gemessen werden kann. Dadurch werden viele Probleme im Zusammenhang mit der manuellen Bereitstellung und Konfiguration von Infrastruktur vermieden.
  • Ausrichtung auf DevOps. Die als Code geschriebene Infrastrukturkonfiguration kann dieselben Versionskontrollen, automatisierten Tests und anderen Schritte einer CI/CD-Pipeline durchlaufen, die Entwickler für Anwendungscode verwenden. Ein Unternehmen kann IaC mit Containern kombinieren, die die Anwendung auf Betriebssystemebene von der Infrastruktur abstrahieren. Da das Betriebssystem und die Hardwareinfrastruktur automatisch bereitgestellt werden und die Anwendung gekapselt ist, ergänzen sich diese Technologien für verschiedene Bereitstellungsziele wie Test, Staging und Produktion.
  • Gemeinsam genutzte Ressourcen. IaC verbessert die Replikation der Infrastruktur auf andere Systeme, die dieselben Ressourcen nutzen. In dieser Anwendung sorgt IaC für Konsistenz und kann zur Optimierung von Fehlerbehebungsprozessen beitragen.

Trotz seiner Vorteile hat IaC auch einige Nachteile, darunter die folgenden:

  • Zusätzliche Tools sind erforderlich. Infrastructure as Code erfordert zusätzliche IaC-spezifische oder IaC-fähige Tools, wie zum Beispiel Konfigurationsmanagement-Tools und ein Automatisierungs- und Orchestrierungssystem, die erlernt werden müssen. Dies kann zu Fehlern führen. Fehler können sich schnell über Server verbreiten, insbesondere bei umfangreicher Automatisierung. Daher sind die Überwachung der Versionskontrolle und umfassende Tests vor der Freigabe unerlässlich.
  • Fehlende Funktionen. IaC-Tools bieten verschiedene leistungsstarke Funktionen und Fähigkeiten, aber einige davon sind möglicherweise unvollständig oder fehlen ganz. Es ist wichtig, Tools zu evaluieren und zu prüfen, insbesondere im Hinblick auf die Geschäftsanforderungen, und die Produkt- oder Funktions-Roadmap jedes Tool-Anbieters sorgfältig zu überwachen.
  • Komplexität bestehender Tools. Die Einführung neuer Tools, Prozesse und Standards in DevOps- und Betriebsumgebungen kann die Komplexität in Bereichen mit weit verbreiteten Tools und Plattformen erhöhen. Damit IaC dauerhafte und sinnvolle Vorteile für das Unternehmen bietet, ist eine unternehmensweite Unterstützung erforderlich.
  • Potenzial für Konfigurationsabweichungen. Wenn Administratoren Serverkonfigurationen außerhalb der festgelegten IaC-Vorlage ändern, kann es ohne zusätzliche Tools für das Änderungsmanagement zu Konfigurationsabweichungen kommen. Es ist wichtig, IaC vollständig in die Systemadministration, den IT-Betrieb und die DevOps-Praktiken zu integrieren und dabei gut dokumentierte Richtlinien und Verfahren zu verwenden. Wenn ältere Sicherheits- und Überwachungs-Tools IaC nicht unterstützen, müssen Investitionen in weitere Tools getätigt und zusätzliche Schulungen und Tests durchgeführt werden, um diese in die Arbeitsabläufe zu integrieren.
  • Kompetenzlücken. IaC überträgt den Entwicklern mehr Verantwortung für das Verstehen, wie effizienter Code geschrieben wird, der sich nahtlos in Produktionsumgebungen übertragen lässt. Sie müssen außerdem über fundierte Kenntnisse der für IaC verwendeten Sprachen verfügen, darunter JavaScript Object Notation (JSON), YAML, Ruby, C++ und SQL. Es kann schwieriger sein, sachkundige Mitarbeiter zu finden und zu halten.

Tools für Infrastructure as Code

IaC-Tools konfigurieren und automatisieren die Bereitstellung von Infrastruktur. Diese Automatisierungs-Tools können die Bereitstellung von Infrastruktur, zum Beispiel Servern mit Orchestrierungsfunktionen, automatisch ausführen. Sie können auch zuvor bereitgestellte Systeme konfigurieren und überwachen.

IaC-Tools erzwingen die Einrichtung anhand der Vorlage mithilfe von Push- oder Pull-Methoden. Bei der Push-Methode sendet ein zentraler Server die gewünschte Konfiguration an ein bestimmtes System oder bestimmte Systeme. Die Pull-Methode wird durch eine Anfrage an einen zentralen Server von einem oder mehreren Systemen in der Infrastruktur initiiert. Tools sind in der Regel standardmäßig für die Push- oder Pull-Bereitstellung von Code ausgelegt, können jedoch für bestimmte Instanzen auch für das Gegenteil eingerichtet werden. Diese Tools sollten auch in der Lage sein, Änderungen am Code zurückzusetzen, falls bei einer Aktualisierung unerwartete Probleme auftreten.

Im Folgenden finden Sie einige Beispiele für IaC-Tools:

  • AWS CloudFormation
  • Chef
  • Google Cloud Deployment Manager
  • Microsoft Azure Resource Manager
  • Puppet
  • Red Hat Ansible Automation Platform
  • Terraform von HashiCorp
  • VMware Tanzu Salt

Einige Tools basieren auf einer domänenspezifischen Sprache, während andere ein Standardvorlagenformat wie JSON und YAML verwenden.

Unternehmen sollten die angestrebte Bereitstellung berücksichtigen und ein für diese Umgebung geeignetes Tool auswählen. AWS CloudFormation wurde beispielsweise für die Bereitstellung und Verwaltung von Infrastruktur auf AWS entwickelt und funktioniert mit anderen AWS-Angeboten. In ähnlicher Weise verwaltet Microsoft Azure Resource Manager die Infrastruktur auf der Azure-Plattform, während Google Cloud Deployment Manager der Infrastrukturbereitstellungsdienst von Google ist. Alternativ arbeitet Chef mit lokalen Servern und mehreren Infrastructure-as-a-Service-Angeboten von Cloud-Anbietern.

Diese Definition wurde zuletzt im Mai 2025 aktualisiert

Erfahren Sie mehr über Softwareentwicklung