So werden mit Infrastructure as Code (IaC) komplexe Infrastrukturen verwaltet

Ian Buchanan Ian Buchanan

Zusammenfassung: Infrastructure as Code (IaC) ist ein IT-Infrastrukturmanagementprozess, der Best Practices aus der DevOps-Softwareentwicklung auf das Management von Cloud-Infrastrukturressourcen anwendet.

Der zunehmende Verbreitung der Hardwarevirtualisierung Mitte der 2000er Jahre hat neue Möglichkeiten für das Hosting von Cloud-Infrastrukturen hervorgebracht. Cloud-Hosting-Anbieter bieten Zugang zu dynamischen Infrastructure as a Service (IaaS)-Plattformen. Als diese Plattformen wuchsen und komplexere Infrastruktur-Assets anboten, wuchs auch die Komplexität der traditionellen Rolle eines Systemadministrators. Die Notwendigkeit, komplexe Cloud-Infrastrukturen schnell zu konfigurieren und zu verwalten, wurde immer mehr zu einer Herausforderung.

Die Idee hinter Infrastructure as Code (IaC) oder der Modellierung der Infrastruktur mit Code wurde durch den Erfolg von CI/CD vorangetrieben. DevOps bewies, wie produktiv es war, Code an ein Git-Repository zu committen und anschließend Feature-Branches und Pull-Anfragen-Workflows anzuwenden. Die Automatisierung dieser Workflows in der Softwareentwicklung trug dazu bei, die neue Komplexität der Cloud-Systemadministration zu reduzieren

Was ist Infrastructure as Code?

Infrastructure as Code ist ein IT-Infrastrukturmanagementprozess, der Best Practices aus der DevOps-Softwareentwicklung auf das Management von Cloud-Infrastrukturressourcen anwendet. Anwendbare Infrastrukturressourcen sind Virtual Machines, Netzwerke, Load Balancer, Datenbanken und andere vernetzte Anwendungen.

IaC ist eine Form des Konfigurationsmanagements, die die Infrastrukturressourcen eines Unternehmens in Textdateien kodifiziert. Diese Infrastrukturdateien werden dann in ein Versionskontrollsystem wie Git committet. Das Repository zur Versionskontrolle ermöglicht Feature-Branch- und Pull-Anfragen-Workflows, bei denen es sich um grundlegende Abhängigkeiten von CI/CD handelt.

Infrastructure as Code wird durch die zunehmende Verbreitung von Cloud-Infrastruktur-Hosting-Plattformen, insbesondere IaaS-Plattformen, ermöglicht. IaaS ermöglicht die bedarfsgesteuerte Bereitstellung und Anforderung von Cloud-Ressourcen über Remote-APIs. Diese APIs erstellen die Eigenschaftenvorlage, die an die Infrastrukturkonfigurationsdateien committet wird. Die Automatisierungsfunktionen von IAC können die Konfigurationsdateien übernehmen und für die Remote-IaaS-APIs ausführen.

Sobald ein Team die Infrastrukturkonfiguration für die Versionskontrolle festgelegt hat, kann es CI/CD-Verfahren auf Infrastrukturänderungen anwenden. Aktualisierungen der Infrastruktur können einen DevOps-Workflow befolgen. Wenn ein Teammitglied eine der Konfigurationstextdateien bearbeitet hat, können Pull-Anfragen und Code-Prüfungs-Workflows verwendet werden, um die Richtigkeit der Änderungen zu überprüfen. Darüber hinaus nutzt ein DevOps-fähiges System auf Basis von Infrastructure as Code automatische Infrastruktur-Deployments und Rollbacks.

Warum ist Infrastructure as Code wichtig?

IaC wurde weiterentwickelt, um das Problem von sich auseinander bewegenden Umgebungen zu lösen. Cloud-Anwendungen verfügen in der Regel über separate Deployment-Umgebungen für die verschiedenen Phasen ihres Release-Lebenszyklus. Es ist üblich, Entwicklungs-, Staging- und Produktionsumgebungen zu haben. Diese Umgebungen bestehen aus vernetzten Ressourcen wie Anwendungsservern, Load Balancern und Datenbanken. Umgebungen bewegen sich auseinander, wenn die Infrastruktur zwischen diesen verschiedenen Umgebungen nicht mehr synchron ist.

Ohne IaC kann das Infrastrukturmanagement zu einem unorganisierten und fragilen Prozess werden. Systemadministratoren stellen manuell eine Verbindung zu Remote-Cloud-Anbietern her und verwenden API- oder Web-Dashboards, um neue Hardware und Ressourcen bereitzustellen. Dieser manuelle Workflow gibt keine ganzheitliche Sicht auf die Anwendungsinfrastruktur. Administratoren nehmen möglicherweise manuell Änderungen an einer Umgebung vor und vergessen dabei eine andere Umgebung. Auf diese Weise kommt es dazu, dass sich Umgebungen auseinander bewegen.

Wenn Umgebungen sich auseinander bewegen, führt dies zu einer teuren Verschwendung von Geschäftsressourcen. Fehler und Ausfälle treten auf, wenn Teams ihre Builds in einer Staging- oder Entwicklungsumgebung erstellen und beim Deployment feststellen, dass die Produktionsumgebung nicht synchron ist, was zu einer zeitraubenden Fehlersuche führt.

Ohne IaC ist das manuelle Infrastrukturmanagement ein langsamer Prozess. Wenn festgestellt wird, dass eine Infrastrukturänderung aufgrund von sich auseinander bewegenden Umgebungen, Traffic-Spitzen oder einem anderen Problem erforderlich ist, kann es eine unbekannte Zeit lang dauern, bis ein Systemadministrator reagiert und die Anpassung vornimmt. Dies führt zu Ausfällen und frustrierten Kunden. Wenn IaC vorhanden ist, kann sich die Infrastruktur automatisch an Änderungen in der Konfiguration anpassen und mit automatischen Skalierungsfunktionen auf Datenverkehrsspitzen reagieren.

