infrastructure as code

Infrastructure as code erklärt: Vorteile, Typen und Tools

Stefan
17 Min Read
infrastructure as code

DevOps war in den letzten Jahren wahrscheinlich der einflussreichste Trend in der Softwareentwicklung. Derzeit werden in den USA über 11.000 DevOps-Stellen auf Indeed angeboten und 74 Prozent der Organisationen haben DevOps bereits eingeführt, darunter Amazon, Facebook, Netflix, Walmart, NASA und andere.

Eines der wichtigsten DevOps-Prinzipien besteht darin, so viele Dinge wie möglich zu automatisieren, wozu auch die Automatisierung der Infrastruktur gehört. Ohne den Ansatz, der allgemein als Infrastructure as Code (IaC) bezeichnet wird, können Sie der DevOps-Philosophie nicht vollständig folgen.

Sehen wir uns also an, was IaC ist, welche Vorteile es bietet und natürlich, wie Sie die richtige Software dafür auswählen.

Was ist Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) ist der Prozess der Verwaltung Ihrer IT-Infrastruktur mithilfe automatischer Skripte statt manuell. Als eines der entscheidenden Elemente des DevOps- Softwareentwicklungsansatzes ermöglicht es Ihnen, Bereitstellung und Konfiguration vollständig zu automatisieren und so eine kontinuierliche Bereitstellung zu ermöglichen .

Infrastruktur ist insgesamt eine Kombination von Komponenten, die zur Unterstützung des Betriebs Ihrer Anwendung erforderlich sind. Sie besteht aus Hardware wie Servern, Rechenzentren, Desktop-Computern und Software wie Betriebssystemen, Webservern usw. Traditionell installiert und verwaltet ein Unternehmen seine Infrastruktur physisch vor Ort. Aber heute besteht eine De-facto-Methode zum Hosten von Infrastruktur in der Cloud über Anbieter wie AWS, Azure und Google Cloud.

Cloud Computing ermöglicht uns die Nutzung externer Computerressourcen durch Virtualisierung, die weit entfernte physische Server verbindet und über das Internet zugänglich macht. Mit der Cloud ist der Entwicklungszyklus deutlich kürzer und jeden Tag werden mehr Anwendungen veröffentlicht, sodass es schwierig wird, die Infrastruktur nach oben und unten zu skalieren, was weiterhin ein manueller Prozess ist. Infrastructure as Code kann dabei helfen.

Wie funktioniert Infrastructure as Code?

Ohne IaC müsste das Team die Infrastruktur (Server, Datenbanken, Load Balancer, Container usw.) für jede Bereitstellung einzeln konfigurieren. Im Laufe der Zeit werden Umgebungen, die eigentlich identisch sein sollten, inkonsistent (sie werden oft als „Schneeflocken“ bezeichnet), was ihre Konfiguration erschwert und Bereitstellungen verlangsamt.

Daher verwendet IaC Softwaretools, um Verwaltungsaufgaben zu automatisieren, indem die Infrastruktur in Code beschrieben wird.

Die Implementierung erfolgt folgendermaßen:

  • Das Team schreibt Infrastrukturkonfigurationen in einer erforderlichen Programmiersprache.
  • Die Codedateien werden an ein Code-Repository gesendet.
  • Ein IaC-Tool führt den Code aus und führt die erforderlichen Aktivitäten durch.

Vorteile von Infrastructure as Code

Wir haben bereits kurz erwähnt, warum IaC heute die fortschrittlichste Methode zur Verwaltung Ihrer Infrastruktur ist. Aber was genau bringt es?

Reduzierte Kosten. Cloud Computing an sich ist kostengünstiger, da Sie kein Geld für Hardware und Personal für die Wartung ausgeben müssen. Durch die Automatisierung mit IaC sparen Sie außerdem Infrastrukturkosten, da der Verwaltungsaufwand sinkt und Ihr Team sich auf wichtigere Aufgaben konzentrieren kann, die Ihrem Unternehmen einen Mehrwert bringen. Außerdem zahlen Sie nur für die Ressourcen, die Sie auch nutzen.

