Laut der Umfrage zum Accelerate State of DevOps 2019-Bericht gaben 80% der Befragten an, dass die von ihnen unterstützte primäre Anwendung oder der von ihnen unterstützte primäre Dienst auf einer Art Cloud-Plattform gehostet wurde. 50% der Befragten gaben an, dass ihre primäre Anwendung in der öffentlichen Cloud gehostet wurde.
Why Infrastructure as Code?
Wenn wir zurückblicken, als Sie einen Server wollten, würden Sie traditionell ein Ticket erheben, und jemand aus dem Ops-Team würde eine VM-Instanz erstellen oder einen physischen Server bestellen. Dies kann mithilfe von Skripten, Zeigen und Klicken oder sogar manueller Installation erfolgen.
Und dann würde es mit jeder Anfrage mehr VMs für DNS, Mail, Datenbanken usw. geben. Und dann gab es kontinuierliche Updates für die Betriebssysteme, Webserver, JVMs und alles andere. Im Laufe der Zeit hatten sie leicht unterschiedliche Konfigurationen (Konfigurationsdrift), was zu Schneeflockenservern führte. Und wenn etwas kaputt ging, war es eine Herausforderung zu verfolgen, welche Änderungen vorgenommen wurden.
Dies war immer noch akzeptabel, solange es nur wenige und langlebige Server gab.
Eine große Veränderung geschah mit der Ankunft von Cloud-Service Unternehmen wie AWS. Anstatt in Hardware und Rechenzentren zu investieren, haben viele Unternehmen begonnen, ihre Anwendungen in die Cloud zu verlagern. In der Cloud können Sie einen Server in wenigen Minuten bereitstellen, was früher Stunden oder sogar Tage dauern würde.
Um eine optimale Leistung und Verfügbarkeit zu gewährleisten, müssen Sie möglicherweise mehr Instanzen bereitstellen, um die Anforderungen zu erfüllen. Und später müssen Sie sie möglicherweise beenden, um Kosten zu sparen. Wenn Sie stundenweise bezahlen, müssen Sie möglicherweise jeden Tag nach oben oder unten skalieren. Dies mehrmals am Tag manuell zu tun, ist eindeutig eine Herausforderung.
Das Erfassen der Schritte zum Bereitstellen oder Beenden von Instanzen und anderen Infrastrukturkomponenten im Code ermöglicht die Automatisierung. Die Automatisierung bei der Bereitstellung von Clouds und Infrastrukturen kann dazu beitragen, Werte schneller und zuverlässiger bereitzustellen.
What is Infrastructure as Code?
Infrastruktur als Code (IaC) ist eine Infrastrukturautomatisierung unter Verwendung von Prinzipien und Praktiken der Softwareentwicklung.
Die Idee ist, dass Sie Ihre Infrastruktur wie Software behandeln und dann Code schreiben, testen und ausführen, um Ihre Infrastruktur zu definieren, bereitzustellen, zu aktualisieren und zu zerstören. Sie schreiben Code, um Ihre Server, Datenbanken, Netzwerke, Protokolle, Anwendungsbereitstellung und -konfiguration zu verwalten. Wenn Sie Änderungen an Ihrer Infrastruktur vornehmen möchten, nehmen Sie Änderungen am Code vor, testen ihn und wenden ihn dann auf Ihre Systeme an.
Benefits
Infrastruktur als Code bietet erhebliche Vorteile gegenüber der manuellen Bereitstellung:
Selbstbedienung
Da die Infrastruktur als Code definiert ist, kann der gesamte Prozess und die Bereitstellung automatisiert und von jedem in der Datenbank gestartet werden DevOps Mannschaft. Benutzer der Infrastruktur erhalten die Ressourcen, die sie benötigen, wenn sie sie benötigen.
Idempotenz
Idempotent zu sein bedeutet, dass Sie den gewünschten Status definieren. Unabhängig davon, wie oft Sie das Skript ausführen, ist das Ergebnis dasselbe. Es überprüft den aktuellen Status und den gewünschten Status und wendet nur die Änderungen an, die erforderlich sind. Dies kann mit Bash-Skripten äußerst schwierig sein.
Tools wie Ansible funktioniert Terraform haben eingebaute Funktionen, um Ihren Code idempotent zu machen.
Reduzierte Kosten
Reduziert den Zeit- und Arbeitsaufwand für die Bereitstellung, viel weniger als bei der manuellen Bereitstellung.
Schnellere Softwarebereitstellung
Durch die schnelle Bereitstellung der Infrastruktur für Entwicklung, Test und Produktion können Sie Software viel schneller bereitstellen. Da der Bereitstellungsprozess automatisiert ist, ist er auch konsistent und wiederholbar.
Selbstdokumentierend
Der Status der Infrastruktur wird in Code definiert, der für jeden leicht lesbar ist.
Versionskontrolliert
Änderungen an den Produktionssystemen gelten traditionell als riskant. Aber dann ist eine Veränderung unvermeidlich. Möglicherweise müssen Sie eine neue Datenbank hinzufügen, wenn Sie eine neue Funktion hinzufügen. Möglicherweise müssen Sie dem Cluster neue Server oder Speicher hinzufügen. Infrastruktur als Code reduziert den Aufwand und das Risiko von Änderungen an der Infrastruktur.
Sie können Ihre Quelldateien in der Versionskontrolle einchecken, dh Sie können alle an der Infrastruktur vorgenommenen Änderungen verfolgen und bei einem Fehler schnell zur vorherigen Version zurückkehren.
Validierung und Prüfung
Infrastruktur als Code ermöglicht das kontinuierliche Testen und Anwenden kleiner Änderungen. Da alles Code ist, können Sie mithilfe statischer Analysen und automatisierter Tests nach Fehlern suchen.
Verbesserte Sicherheit
Durch die Umstellung auf Infrastruktur als Code können Sie die Sicherheit von Anfang an einbetten und dann Änderungen zuverlässig und sicher anwenden.
Infrastructure as Code tools
Obwohl viele Tools verfügbar sind, ist die Auswahl eines Tools möglicherweise nicht einfach. Im Folgenden sind einige der Überlegungen aufgeführt, die Sie möglicherweise hilfreich finden:
Konfigurationsmanagement vs. Bereitstellungstools
Im Allgemeinen fallen die verfügbaren Tools in zwei Kategorien:
- Konfigurationsverwaltungstools.
- Bereitstellungstools
Konfigurationsverwaltungstools
Konfigurationsverwaltungstools dienen zum Verwalten von Benutzern sowie zum Installieren und Verwalten von Software und Tools auf vorhandenen Servern. KüchenchefIn, Marionette, Ansibleund SaltStack sind in erster Linie Konfigurationstools.

