Infrastructure as Code: der Devops Standard

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.

Iac DevOps

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.

Wie kann Infrastruktur als Code DevOps verbessern?

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.

Überblick über Infrastructure as Code

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.

Kosten

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.

Agilität

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.

Risiken

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.

IaC-Methoden und -Protokolle

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.

Imperativ vs. deklarativ

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.

Push- vs. Pull-Konfiguration

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.

Standard-Werkzeuge für Infrastruktur als Code

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.

Terraform

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.

Vorteile

  • Es ermöglicht Anwendern die Definition und Bereitstellung einer Rechenzentrumsinfrastruktur mithilfe einer High-Level-Konfigurationssprache, die als HCL bekannt ist.
  • Es ist in der Lage, sowohl gängige Dienstanbieter als auch benutzerdefinierte interne Lösungen zu verwalten.
  • Sie ist quelloffen und bietet eine Community, in der Benutzer zusammenarbeiten und Module für beliebte Dienste beisteuern können.

Nachteile

  • Die Lernkurve kann für diejenigen, die mit IaC oder HCL nicht vertraut sind, steil sein.
  • Bei der Bereitstellung großer Infrastrukturen kann das Tool langsam sein.
  • Die Statusdateien können bei der Zusammenarbeit mit einem Team schwierig zu verwalten sein, aber es gibt Optionen, diese Statusdateien in gemeinsam genutzten Bereichen zu speichern, wie z. B. AWS S3.
  • Das Schreiben und Verwenden von Modulen erfordert, dass Sie terraform init viele Male ausführen, um Ihre Konfiguration zu modularisieren. Es gibt keine Funktionen oder gleichwertige Konzepte in Terraform. Nur Module. Dies kann schlecht skalieren.

Pulumi

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.

Vorteile

  • Das Schreiben des eigenen Codes in einer echten Programmiersprache erleichtert den Kontextwechsel zur Wartung der Infrastruktur, wenn Sie in einer Programmierrolle sind.
  • Die Modularisierung ist viel einfacher als mit Terraform. Programmiersprachen haben in der Regel eigene Möglichkeiten zur Modularisierung, die viel besser funktionieren als das Modulkonzept von Terraform.
  • Pulumi ist außerdem ein offener Quellcode und wird von der Entwicklergemeinde sehr geschätzt.

Nachteile

  • Die Verwendung einer vollständig Turing-kompletten Programmiersprache bedeutet, dass die Möglichkeit besteht, einen Infrastrukturplan zu erstellen, der nicht abbricht.
  • Fehler in Ihrem Infrastrukturcode können zu großen unerwarteten Ausgaben für die Infrastruktur führen.
  • Pulumi ist nicht so weit verbreitet wie Terraform, so dass einige Infrastrukturanbieter möglicherweise nicht verfügbar sind.

Konfigurations-Management Tools

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

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.

Vorteile

  • Ansible ist agentenlos, d. h. es muss keine zusätzliche Software auf Ihren Servern installiert werden.
  • Es ist sehr leistungsfähig und kann zur Verwaltung komplexer Bereitstellungen verwendet werden.
  • Es ist quelloffen und daher kostengünstig.

Nachteile

  • Da Ansible agentenlos ist, ist es für die Kommunikation mit entfernten Servern auf SSH angewiesen, was ein Sicherheitsrisiko darstellen kann. Sie können eine Lösung wie Tailscale verwenden, um Ihre Verbindung zu schützen und Ihre Verbindungen zu härten.
  • Ansible ist nicht so weit verbreitet wie einige der anderen Optionen, so dass weniger Community-Support verfügbar ist.
  • Es ist schwierig zu erlernen und zu verwenden für diejenigen, die kein gutes Verständnis von Systemadministration und DevOps-Konzepten haben.

Chef

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.

Vorteile

  • Unternehmen können kostspielige Sicherheitsprobleme vermeiden, indem sie bereits zu einem frühen Zeitpunkt im Entwicklungsprozess auf Sicherheit und Compliance testen.
  • Die Automatisierung der im Code definierten Konfiguration kann dazu beitragen, Sicherheitstests in den Auslieferungsprozess einzubetten.
  • Unternehmen können die Automatisierung über heterogene Infrastrukturen hinweg durchführen, um sicherzustellen, dass die Server in den gewünschten Zustand zurückkehren.

Nachteile

  • Es unterstützt keine Push-basierte IaC.
  • Es handelt sich um ein komplexes Tool, das schwer zu erlernen ist, wenn Sie nicht bereits mit Ruby und prozeduraler Programmierung vertraut sind.

Puppet

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.