Konsistenz . Wie bereits erwähnt, bringt die manuelle Bereitstellung viele Inkonsistenzen und Variationen mit sich. Wenn Sie eine deklarative Methode verwenden (mehr dazu später), vermeidet IaC sogenannte Konfigurations- oder Umgebungsdrift, indem es sicherstellt, dass Bereitstellungen wiederholbar sind und jedes Mal dieselbe Konfiguration eingerichtet wird.

Versionskontrolle . Unter IaC werden Infrastrukturkonfigurationen in eine Codedatei eingefügt, die leicht bearbeitet und verteilt werden kann. Wie jeder andere Code kann er mithilfe bestehender Verfahren in die Quellcodeverwaltung eingecheckt, versioniert und zusammen mit Ihrem Anwendungsquellcode überprüft werden. Der Infrastrukturcode kann auch direkt in CI/CD-Plattformen integriert werden , um Bereitstellungen zu automatisieren.

Wenn Ihnen die Idee gefällt, Infrastructure as Code einzuführen, müssen Sie als Nächstes ein geeignetes Tool auswählen. Im folgenden Abschnitt besprechen wir einige Dinge, die Sie dabei beachten sollten.

Auswahl eines IaC-Tools

Es stehen zahlreiche Plattformen zur Auswahl und die Wahl hängt in hohem Maße von Ihren Entscheidungen zu den folgenden Themen ab.

Deklarativer vs. imperativer Ansatz

Es gibt zwei Ansätze zur Automatisierung der Infrastruktur: deklarativ und imperativ.

Bei einem deklarativen Ansatz müssen Sie lediglich den gewünschten Endzustand der Infrastruktur definieren, ohne ins Detail zu gehen, wie dieser erreicht werden soll, sodass die Plattform selbst damit umgehen kann. Dies ist die vorherrschende Methode, da sie weniger Wissen seitens des Benutzers erfordert und idempotent ist – sie führt immer zum gleichen Ergebnis. Dies geschieht über eine deklarative Sprache wie SQL, YAML oder JSON.

Bei einem imperativen (prozeduralen) Ansatz müssen Sie bestimmte schrittweise Befehle definieren, um die erforderliche Konfiguration zu erreichen. Hier können Sie sehr detailliert vorgehen und komplexe Konfigurationen erstellen und haben dabei mehr Kontrolle über die Aufgabe. Sie benötigen jedoch ein hohes Maß an Fähigkeiten, um diese Befehle in Sprachen wie Java , Ruby oder Python zu schreiben .

Es gibt hier keine richtige oder falsche Methode, aber im Allgemeinen gilt: Wenn Sie eine große Infrastruktur aufbauen, ziehen Sie möglicherweise die Automatisierung vor, die der deklarative Ansatz bietet. Wenn Sie jedoch mit einigen Skripten beginnen möchten, funktioniert der imperative Ansatz gut.

Bereitstellung vs. Konfigurationsmanagement

Normalerweise werden IaC-Tools in solche unterteilt, die das Konfigurationsmanagement durchführen, und in Provisioning-Tools. Beide sind Schritte des Bereitstellungsprozesses, es gibt jedoch Unterschiede.

Provisioning ist der Prozess des Einrichtens einer IT-Infrastruktur: virtuelle Maschinen, Datenbanken, Zugriff auf Ressourcen und deren Bereitstellung für die Benutzer. Die Konfigurationsaufgabe wird dann von einem anderen Tool ausgeführt. Das Konfigurationsmanagement

folgt auf das Provisioning und umfasst das Installieren von Software, das Konfigurieren des gewünschten Zustands der Server und deren Wartung.

Einige IaC-Tools können beides, aber eines ist normalerweise für eine bestimmte Aufgabe besser geeignet als das andere.

Veränderbare vs. unveränderliche Infrastruktur

