Close

Infrastructure as Code

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

Porträtfoto: Ian Buchanan
Ian Buchanan

Principal Solutions Engineer


Infrastructure as Code (IaC) ist ein IT-Infrastrukturmanagementprozess, bei dem Best Practices aus der DevOps-Softwareentwicklung auf das Management von Cloud-Infrastrukturressourcen angewendet werden.

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, bei der die Infrastrukturressourcen eines Unternehmens in Textdateien kodifiziert werden. 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.

Symbol: Admin-Cloud
Zugehöriges Material

Infrastructure as a Service

Symbol: drei Ringe
Lösung anzeigen

Verwalte deine Komponenten mit Compass

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?


Bild: 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 können. Bei einer selbstverwalteten Remote-Infrastruktur 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 für IaC ist eine Toolsuite, die mit den IaaS-APIs verbunden wird und gängige 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

Auf einer Plattform für das Konfigurationsmanagement werden in einer Markup-Sprache wie YAML geschriebene, von Menschen und Computern lesbare Textdateien verwendet, um Tasks und Sequenzen festzulegen, die auf der Plattform ausgeführt werden sollen. 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-Reviews. 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.

Ian Buchanan
Ian Buchanan

Ian verfügt über umfassende Erfahrung mit Java und .NET. Sein Spezialgebiet sind jedoch Agile-Methoden für Großunternehmen. Derzeit liegt sein Schwerpunkt auf der neuen DevOps-Kultur und auf Tools zur Optimierung von Continuous Integration, Continuous Delivery und Datenanalyse. In seiner Laufbahn hat Ian bereits verschiedene Tools zur Entwicklung von Unternehmenssoftware in allen Lebenszyklusphasen betreut. Durch unternehmensweite Prozessoptimierungen hat er die Produktivität, die Qualität und die Kundenzufriedenheit gesteigert. Er hat multinationale Teams zusammengestellt, die sich weitgehend selbst leiten und organisieren. Wenn er gerade keine Vorträge hält oder programmiert, befasst sich Ian mit Parsern, Metaprogrammierung und domänenspezifischen Sprachen. Du kannst Ian unter @devpartisan folgen.


Diesen Artikel teilen

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

Compass-Community

Illustration: Überwindung von Hindernissen

Tutorial: Erstellen einer Komponente

Abbildung: Karte

Erste Schritte mit Compass (kostenlos)

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up