Infrastructure as Code: der Devops Standard
Wie IaC Ihre DevOps Workflows verbessern kann.
Wie IaC Ihre DevOps Workflows verbessern kann.
Infrastructure as Code (IaC) unterstützt DevOps-Best-Practices, indem es die Erstellung wiederholbarer Infrastrukturumgebungen durch die Verwendung einer deklarativen Sprache erleichtert. In diesem Artikel wird untersucht, was IaC ist, welche Vorteile es aus der DevOps-Perspektive bietet und welche der beliebtesten IaC-Tools heute verfügbar sind.
Wenn Sie als DevOps-Ingenieur Ihre Karriere vorantreiben möchten, haben Sie wahrscheinlich schon von Infrastructure as Code (IaC) gehört. Infrastructure as Code hat sich als Schlüsselkomponente der DevOps-Bewegung herauskristallisiert, deren Ziel es ist, die Kommunikation und Zusammenarbeit zwischen Entwicklungs- und Betriebsteams zu verbessern.
Zu den Vorteilen von IaC gehören die deklarative Verwaltung der Infrastruktur und die Versionskontrolle von Infrastrukturänderungen sowie die Zusammenarbeit mit anderen Teammitgliedern bei diesen Änderungen.
In diesem Artikel lernen Sie die Grundlagen von IaC kennen und erfahren, wie Sie damit eine Infrastruktur als Code-Pipeline aufbauen können. Außerdem erfahren Sie, wie Sie einige gängige IaC-Tools verwenden können, um eine automatische und versionierte Infrastrukturbereitstellung zu implementieren.
Die Bereitstellung von Infrastrukturen war schon immer eine Herausforderung, die bis in die Zeit zurückreicht, als die einzige Möglichkeit, die Kapazität zu erhöhen, darin bestand, entweder mehr Server in das Rack des Rechenzentrums zu stellen oder die Server in diesem Rack aufzurüsten. Die Bereitstellung neuer Server war ein zeitaufwändiger und fehleranfälliger Prozess, der Wochen oder sogar Monate in Anspruch nahm, manchmal mit verzweifelten Reisen zu Orten wie eBay, um über die Runden zu kommen.
Mit dem Aufkommen des Cloud Computing kam auch eine API ins Spiel, die es ermöglichte, Tausende von Instanzen in Sekundenschnelle bereitzustellen und die physische Abhängigkeit von der Verwaltung der Hardwarelogistik zu beseitigen. Die Teams begannen, mit der API zu kommunizieren, entweder über ein Portal oder über Code, um Instanzen nach Bedarf zu erstellen, ohne dass Investitionsausgaben (d. h. der Kauf physischer Güter) anfielen. Leider war dies mit einigen erheblichen Nachteilen verbunden. Das Wissen über die Infrastruktur blieb in den Händen einer einzigen Person oder einer kleinen Gruppe von Personen, und die Weitergabe dieses Wissens war schwierig, wenn neue Mitglieder hinzukamen oder ein wichtiger Mitarbeiter das Unternehmen verließ. Da die Dinge in den Händen weniger Personen oder sogar nur einer Person lagen, kam der “Bus-Faktor” ins Spiel. Wenn eine dieser wichtigen Personen das Unternehmen verließ, konnte das eine Katastrophe bedeuten.
Darüber hinaus war die Bereitstellung der Infrastruktur trotz der Vorteile des Cloud Computing nach wie vor ein fehleranfälliger und langsamer, manueller Prozess. So schlichen sich beispielsweise menschliche Fehler ein, wenn Änderungen an der laufenden Umgebung nicht aufgezeichnet oder den zuständigen Personen mitgeteilt wurden. Die Dokumentation der Infrastruktureinrichtung veraltete in dem Moment, in dem sie geschrieben wurde, und wurde mit der gleichen lässigen Loyalität betrachtet wie das Kritzeln auf einer Serviette zum Zeitvertreib. Es war ein Chaos.
Probleme mit der Einhaltung von Vorschriften und der Rechnungsprüfung traten ebenfalls auf, da eine Vielzahl von Diensten lief und aktualisiert wurde, ohne dass ein Plan der Infrastruktur vorlag; man kann nicht wissen, ob man gegen ein Sicherheitsproblem gepatcht ist, wenn man nicht weiß, welche Maschinen potenziell betroffen sind.
Mit der Einführung von IaC wurde die Bereitstellung der Infrastruktur viel einfacher, schneller und zuverlässiger, und viele der oben genannten Mängel wurden beseitigt. Man könnte sogar sagen, dass IaC für die Infrastruktur die gleichen Vorteile mit sich brachte wie DevOps für die Softwareentwicklung.
Insbesondere können Sie Ihre Infrastruktur kontinuierlich erstellen, zerstören und aktualisieren, indem Sie denselben Prozess und dieselben Tools verwenden, die Sie auch für Ihren Anwendungscode einsetzen, wie es Ihre DevOps-Praktiken vorschreiben. Das bedeutet, dass IaC Ihrer Infrastruktur die gleichen Vorteile bietet, die ein DevOps-Workflow Ihrem Code bietet. Sie können auch die gleichen Tools für die Zusammenarbeit und Überprüfung verwenden, um Ihre Infrastrukturänderungen zu verfolgen, wie Sie es mit Ihren Codeänderungen tun. Dadurch wird es viel einfacher, Ihre Infrastruktur zu verwalten und zu verstehen und Probleme schnell zu erkennen und zu beheben.
IaC erleichtert auch die Automatisierung der Infrastrukturbereitstellung, was viel Zeit und Mühe spart. Manuelle Eingriffe können sogar gänzlich entfallen. Dies kann die Geschwindigkeit und Zuverlässigkeit Ihres Infrastrukturbereitstellungsprozesses erheblich verbessern und die Skalierung Ihrer Infrastruktur nach Bedarf erheblich erleichtern. Sie müssen mehr Server aufsetzen? Fügen Sie eine Zeile in den Code ein. Müssen diese Server heruntergefahren werden? Entfernen Sie diese Zeile aus dem Code. Es ist wirklich so einfach.
Ein klares Verständnis der Vorteile von IaC-Tools kann Teams und Unternehmen helfen, ihre Bedeutung zu verstehen. Unter den vielen Vorteilen stechen die Kosteneinsparungen, die Flexibilität und die weniger risikoreichen Implementierungen hervor.
Geld zu sparen ist ein wichtiger Aspekt für Unternehmen, und IaC ist eine gute Möglichkeit, dies zu erreichen. Bei der Verwendung von IaC-Tools wird das Wissen über die Infrastruktur im Code und nicht in Menschen gespeichert. So können Sie mit kleineren Teams für die Bereitstellung und Verwaltung der Infrastruktur effizient arbeiten. Da diese Tools außerdem konsistente und automatisierte Bereitstellungen ermöglichen, ergeben sich Einsparungen in Form von weniger Fehlern und hoher Verfügbarkeit.
Große Unternehmen können mit jeder Minute Ausfallzeit Millionen von Dollar verlieren, daher ist die Vermeidung von Ausfallzeiten aufgrund von Fehlkonfigurationen ein sicherer Weg, um Geld zu sparen. Wenn Sie IaC-Tools verwenden, haben Sie auch weniger Aufwand, weil der Konfigurationscode einfach zu pflegen ist und Sie die Abhängigkeiten zwischen verschiedenen Ressourcen durch einen Blick in den Quellcode verstehen können.
Und schließlich ermöglicht die Möglichkeit, Code und Infrastruktur schnell und auf wiederholbare Weise bereitzustellen, eine schnellere Markteinführung, da Sie sich auf die Kerngeschäftslogik konzentrieren können und nicht auf die fehleranfällige Aufgabe der manuellen Verwaltung und Bereitstellung der Infrastruktur.
Bei der modernen Softwarebereitstellung geht es vor allem um Geschwindigkeit und Agilität. Mit IaC können Teams schnell auf Verkehrsspitzen reagieren, indem sie die Ressourcen automatisch nach Bedarf bereitstellen und konfigurieren. Nehmen wir zum Beispiel an, Sie betreiben einen Cluster mit fünf Knoten und erhalten zehntausend Anfragen pro Sekunde. Plötzlich kommt es zu einer Spitze von neunzehntausend Anfragen pro Sekunde. Bei einer manuellen Aufstockung würde das Hinzufügen und Konfigurieren der erforderlichen Kapazität Stunden dauern. Mit den entsprechenden IaC-Tools können Sie den Cluster einfach auf zehn Knoten aufstocken, und die verdoppelte Kapazität wäre fast sofort verfügbar.
Das Hilfreichste daran ist, dass Sie durch die Änderung einiger weniger Parameter QA-, Preprod- und Produktionsbereitstellungen erstellen können, ohne mühsam bei Null anfangen zu müssen.
Sichere Dienste sind beim Umgang mit Anwendungen und Daten sehr wichtig. Es ist oft schwierig, diese Dienste zu konfigurieren, ohne Sicherheitslücken zu schaffen.
Infrastructure as Code kann dazu beitragen, diese Risiken zu mindern, indem die Bereitstellung dieser Dienste automatisiert wird, wodurch sichergestellt werden kann, dass sie sicher und konsistent konfiguriert werden. Sie müssen keine Schnittstelle zu Ihrem Portal öffnen, um Dinge manuell zu konfigurieren, und sich keine Sorgen machen, dass sich Hacker durch Hintertüren einschleichen. Da diese Prozesse nun automatisiert sind, lassen sie sich auch leicht wiederholen, falls etwas schief geht.
Und schließlich kann IaC dazu beitragen, die Einrichtung neuer Server einfacher und wiederholbarer zu gestalten. So kann sichergestellt werden, dass neue Server von Anfang an richtig und sicher konfiguriert sind.
Kein Tool kann für alles verwendet werden, daher ist es immer effizienter, spezifische Tools zu verwenden, die für die jeweilige Aufgabe geeignet sind. Davon abgesehen kann Infrastruktur als Code grob in einige Kategorien eingeteilt werden: imperativ oder deklarativ und push oder pull.
Imperative IaC bedeutet, dass Sie Code schreiben, der explizit jeden Schritt beschreibt, der für die Bereitstellung Ihrer Infrastruktur erforderlich ist. Dies wird oft als prozeduraler Code bezeichnet. Ein Beispiel wäre die Verwendung eines Shell-Skripts zur Bereitstellung und Konfiguration einer virtuellen Maschine.
Im Gegensatz dazu schreiben Sie bei der deklarativen IaC einen Code, der den gewünschten Zustand Ihrer Infrastruktur festlegt. Die Verwendung eines Tools wie Terraform zur Konfiguration und Bereitstellung einer Reihe von virtuellen Maschinen oder Container-Orchestratoren wie Kubernetes ist ein Beispiel dafür. Sie geben an, in welchem Provider Sie den Cluster einrichten möchten, und versorgen das Tool mit Plug-ins und Authentifizierungstoken. Nachdem Sie die Änderungen vorgenommen haben, kümmert sich das Tool um den Rest.
Der Hauptunterschied zwischen den beiden Ansätzen besteht darin, dass Sie bei imperativem IaC Code schreiben müssen, um jeden Schritt, der zur Bereitstellung Ihrer Infrastruktur erforderlich ist, genau zu beschreiben. Dies kann zeitaufwändig und fehleranfällig sein.
Bei der deklarativen IaC müssen Sie nur Code schreiben, um den gewünschten Zustand Ihrer Infrastruktur festzulegen, und das IaC-Tool findet heraus, was es tun muss, um diesen Zustand zu erreichen. Da dies weniger zeitaufwändig und fehleranfällig ist, verwenden die meisten gängigen Tools (wie Terraform und Pulumi) einen deklarativen Ansatz.
Bei der Push-Konfiguration werden Konfigurationsdateien von einem zentralen Repository an die Server gesendet. Der Ansatz ist sehr einfach und leicht zu implementieren. Alles, was Sie brauchen, ist ein zentrales Repository und eine Methode, um Dateien vom Repository zu den Servern zu übertragen.
Der Hauptnachteil des Push-Ansatzes besteht darin, dass er bei einer großen Anzahl von Servern langsam und umständlich sein kann, da alle Änderungen an der Konfiguration an alle Server übertragen werden müssen.
Die Pull-Konfiguration bedeutet, dass die Server das zentrale Repository regelmäßig auf Änderungen überprüfen und die neuesten Konfigurationsdateien herunterladen. Bei einer großen Anzahl von Servern besteht der Hauptvorteil dieses Ansatzes darin, dass er viel schneller und einfacher zu verwalten ist. Das liegt daran, dass Sie Änderungen nur an einer Stelle vornehmen müssen (dem zentralen Repository), und die Server diese automatisch nach unten ziehen.
Der Hauptnachteil dieses Ansatzes ist, dass er schwieriger einzurichten ist (die meisten IaC-Tools sind auf das Push-Modell ausgerichtet) und dass es zu Konflikten kommen kann, wenn Änderungen auf dem Server vorgenommen werden, bevor der Pull abgeschlossen ist. Es ist jedoch unwahrscheinlich, dass dies ein Problem darstellt, da es nicht ratsam ist, in einer Live-Umgebung zu spielen, da diese in der Regel eingeschränkt ist.
Die Pull-Methode ist beliebter und effizienter, da sie Tests vor der Bereitstellung der Infrastruktur ermöglicht. Außerdem ermöglicht sie eine zentrale Speicherung der Konfiguration, wodurch Konflikte vermieden werden und eine einzige Quelle der Wahrheit entsteht, die das Team als Referenz nutzen kann.
Mit der zunehmenden Popularität von IaC sind viele Projekte von Unternehmen und Einzelpersonen entstanden, die verschiedene Anwendungsfälle abdecken. Sie brauchen nicht alle zu erforschen, um loszulegen. Im Folgenden finden Sie einige der wichtigsten IaC-Tools, die derzeit auf dem Markt erhältlich sind.
Von allen unten aufgeführten Tools gibt es sowohl eine Open-Source-Version als auch eine Enterprise-Edition, die Sie für Ihre geschäftlichen Anforderungen nutzen können; die kostenpflichtigen Versionen bieten zusätzliche Funktionen, Support und Sicherheit.
Hashicorp hat das beliebteste Projekt auf der Liste erstellt. Im Gegensatz zu den anderen Projekten ist Terraform (das in Go geschrieben ist) ein Tool für die Bereitstellung, Verwaltung und Konfiguration von Infrastrukturressourcen und nicht für das Konfigurationsmanagement. Systemadministratoren und DevOps-Profis verwenden es häufig. Terraform ist quelloffen und kann daher völlig frei verwendet werden. Es ist einfach zu erlernen und wird von einer großen Community unterstützt.
Das Tool unterstützt eine deklarative Infrastrukturkonfiguration, die in der HashiCorp Configuration Language (HCL) geschrieben ist, und kann unveränderliche Infrastrukturen ohne die Verwendung eines Agenten erstellen. Terraform ermöglicht Entwicklern die einfache Bereitstellung ganzer Cloud-Landschaften, einschließlich VPCs, Recheninstanzen und DNS-Einträge. Es funktioniert auch mit einer Reihe von bekannten Cloud-Anbietern wie AWS, Azure und GCP.
Pulumi ist ein in Go geschriebenes IaC-Tool. Es kann alles, was Terraform auch kann, aber es ermöglicht den Benutzern, ihre Bereitstellungsanweisungen in Sprachen wie Go, TypeScript oder Python zu schreiben, anstatt maßgeschneiderte Konfigurationssprachen wie YAML oder HCL zu verwenden.
Das Schreiben der Konfiguration in einer normalen Programmiersprache ermöglicht es den Nutzern, ihre IDE tief in die Attribute und Parameter einer bestimmten Ressource eindringen zu lassen, im Gegensatz zu Terraform, wo die Nutzer die Dokumentation ständig geöffnet haben sollten, während sie ihre Infrastrukturmanifeste entwickeln. Es funktioniert mit den wichtigsten Infrastrukturanbietern wie AWS, Microsoft Azure, Google Cloud und jedem Kubernetes-Cluster.
Mit der Bereitstellung Ihrer Infrastruktur ist es noch nicht getan. Sobald Sie die Server eingerichtet haben, müssen Sie sie so konfigurieren, dass sie das tun, was Sie wollen. Auch dies ist ein Prozess, der traditionell mit manuellen Eingriffen und Wunschdenken als Dokumentation verbunden ist. Diese Tools sind die besten ihrer Klasse, wenn es darum geht, dass Sie angeben, was Ihre Computer enthalten sollen, und sie dann in Gang setzen, um sicherzustellen, dass dies geschieht.
Ansible ist ein weiteres bekanntes Konfigurationsmanagement- und Orchestrierungswerkzeug. Es wurde 2012 von Michael DeHaan entwickelt und 2015 von Red Hat aufgekauft. Ansible-Playbooks werden in der YAML-Sprache geschrieben. Es kommuniziert zwischen den Knoten über SSH und erfordert keine Agenten, die auf entfernten Knoten installiert werden müssen. Es ist in Python geschrieben, und Ansible-Module und Plug-ins können von Entwicklern leicht erweitert werden.
Es ist erwähnenswert, dass Ansible in erster Linie als Konfigurationsmanagement-Tool entwickelt wurde. Die Unterstützung für die Verwaltung von Infrastrukturen wie AWS durch Ansible ist eine relativ neue Innovation. Es ist sowohl eine Art IaC als auch ein Konfigurationsmanagement-Tool, aber als Konfigurationsmanagement-Tool ist es ausgereifter.
Für das Konfigurationsmanagement verwendet das Tool die Push-Methode, bei der Konfigurationen von einem zentralen Server (oder einem Entwickler-Laptop) auf alle Knoten oder Zielhosts übertragen werden. Ansible wird von der Community mit mehr als 35.000 Modulen und einer Vielzahl von Foren stark unterstützt.
Chef ist ein Konfigurationsmanagement-Tool für die Installation und Verwaltung von Software auf bestehenden Servern. Seine Konfigurationssprache ist eine benutzerdefinierte domänenspezifische Sprache (DSL), die auf Ruby basiert. Das Tool verwendet einen Pull-basierten Ansatz zur Synchronisierung von Änderungen und erzeugt veränderbare Änderungen. Chef ist beliebt für seine Integration mit Cloud-Anbietern.
Das Tool verfügt über eine Fehlererkennung in Vorproduktionsumgebungen und bietet vollständige Sicherheit mit Compliance-Transparenz in allen Phasen.
Puppet ist ein kostenloses und quelloffenes Konfigurationsmanagementsystem, das bei der Automatisierung sich wiederholender Aufgaben, der Bereitstellung von Anwendungen und der Verwaltung von Systemkonfigurationen über eine Gruppe von Servern hinweg helfen kann.
Dieses von Puppet Labs entwickelte Tool ist in Ruby geschrieben. Die Apache-Lizenz 2.0 regelt seine Verbreitung. Puppet verwendet den deklarativen Ansatz und ist für Unix-ähnliche und Microsoft Windows-Systeme geeignet.
SaltStack ist ein leistungsfähiges Open-Source-Tool für die Konfigurationsverwaltung und Fernausführung. Es kann für viele Prozesse verwendet werden, z. B. für die Verwaltung von Serverimplementierungen und die Automatisierung von Aufgaben. Es verfolgt einen deklarativen Ansatz, d. h. Sie beschreiben den gewünschten Zustand Ihres Systems und SaltStack kümmert sich um den Rest.
CFEngine ist ein weiteres leistungsstarkes Konfigurationsmanagement-Tool zur Automatisierung von Systemverwaltungsaufgaben. Es ermöglicht Ihnen, die Konfiguration Ihres Systems zu definieren und zu verwalten sowie komplexe Aufgaben wie Einsätze und Systemaktualisierungen zu automatisieren.
Das Tool wird von Unternehmen wie Samsung und DHL eingesetzt.
NixOS ist eine Reihe von Werkzeugen der nächsten Generation, mit denen Sie genau beschreiben können, was auf einem Server ausgeführt werden soll, und die alle Einstellungen enthalten, die normalerweise von allen maßgeschneiderten Konfigurationssprachen festgelegt werden, die auf einem durchschnittlichen produktionstauglichen Linux-System verwendet werden. Durch die tiefe Integration mit dem Paketmanager Nix kann es auch automatisch Ihre benutzerdefinierte Software als Teil des Bereitstellungsprozesses neu erstellen. So können Sie genau beschreiben, was Sie wollen, und haben die Gewissheit, dass Sie genau wissen, was vor sich geht.
Pakete und Systemkonfigurationen werden in der gleichen Sprache (auch Nix genannt) definiert, was bedeutet, dass Ihre benutzerdefinierten Pakete genauso tief in das System integriert werden können wie die Dienste, die NixOS mit seinem Optionssystem bereitstellt. Ihre Konfiguration für Ihre benutzerdefinierten Dienste kann direkt neben Ihrer Nginx-Konfiguration ausgedrückt werden, um sie dem Internet zugänglich zu machen.
In diesem Artikel wurden die Grundlagen von Infrastructure as Code behandelt: was es ist, warum es wichtig ist und wie man damit anfängt. Mit dem Wissen über einige der beliebtesten Tools auf dem Markt sollten Sie nun besser gerüstet sein, um Ihre Infrastruktur effizienter und effektiver zu verwalten. Denken Sie daran, dass IaC nur eines von vielen Tools in Ihrem DevOps-Werkzeugkasten ist und dass der Schutz der Tools vor externen Bedrohungen ebenfalls entscheidend ist.
In unserer Discord Community findest du Antworten auf deine Fragen rund um das Thema ayedo, Kubernetes und Open Source. Hier erfährst du in Realtime was es Neues bei ayedo und unseren Partnern gibt und hast die Möglichkeit mit unserem Team in direkten Kontakt zu treten.
Interessiert an weiteren Inhalten? Hier gehts zu allen Blogs →
Unsere Cloud-Experten beraten Sie gerne und individuell.
Wir antworten in der Regel innerhalb weniger Stunden auf Ihre Nachricht.
Zu Gen-Z für E-Mail? Einfach mal Discord versuchen. Unter +49 800 000 3706 können Sie unter Angabe Ihrer Kontaktdaten auch einen Rückruf vereinbaren. Bitte beachten Sie, dass es keine Möglichkeit gibt, uns telefonisch direkt zu erreichen. Bitte gar nicht erst versuchen. Sollten Sie dennoch Interesse an synchroner Verfügbarkeit via Telefon haben, empfehlen wir Ihnen unseren Priority Support.