Tools können sich auch darin unterscheiden, welche Art von Infrastruktur sie aufbauen: veränderlich oder unveränderlich. Der Wechsel von einem zum anderen ist kostspielig und betriebsintensiv, also überlegen Sie sich Ihre Anforderungen sorgfältig.

Eine veränderliche Infrastruktur kann geändert werden, um den Geschäftsanforderungen zu entsprechen. Sie können problemlos Updates an der vorhandenen Version durchführen, Patches anwenden und skalieren. Dies kann zwar praktisch sein, aber jedes Upgrade gefährdet Ihre Betriebssicherheit. Außerdem kann dies einen der IaC-Zwecke zunichte machen – die Konsistenz.

Eine unveränderliche Infrastruktur kann nach der Bereitstellung nicht mehr geändert werden. Wenn Sie Änderungen daran vornehmen möchten, müssen Sie sie durch eine neue Version ersetzen. Da die Versionen unabhängig sind, können Sie problemlos ein Rollback durchführen, Fehler verfolgen und Konsistenz und Vorhersehbarkeit genießen.

Unveränderliche Infrastrukturen gelten als bevorzugte Methode, da sie tatsächlich alle Vorteile von IaC bieten.

Lassen Sie uns unter Berücksichtigung aller Aspekte einige beliebte IaC-Tools überprüfen.

Vergleich von Infrastructure-as-Code-Tools

Wir haben die fünf beliebtesten Plattformen zusammengestellt, auf die Sie bei Ihrer eigenen Recherche stoßen werden, sie verglichen und erklärt, warum Sie die eine oder die andere vielleicht bevorzugen.

Terraform – Provisioning für jede Cloud mit einer einzigartigen Sprache

Terraform ist ein Open-Source-Tool, das einen deklarativen Ansatz verfolgt und seine eigene Sprache Hashicorp Configuration Language (HCL) verwendet. HCL basiert auf Go und gilt als eine der am einfachsten zu erlernenden Sprachen für IaC. Terraform verfügt auch über ein CDK , das die Verwendung von Typescript , Python, Java, C# und Go ermöglicht .

Alle Cloud-Anbieter werden unterstützt . Mit Terraform können Sie dieselbe Konfiguration für mehrere Cloud-Anbieter verwenden. Und da sich heute viele Organisationen für das Hybrid-Cloud-Modell entscheiden , kann Terraform ohne weiteres als das beliebteste IaC-Tool bezeichnet werden.

Bereitstellungstool . Terraform kann sowohl Bereitstellung als auch Konfigurationsmanagement, ist aber von Natur aus ein Bereitstellungstool, das APIs von Cloud-Anbietern verwendet, um Zugriffe je nach erforderlichen Ressourcen zu verwalten. Und da es die Orchestrierung neuer Infrastrukturen problemlos handhabt, ist es besser dafür geeignet, unveränderliche Infrastrukturen zu erstellen, die Sie vollständig ersetzen müssen, um Änderungen vorzunehmen.

Statusverwaltung. Terraform verwendet Statusdateien, um Infrastrukturressourcen zu verwalten und Änderungen zu verfolgen. Statusdateien zeichnen alles auf, was Terraform erstellt, sodass Sie leicht darauf zugreifen können.

Kommerzielle Version . Terraform hat kostenpflichtige Editionen , die Preise werden jedoch nach Kontaktaufnahme mitgeteilt. Im Allgemeinen bieten kommerzielle Editionen besseren Support und zusätzliche Funktionen wie Prüfprotokolle und Teamverwaltung.

Terraform wird oft als naheliegende Wahl für ein IaC-Tool angesehen und ist bei größeren Organisationen beliebt, die den Lernprozess seiner einzigartigen Sprache unterstützen können.

AWS CloudFormation – Bereitstellung für AWS

CloudFormation ist ein kostenlos angebotener AWS-Dienst. Für seinen deklarativen Ansatz verwendet er JSON und YAML. Er verfügt auch über ein CDK zur Unterstützung der Bereitstellung in TypeScript, Python, Java, .NET und Go.