Vorteile

  • Puppet ist deklarativ, d. h. Sie müssen nur den gewünschten Zustand Ihrer Infrastruktur beschreiben.
  • Es ist idempotent, d. h., es nimmt nur Änderungen an Ihrer Infrastruktur vor, um den gewünschten Zustand zu erreichen. Das bedeutet, dass Sie Puppet so oft ausführen können, wie Sie wollen, ohne Angst haben zu müssen, dass etwas kaputt geht.
  • Das Tool ist leistungsstark und flexibel und ermöglicht Ihnen die Verwaltung von einfachen Dateien und Paketen bis hin zu komplexen Netzwerken und Cloud-Bereitstellungen.

Nachteile

  • Puppet kann kompliziert zu erlernen und zu verwenden sein, besonders wenn Sie mit Programmierkonzepten nicht vertraut sind.
  • Manchmal kann es langsam sein, besonders wenn Sie eine große Infrastruktur verwalten.
  • Prozeduren können schwierig zu debuggen sein.

SaltStack

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.

Vorteile

  • Es handelt sich um eine Plattform mit einer einfachen Lösung, die sehr effektiv funktioniert.
  • Sie ist leistungsstark und flexibel, da sie Probleme automatisch erkennt und das System zwingt, in den gewünschten Zustand zurückzukehren.
  • Sie stellt sicher, dass kritische Infrastrukturen immer verfügbar sind.

Nachteile

  • Die Unterstützung der Gemeinschaft für dieses Tool ist begrenzt.
  • Die Lernkurve ist steil, wenn man anfängt.
  • Es ist nicht gut für große Umgebungen geeignet, da es nur begrenzte Unterstützung für Hardware gibt.

CFEngine

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.

Vorteile

  • CFEngine unterstützt das Patch-Management in Ihrer Infrastruktur.
  • Auch die Härtung der Infrastruktur wird unterstützt.
  • CFEngine hilft bei der Compliance-Automatisierung, indem es Audits durchführt und die Systeme alle fünf Minuten überprüft, um sicherzustellen, dass sie immer durchgesetzt werden und Ihren Compliance-Rahmen einhalten.

Nachteile

  • Es gibt keine native Integration für die Cloud wie bei den anderen Tools.
  • Es gibt keinen Push-Mechanismus.

Nix und NixOS

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.

Vorteile

  • NixOS gibt Ihnen die Möglichkeit, alles zu wissen, was in einem System vor sich geht. Das macht die Behebung von Sicherheitsproblemen trivial. Sobald das anfällige Paket identifiziert ist, ist es trivial, ein Mapping aller anderen Pakete zu erstellen, die davon abhängen. Dies hilft Ihnen, den “Splash-Schaden” von Abhilfemaßnahmen zu bewerten.
  • Nix ist ein funktionell reiner Paketmanager in dem Sinne, dass die Paketerstellung nicht zufällig auf das Internet oder zufällige Teile des Systems zugreifen kann. Das heißt, selbst wenn eine Ihrer Abhängigkeiten ein kompromittiertes Build-Skript hat, kann es nicht mit geheimen Anmeldedaten nach Hause telefonieren.
  • NixOS ist eines der größten Open-Source-Repositories auf GitHub und hat im Laufe der Jahre stetig an Akzeptanz gewonnen.
  • Die Architektur von NixOS erschwert den meisten Angriffswerkzeugen die Arbeit, da kritische Systemdateien nicht an Standardspeicherorten abgelegt werden. Dies ist bestenfalls Security by Obscurity, aber es funktioniert.

Nachteilig

  • Nix, der Paketmanager, Nix, die Konfigurationssprache, und NixOS, das Betriebssystem, sind alle unterschiedlich, haben aber fast identische Namen. Das kann zu ontologischer Verwirrung führen.
  • Die Syntax der Nix-Sprache sieht ein wenig aus wie Haskell und JSON in einem Mixer, mit Semikolons am Ende einiger Anweisungen wie bei C. Das kann für Neulinge anfangs schwierig sein, ist aber auf lange Sicht normalerweise kein praktisches Problem.
  • Nix und NixOS definieren im Kern kein Push-Tooling, aber es gibt Möglichkeiten, dass eine Maschine regelmäßig ihre Konfiguration aus einem gemeinsamen Git-Repository zieht und sich selbst neu aufbaut.

Abschließende Überlegungen

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.

Kontaktieren Sie uns

Unsere Container-Experten beraten Sie gerne und individuell.

Fleet Team
Fleet Team
Fleet Team
Fleet Team
Fleet Team
Fleet Team
Fleet Team

Wir antworten in der Regel innerhalb weniger Stunden auf Ihre Nachricht.