Was ist Infrastructure as Code (IaC)?
Infrastructure as Code (IaC) automatisiert die Einrichtung von Infrastruktur und ermöglicht Ihrem Unternehmen die Entwicklung, Bereitstellung und Skalierung von Cloud-Anwendungen mit höherer Geschwindigkeit, geringerem Risiko und niedrigeren Kosten.
DevOps
Bewegungslichtspuren bei Geschwindigkeit in Tunnel
Was ist Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) verwendet eine übergeordnete beschreibende Programmiersprache, um die Einrichtung der IT-Infrastruktur zu automatisieren. Dank dieser Automatisierung müssen Entwickler nicht mehr jedes Mal Server, Betriebssysteme, Datenbankverbindungen, Speicher und andere Elemente der Infrastruktur manuell einrichten und verwalten, wenn sie eine Softwareanwendung entwickeln, testen oder bereitstellen möchten.

In einer Zeit, in der es für ein Unternehmen nicht ungewöhnlich ist, jeden Tag Hunderte von Anwendungen im Produktionsbetrieb bereitzustellen – und in der die Infrastruktur als Reaktion auf die Anforderungen von Entwicklern und Benutzern ständig hochgefahren, freigegeben sowie aufwärts und abwärts skaliert wird –, ist es für ein Unternehmen unerlässlich, die Infrastruktur zu automatisieren, um Kosten zu kontrollieren, Risiken zu verringern und zügig auf neue Geschäftschancen und Bedrohungen durch den Wettbewerb zu reagieren. IaC macht diese Automatisierung möglich.

IaC ist auch eine grundlegende DevOps-Praxis, die für einen wettbewerbsorientiert getakteten Lebenszyklus der Softwarebereitstellung unabdingbar ist. Sie ermöglicht DevOps-Teams, die Infrastruktur schnell zu erstellen und zu versionieren, genauso wie den Quellcode zu versionieren, und diese Versionen dann zu verfolgen, um Inkonsistenzen zwischen IT-Umgebungen zu vermeiden, die bei der eigentlichen Bereitstellung zu ernsthaften Problemen führen können.

Im folgenden Video mit dem Titel „What is Infrastructure as Code?“ nimmt Sai Vennam IaC genauer unter die Lupe:

Vorteile von Infrastructure as Code

Die Einrichtung von traditioneller IT ist ein zeit- und kostenintensiver Prozess, der den physischen Aufbau der Hardware, die Installation und Konfiguration der Betriebssystemsoftware sowie die Anbindung zu MiddlewareNetzenSpeicher usw. durch Fachpersonal erfordert.

Mit Virtualisierung und cloudnativer Entwicklung entfällt das Problem der Verwaltung physischer Hardware und Entwickler erhalten die Möglichkeit, ihre eigenen virtuellen Server oder Container bedarfsorientiert bereitzustellen. Die Einrichtung einer virtualisierten Infrastruktur lenkt den Fokus der Entwickler immer noch vom Programmieren ab, erfordert immer noch, dass sie die Arbeit zur Einrichtung für jede neue Bereitstellung wiederholen, und bietet keine einfache Möglichkeit, Änderungen an der Umgebung zu verfolgen und Inkonsistenzen zu verhindern, die sich auf Bereitstellungen auswirken.

Infrastructure as Code (IaC) geht einen Schritt weiter und ermöglicht Entwicklern endlich, eine vollständig dokumentierte und versionierte Infrastruktur durch Ausführen eines Scripts effektiv „anzuordnen“. Die damit verbundenen Vorteile sind genau so, wie Sie es sich vielleicht vorstellen:

  • Schnellere Produktions-/Marktreife: Die IaC-Automatisierung beschleunigt den Prozess zur Einrichtung von Infrastruktur für Entwicklung, Tests und Produktion (sowie zur bedarfsorientierten Skalierung oder Verschlankung der Produktionsinfrastruktur) erheblich. Da alles kodifiziert und dokumentiert wird, kann IaC sogar die Einrichtung von traditioneller oder bestehender Infrastruktur automatisieren, was andernfalls unter Umständen durch zeitintensive Verfahren (wie dem Anlegen eines Tickets) geregelt werden müsste.

  • Verbesserte Konsistenz – geringere Konfigurationsabweichungen: Konfigurationsabweichungen treten auf, wenn Ad-hoc-Konfigurationsänderungen und -aktualisierungen dazu führen, dass die Entwicklungs-, Test- und Bereitstellungsumgebungen nicht mehr übereinstimmen. Dies kann zu Problemen bei der Bereitstellung, zu Sicherheitsschwachstellen sowie zu Risiken bei der Entwicklung von Anwendungen und Services führen, die strenge gesetzliche Vorschriften einhalten müssen. IaC verhindert derartige Abweichungen, da jedes Mal die gleiche Umgebung bereitgestellt wird.

  • Schnellere, effizientere Entwicklung: Durch die Vereinfachung der Einrichtung und die Sicherstellung der Infrastrukturkonsistenz kann IaC jede Phase im Lebenszyklus der Softwarebereitstellung zuverlässig beschleunigen. Entwickler können Sandboxes und Umgebungen für kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD) schnell einrichten. QA kann zügig Full-Fidelity-Testumgebungen einrichten. Operations kann die Infrastruktur für Sicherheits- und Benutzerakzeptanztests zügig einrichten. Und wenn der Code die Tests erfolgreich durchlaufen hat, können die Anwendung und die Produktionsinfrastruktur, auf der ihre Ausführung erfolgt, in einem einzigen Schritt bereitgestellt werden.

  • Schutz vor Abwanderung: Um die Effizienz in Unternehmen ohne IaC zu maximieren, wird die Einrichtung in der Regel an einige wenige qualifizierte Techniker oder IT-Mitarbeiter delegiert. Wenn einer dieser Spezialisten das Unternehmen verlässt, bleibt es manchmal anderen überlassen, den Prozess zu rekonstruieren. IaC stellt sicher, dass geschäftsrelevantes Wissen zur Einrichtung stets bei dem Unternehmen bleibt.

  • Niedrigere Kosten und verbesserter ROI: IaC bewirkt nicht nur eine drastische Reduzierung der Zeit und des Arbeitsaufwands sowie der fachspezifischen Kenntnisse, die für die Einrichtung und Skalierung der Infrastruktur erforderlich sind, sondern ermöglicht Unternehmen außerdem, den maximalen Nutzen aus der verbrauchsbasierten Kostenstruktur von Cloud-Computing zu ziehen. Darüber hinaus erhalten Entwickler die Möglichkeit, weniger Zeit für Installationsarbeiten aufzuwenden und mehr Zeit mit der Entwicklung innovativer, unternehmenskritischer Softwarelösungen zu verbringen.