Stacks . Zur Verwaltung von Zuständen verwendet CloudFormation das Konzept von Stacks – Sammlungen von AWS-Ressourcen, die grundsätzlich das Aufrufen von Vorlagen aus anderen Vorlagen ermöglichen. Vorlagen können wiederverwendet und in mehreren Umgebungen repliziert werden.

AWS-Support . CloudFormation deckt von AWS bereitgestellte Dienste und Funktionen ab. Da es über eine Funktion für benutzerdefinierte Ressourcen verfügt, können Sie CloudFormation technisch gesehen zum Bereitstellen von Infrastrukturen in anderen Clouds verwenden. Aber es ist sicherlich nicht so einfach.

Für Unternehmen, die hauptsächlich mit AWS-Ressourcen arbeiten, ist CloudFormation ein solides Bereitstellungstool.

Ansible – Konfigurationsmanagement mit einfacher Syntax

Ansible wurde 2015 von RedHat übernommen und ist ein Open-Source-Konfigurationsmanagement-Tool, das in Python geschrieben ist und jede Sprache unterstützt, die JSON zurückgeben kann. Es ist also relativ einfach zu erlernen. Ansible verwendet eine agentenlose Architektur, d. h. es sammelt Daten von Computern, ohne eine Software (einen Agenten) zu installieren, die diese Daten auf jeden Computer überträgt, von dem die Daten benötigt werden. Stattdessen benötigt es eine SSH-Verbindung (Secret Shell), um auf Clientsysteme zuzugreifen. Eine agentenlose Architektur ist relativ einfach einzurichten.

Konfigurationsverwaltung . Ansible wird normalerweise in Kombination mit einer Bereitstellungslösung wie Terraform verwendet. Es verwendet einen imperativen Ansatz, bei dem Sie die Infrastruktur in YAML definieren. Ansible verfügt über Blaupausen mit vorgefertigtem Code und Ad-hoc-Befehlen namens Ansible Playbooks.

Code-Repository. Ansible verfügt über ein Repository mit von der Community erstellten Modulen namens Ansible Galaxy . Derzeit gibt es fast 3.000 Module, mit denen Sie Ihr Projekt einfach automatisieren können.

Kommerzielle Version . Ansible verfügt über ein kommerzielles Tool namens Ansible Automation Platform (früher Ansible Tower), dessen Preis sich nach der Anzahl der Knoten richtet. Sie können zwei Editionen davon prüfen und Ansible hier bezüglich der Preise kontaktieren . Es gibt auch eine kostenlose 60-Tage-Testversion.

Ansible ist ein großartiges traditionelles Konfigurationsverwaltungstool mit einer einfachen Syntax, die das Codieren vereinfacht. Bedenken Sie auch, dass es ein ziemlich junges Tool mit schlechter Community-Unterstützung ist.

Puppet – ausgereiftes und beliebtes Konfigurationsmanagement-Tool

Puppet wurde 2005 veröffentlicht und ist ein Konfigurationsmanagement-Tool, das auf einer Server-Agent-Architektur basiert. Es verwendet einen deklarativen Ansatz und eine eigene Sprache namens PuppetDSL. Es ist ein Server-/Client-basiertes Tool, das den Status mithilfe eines Katalogs aktualisiert. Es verfügt über ein robustes Metadatenmanagement und nutzt ein System namens Hiera zum Speichern von Konfigurationsdaten. Sie können Hieradata in YAML schreiben.

Konfigurationsmanagement . Puppet ist ein Konfigurationsmanagement-Tool, das auf Instrumente wie Terraform setzt, um den Boden zu bereiten.

Code-Repository. Puppet hat ein Code-Repository namens Puppet Forge , das von der Community erstellte Module enthält, die Ansible Galaxy ähneln. Aufgrund seines Alters und der Community-Unterstützung ist es jedoch viel größer und umfasst insgesamt über 7000 Module.