Infrastructure as Code sorgt in der manuellen Systemadministration für mehr Übersichtlichkeit und Transparenz. Da die Konfigurationsdateien der Infrastruktur an ein zentrales Repository zur Versionskontrolle committet werden, können alle Teammitglieder die Infrastrukturdaten anzeigen und bearbeiten. Dies ermöglicht leistungsstarke Auditing-Funktionen. Wenn dein Team beispielsweise einem PCI-Compliance-Audit unterzogen wird, musst du wissen, ob ein bestimmter Teil deiner Infrastruktur SSL-Verschlüsselung verwendet. Mit IaC kannst du schnell die SSL-Konfiguration ansehen und den Code ausführen, um sicherzustellen, dass die Live-Infrastruktur mit den Konfigurationsdateien übereinstimmt, wodurch angegeben wird, ob SSL aktiviert ist. Der Commit-Verlauf der Versionskontrolle fungiert auch als Protokoll, um zu überprüfen, wann sie hinzugefügt oder entfernt wurde.

Wie funktioniert Infrastructure as Code?

Gewisse Abhängigkeiten müssen vorhanden sein, um Infrastructure as Code vollständig zu erreichen.

Plattform für Remote-Hosting oder IaaS-fähiges Cloud-Hosting
Die erste und wichtigste Abhängigkeit ist das Hosting mit Remote-Zugriff. Das Konfigurationsmanagementtool muss eine Verbindung zum Remote-Host herstellen und ihn ändern. Wenn die Remote-Infrastruktur selbst verwaltet wird, muss dein Team sicherstellen, dass das Konfigurationsmanagementtool Zugriff hat. Die IaaS-fähige Cloud-Hosting-Plattform bietet APIs, mit denen Benutzer Infrastrukturressourcen bei Bedarf automatisch erstellen, löschen und ändern können. Auf diese APIs kann auch mit Konfigurationsmanagementtools zugegriffen werden, um diese Tasks weiter zu automatisieren. Einige Beispiele für beliebte IaaS-Plattformen sind Digital Ocean, Amazon AWS und Microsoft Azure.

Plattform für das Konfigurationsmanagement
Die nächste Anforderung von IaC ist eine Toolsuite, die sich mit den IaaS-APIs verbindet und allgemeine Tasks automatisiert. Ein Team kann eine Reihe von Skripten und Tools erstellen. Dies ist jedoch arbeitsaufwendig, erfordert eine zukünftige Wartung und erzielt wahrscheinlich einen geringen ROI. Es gibt bereits viele Open-Source-Plattformen für das Konfigurationsmanagement, die dieses Problem lösen, darunter Terraform, Ansible, SaltStack und Chef.

Versionskontrollsystem
Eine Plattform für das Konfigurationsmanagement verwendet von Menschen und maschinell lesbare Textdateien, die in einer Markup-Sprache wie YAML geschrieben sind, um Tasks und Sequenzen festzulegen, die die Plattform ausführen soll. Diese Textdateien können wie Anwendungscodedateien behandelt und in einem Repository des Versionskontrollsystems gespeichert werden. Das Repository fungiert als zentrale Informationsquelle und ermöglicht Pull-Anfragen und Code-Prüfungen. Das beliebteste Versionskontrollsystem ist Git.

Betrachten wir vor dem Hintergrund dieser Abhängigkeiten ein Beispielszenario, in dem ein Entwickler einem System einen neuen Anwendungsservice hinzufügen möchte. Dieses Szenario hilft bei der Demonstration eines IAC-Workflows.

  1. Der Entwickler bearbeitet eine YAML-Konfigurationstextdatei in seiner bevorzugten Plattform für das Konfigurationsmanagement Terraform. Die Änderungen geben vor, dass ein neuer Hosting-Server benötigt wird.
  2. Der Entwickler committet Änderungen in einem Feature-Branch im Git-Repository. Da das Git-Repository des Projekts auf Bitbucket gehostet wird, eröffnet der Entwickler eine Pull-Anfrage. Ein anderes Teammitglied prüft die Pull-Anfrage und wird auf die neuen Infrastrukturänderungen aufmerksam. Das Teammitglied genehmigt die Pull-Anfrage und der Entwickler führt dann im Haupt-Branch des Repositorys einen Merge des Commits durch.
  3. Zu diesem Zeitpunkt wird die Konfigurationsplattform zur Ausführung eines Updates benötigt. Das Update kann vom Entwickler manuell ausgelöst werden. Da das Team Bitbucket verwendet, hat es auch Zugriff auf Bitbucket Pipelines und kann diesen Schritt mit einer Pipeline automatisieren.
  4. Bei der Ausführung bildet Terraform eine Schnittstelle mit der IaaS des Teams. Terraform setzt eine Reihe von Befehlen an die IaaS-API ab, um die IaaS mit der erwarteten Infrastrukturkonfiguration auf den neuesten Stand zu bringen.

Fazit

IaC ist eine hochproduktive Form des Konfigurationsmanagements, die sich auf die Automatisierung des Cloud-IT-Infrastrukturmanagements konzentriert. Sobald IAC eingerichtet ist, kann sie verwendet werden, um ein Maß an CI/CD-Automatisierung für Änderungen an der Infrastruktur eines Projekts zu erreichen. IaC ermöglicht viele nützliche Einblicke in die Kommunikation und bietet Transparenz bei Infrastrukturänderungen. IaC erfordert eine Reihe von Abhängigkeiten wie Hosting-Plattformen und Automatisierungstools, die bei modernen Hosting-Unternehmen weit verbreitet sind.