Unveränderliche Infrastruktur vs. veränderliche Infrastruktur

Eine wichtige Entscheidung, die bei der Automatisierung der Infrastruktur mit Infrastructure as Code (IaC) und bei der Auswahl einer IaC-Lösung zu treffen ist, dreht sich um die Frage, ob eine veränderliche oder eine unveränderliche Infrastruktur eingerichtet werden soll.

Eine veränderliche Infrastruktur ist Infrastruktur, an der auch nach ihrer ursprünglichen Einrichtung noch Änderungen oder Aktualisierungen durchgeführt werden können. Eine veränderliche Infrastruktur gibt den Entwicklungsteams die Flexibilität, Ad-hoc-Anpassungen an Servern vorzunehmen, um beispielsweise den Entwicklungs- oder Anwendungsanforderungen besser gerecht zu werden oder auf ein aufkommendes Sicherheitsproblem zu reagieren. Sie untergräbt jedoch auch einen wichtigen Vorteil von IaC, nämlich die Fähigkeit, die Konsistenz zwischen Bereitstellungen oder innerhalb von Versionen aufrechtzuerhalten, und sie kann die Überwachung der Infrastrukturversionen erheblich erschweren.

Aus diesen Gründen wird die IaC meist als unveränderliche Infrastruktur implementiert, d. h. als Infrastruktur, an der nach der ursprünglichen Bereitstellung keine Änderungen mehr vorgenommen werden können. Wenn eine unveränderliche Infrastruktur geändert werden muss, muss sie durch eine neue Infrastruktur ersetzt werden. Da neue Infrastrukturen in der Cloud schnell eingerichtet werden können – insbesondere mit IaC –, ist eine unveränderliche Infrastruktur sehr viel machbarer und praktischer, als es sich anhört.

Unveränderliche Infrastruktur befördert IaC zur nächsten logischen Phase und schottet IaC-Systeme im Prinzip ab, um die Vorzüge, die IaC bietet, weiter zu wahren und zu festigen. Konfigurationsabweichungen werden nahezu ausgeschlossen und die Konsistenz zwischen Test- und Bereitstellungsumgebung kann noch einfacher aufrechterhalten werden. Außerdem ist es auch einfacher, Infrastrukturversionen zu pflegen und zu verfolgen und bei Bedarf sicher per Rollback auf eine beliebige Version zurückzugreifen.

Deklarativer versus imperativer Ansatz

Bei der Auswahl einer IaC-Lösung ist es auch wichtig, den Unterschied zwischen einem deklarativen und einem imperativen Ansatz für die Infrastrukturautomatisierung zu kennen.

In den meisten Unternehmen ist der deklarative Ansatz – auch als funktionaler Ansatz bekannt – die beste Lösung. Beim deklarativen Ansatz geben Sie den gewünschten Endstatus der Infrastruktur an, die Sie einrichten möchten, und die IaC-Software übernimmt den Rest – Hochfahren der virtuellen Maschine (VM) oder des Containers, Installieren und Konfigurieren der erforderlichen Software, Auflösen von gegenseitigen System- und Softwareabhängigkeiten und Verwalten der Versionssteuerung. Der Hauptnachteil des deklarativen Ansatzes besteht darin, dass für die Konfiguration und Verwaltung normalerweise ein erfahrener Administrator erforderlich ist, und diese Administratoren sind häufig in der von ihnen bevorzugten Lösung spezialisiert.