Kommerzielle Version . Es gibt ein Puppet Enterprise -Angebot, das Sie auf 10 Knoten kostenlos verwenden können. Preisinformationen sind auf Anfrage erhältlich.

Puppet gilt als zuverlässige Option für längerfristige Bereitstellungen. Seine Reife und Community-Unterstützung gehören zu den besten auf dem Markt, obwohl Sie die Zeit berücksichtigen müssen, die es braucht, um seine einzigartige Sprache zu übernehmen.

Chef – robustes Konfigurationsmanagement auf Ruby

Chef ist ein weiterer Veteran auf dem Markt der Konfigurationsmanagement-Tools und unterstützt alle gängigen Cloud-Plattformen. Chef verwendet einen deklarativen Ansatz und Ruby zum Schreiben von Skripten, was nicht die einfachste Sprache ist, die man lernen kann, wenn man nicht bereits über die entsprechenden Kenntnisse verfügt. Ähnlich wie Puppet läuft es auch auf einer Master-Agent-Architektur, bei der Sie auf jedem verteilten Gerät einen Agenten installieren und eine Master-Software als zentralen Hub zur Verwaltung dieser Agenten verwenden.

Konfigurationsmanagement. Während Ansible seine Konfigurationsdateien Playbooks nennt, verwendet Chef die Kochterminologie und nennt sie Cookbooks. Während Playbooks leichter zu verstehen sind, sind Cookbooks robuster und ermöglichen die Ausführung komplexerer Aufgaben. Chef hat auch eine Komponente namens Workstation, die Ihre Konfigurationen speichert. Zur Kommunikation mit der Infrastruktur können Sie auch das Knife-Befehlstool verwenden.

Kommerzielle Version . Es gibt einige Optionen für das Chef Enterprise-Abonnement, das Zugriff auf zertifizierte Profile für Compliance-Zwecke, 24/7-Support und Expertenhilfe bietet. Wie üblich können Sie sie direkt kontaktieren, um Preisdetails zu erfahren.

Chef ist eine flexible Lösung für Programmierer, die mit Ruby vertraut sind, mehr Flexibilität suchen und ein Tool für komplexe Aufgaben benötigen nicole scherzinger.

Herausforderungen von Infrastructure as Code

Da IoC eine relativ neue Methode zum Betreiben einer Infrastruktur ist, bringt es einige Herausforderungen mit sich, vor allem in Bezug auf die Akzeptanz. Sehen wir uns diese einmal an.

Sicherheits-Upgrades

So wie IaC optimierte Prozesse einführt, sollte es auch besser kontrolliert werden. Herkömmliche Sicherheitstools, die Sie für Ihre aktuellen Konfigurations- und Bereitstellungsaufgaben verwenden, können die erhöhte Dynamik von IaC möglicherweise nicht bewältigen.

Funktionsverzögerung

Es werden ständig neue Cloud-Funktionen eingeführt, aber Sie können möglicherweise nicht sofort darauf zugreifen, da IaC-Anbieter Zeit brauchen, um sie zu aktualisieren. Sie sind also stark von deren Aktualisierungszyklen abhängig.

Steile Lernkurve und Adoptionsprozess

Die korrekte Implementierung von IaC erfordert Vorbereitungen in Form des Erlernens der neuen Technologie, der Koordination zwischen Teams, des Verständnisses des Umgangs mit Sicherheit und Compliance sowie der Einstellung neuer Mitarbeiter. Sie müssen in DevOps-Experten, Infrastrukturingenieure oder die Schulung Ihrer vorhandenen Mitarbeiter investieren. Vielleicht möchten Sie IaC in der Anfangsphase auslagern. Sie müssen auch einen Auditprozess einrichten, während Sie sich mit den Grundlagen vertraut machen.

Unabhängig davon wird IaC für viele Organisationen zur Norm. Je früher Sie also Ihre Infrastruktur von manuell auf automatisiert umstellen, desto besser.