Sie können Konfigurationsverwaltungstools verwenden, um die Software auf Servern zu installieren und zu aktualisieren.
Bereitstellungstools
Terraform, WolkenbildungOpenStack Heat hingegen sind Bereitstellungstools, mit denen Server, Datenbankserver, Load Balancer, Warteschlangen, Subnetze, Firewalls und alle anderen Komponenten Ihrer Infrastruktur erstellt werden. Diese Tools führen API-Aufrufe an Anbieter durch, um die erforderliche Infrastruktur zu erstellen.

Veränderliche oder unveränderliche Infrastruktur
Die veränderbare Infrastruktur kann nach ihrer Bereitstellung geändert werden. Chef, Ansible, Puppet & SaltStack dienen zum Installieren oder Aktualisieren der Software auf vorhandenen Servern. Dies kann während der Lebensdauer eines Servers viele Male passieren. Nach vielen Updates unterscheidet sich jeder Server wahrscheinlich ein wenig von anderen, was zu einer Verschiebung der Konfiguration führt. Beispielsweise funktionieren einige Änderungen, die auf Testservern problemlos funktionieren, möglicherweise nicht auf Produktionsservern.
Werkzeuge wie Terraform und Wolkenbildung dienen dazu, jedes Mal einen neuen Server aus einem Maschinen- oder Container-Image zu erstellen. Wenn die Server aktualisiert werden müssen, ersetzen Sie sie durch neue Server. Wenn die neuen Server aktiv sind, können Sie die alten Server beenden. Jede Bereitstellung verwendet ein unveränderliches Image, um einen Server zu erstellen, wodurch Konfigurationsdrift vermieden wird. Dies kann jedoch etwas langsam sein.
Imperative vs. deklarative Werkzeuge
Imperative Tools ähneln der Skripterstellung. Sie listen die Schritte auf, die unternommen werden müssen, um zum gewünschten Status zu gelangen. Mit deklarativen Werkzeugen können Sie den Endzustand angeben, und das Werkzeug arbeitet die Schritte aus, um diesen Zustand zu erreichen.
Während Chefkoch in erster Linie ein zwingendes Werkzeug ist, verwendet Ansible einen hybriden Ansatz und unterstützt sowohl zwingende als auch deklarative Techniken.
Terraform, CloudFormation, Puppet, OpenStack Heat und SaltStack gehören alle zur Kategorie der deklarativen Tools, in der Sie den gewünschten Endzustand deklarieren.
Mehrere Werkzeuge zusammen verwenden
Obwohl jedes dieser Tools für sich verwendet werden kann, besteht ein gängiger Ansatz darin, sie zusammen zu verwenden. Zum Beispiel können Sie verwenden Terraform Erstellen von VPCs, Subnetzen, Internet-Gateways, Load Balancern und VMs und anschließendes Konfigurieren und Bereitstellen von Diensten auf diesen Instanzen mithilfe von Ansible.
Fazit
Als Code definierte Infrastruktur bietet viele Vorteile gegenüber der manuellen Bereitstellung - sie kann versioniert, getestet, zu einer schnelleren Bereitstellung und Softwarebereitstellung geführt werden. Viele Unternehmen haben bereits begonnen, den IaC-Ansatz zum Aufbau und zur Verwaltung ihrer Infrastruktur anzuwenden.