Beim imperativen Ansatz – auch als prozeduraler Ansatz bekannt – unterstützt Sie die Lösung bei der Vorbereitung von Automatisierungsscripts, die Ihre Infrastruktur Schritt für Schritt einrichten. Während dies bei der Skalierung mehr Arbeits- und Verwaltungsaufwand bedeuten kann, kann der Ansatz für das vorhandene Verwaltungspersonal einfacher zu verstehen sein und ermöglicht die Nutzung bereits vorhandener Konfigurationsscripts.

Die Entscheidung für einen deklarativen oder einen imperativen Ansatz ist vergleichbar mit der Verwendung eines GPS oder der Befolgung einzelner Richtungsanweisungen. Bei einem GPS geben Sie eine Adresse ein und das GPS erledigt den Rest, indem es die schnellste Route für Sie berechnet und dabei Abschnitte mit hohem Verkehrsaufkommen umgeht – aber wenn Sie erfahren möchten, warum es diese Entscheidungen getroffen hat, benötigen Sie wahrscheinlich einen Experten. Die einzelnen Richtungsanweisungen beruhen auf persönlichen Erfahrungen; der Provider kennt die Route und weiß, warum er sie gewählt hat, aber wenn Sie auf Hindernisse stoßen oder die Route optimieren wollen, müssen Sie entweder um Hilfe bitten oder die Arbeit selbst erledigen.

Tools für Infrastructure as Code

Es sind zwar viele quelloffene IaC-Tools verfügbar, doch die am häufigsten eingesetzten Tools sind Ansible und Terraform.

Was ist Ansible?

Ansible (Link befindet sich außerhalb von ibm.com) ist ein von Red Hat gesponsertes Open-Source-Community-Projekt, das darauf ausgelegt ist, Unternehmen bei der Automatisierung der Einrichtung, dem Management der Konfiguration und der Implementierung von Anwendungen zu helfen. Ansible ist ein deklaratives Automatisierungstool, mit dem Sie (in der Konfigurationssprache YAML geschriebene) „Playbooks“ erstellen können, um den Soll-Status für Ihre Infrastruktur anzugeben, und das dann die Einrichtung für Sie übernimmt. Ansible ist eine beliebte Wahl für die Automatisierung der Einrichtung von Docker-Containern und Kubernetes-Bereitstellungen.

Was ist Terraform?

Terraform ist ein weiteres deklaratives Tool für die Einrichtung und Orchestrierung von Infrastrukturen, mit dem Techniker die Einrichtung aller Aspekte ihrer cloudbasierten und lokalen Unternehmensinfrastruktur automatisieren können.

Terraform arbeitet mit allen führenden Cloud-Providern zusammen und ermöglicht Ihnen, den parallelen Ausbau von Ressourcen providerübergreifend zu automatisieren, unabhängig davon, wo sich physische Server, DNS-Server oder Datenbanken befinden. Terraform kann auch in einer beliebigen Sprache geschriebene Anwendungen einrichten.

Im Gegensatz zu Ansible bietet Terraform keine Funktionalität für das Konfigurationsmanagement, aber es arbeitet Hand in Hand mit Tools für das Konfigurationsmanagement (z. B. Cloud Formation), um die Infrastruktur automatisch in dem Status einzurichten, der in den Konfigurationsdateien beschrieben ist, und die Einrichtung automatisch zu ändern und zu aktualisieren, wenn dies aufgrund von Konfigurationsänderungen erforderlich ist.

Eine ausführlichere Erörterung zur Auswahl eines IaC-Tools erhalten Sie in „Infrastructure as Code: Chef, Ansible, Puppet oder Terraform?“.

Zugehörige Lösungen
IBM® Cloud Schematics

Nutzen Sie Infrastructure as Code zum Konfigurieren und Automatisieren von Ressourcen, damit Sie sich auf Ihre wichtigsten Anwendungen konzentrieren können.

IBM® Cloud Schematics erkunden
IBM DevOps-Lösungen

Leistungsstarke DevOps-Software für die Erstellung, Bereitstellung und Verwaltung sicherer cloudnativer Apps auf mehreren Geräten, Umgebungen und Clouds.

IBM DevOps-Lösungen erkunden
Ressourcen Was ist DevOps?

DevOps beschleunigt die Bereitstellung von qualitativ hochwertigerer Software, indem die Arbeit von Teams in der Softwareentwicklung und im IT-Betrieb kombiniert und automatisiert wird.

Was ist Cloud-Computing?

Mit Cloud-Computing können Sie sich über das Internet in die IT-Infrastruktur einklinken und Rechenressourcen nutzen, ohne sie vor Ort installieren und warten zu müssen.

Infrastructure as Code: Chef, Ansible, Puppet oder Terraform?

Erfahren Sie, wie Sie ein IaC-Tool auswählen.

Machen Sie den nächsten Schritt

IBM Cloud Schematics basiert auf Terraform und ist eine vereinfachte Lösung für die Automatisierung des Infrastrukturmanagements, die Unternehmen dabei unterstützen kann, die Anwendungsleistung durch konsistente Einrichtung und Orchestrierung zu steigern.

Mehr über IBM® Cloud Schematics erfahren