Infrastructure as Code (IaC) ist ein Prozess, der die Bereitstellung und Verwaltung von Cloud-Ressourcen automatisiert. IaC-Software nimmt einige Eingabeskripte entgegen, die den gewünschten Zustand beschreiben, und kommuniziert dann mit dem/den Cloud-Anbietern, typischerweise über eine API, um die Realität an den gewünschten Zustand anzupassen.
In diesem Artikel werden die wichtigen Aspekte von IaC behandelt, beginnend mit der Entstehung (dh welche Probleme es gelöst hat), gefolgt von seinen Vorteilen und schließlich der Integration von IaC in Ihr Unternehmen.
Es gab einmal eine Zeit, in der ein Unternehmen Software betreiben wollte und die einzige Möglichkeit darin bestand, physische Ausrüstung und einen Internetzugang bei einem Netzwerkanbieter zu bestellen. Hierbei handelte es sich um Rechenzentren vor Ort, bei denen Unternehmen Server und Netzwerkgeräte Wochen oder sogar Monate im Voraus auf der Grundlage des erwarteten Datenverkehrs bestellen und diese dann manuell vor Ort bereitstellen mussten. Dies erforderte einen physischen Standort mit Kühlsystemen und unzählige Stunden für die Durchführung von Installations- und Wartungsarbeiten.
Doch dann kamen öffentliche Rechenzentren auf, die die Server anderer Unternehmen verwalten konnten.
Der Betrieb des Rechenzentrums wurde zu einem eigenständigen Unternehmen mit großen Vorteilen für die Kunden:
Das Aufkommen der Virtualisierung brachte eine weitere Entwicklung mit sich: die Cloud. In einer öffentlichen (oder privaten) Cloud befindet sich die physische Ausrüstung im Rechenzentrum des Cloud-Anbieters, was weiterhin eine manuelle Handhabung erfordert. Virtuelle Server wurden für Unternehmen über Webschnittstellen verfügbar, sodass sie Server und andere Ressourcen in Sekundenschnelle (bzw. Minuten bei den größten Ressourcen) bereitstellen konnten. Obwohl die Virtualisierung zu diesem Zeitpunkt eine sehr schnelle Bereitstellung ermöglichte, erfolgten die meisten Vorgänge noch manuell.
Eine letzte Entwicklung kam mit der Einführung von IaC-Konzepten und -Tools. Sobald die Cloud über eine API zugänglich war, konnte die Bereitstellung und Verwaltung von Ressourcen durch Skripte und automatisierte Tools statt durch Menschen erfolgen. Sobald also die physische Ausrüstung installiert und angeschlossen ist (immer noch manuelle Vorgänge), kann alles andere automatisiert werden, einschließlich der Bereitstellung aller virtuellen Hardwareressourcen.
Die Möglichkeit, programmgesteuert auf die öffentliche Cloud zuzugreifen, ermöglichte den Aufstieg von IaC. Vor der Einführung von IaC mussten Systemingenieure manuell Webschnittstellen nutzen, um Ressourcen bereitzustellen und zu konfigurieren. Bei IaC wird die Bereitstellung und Konfiguration von Ressourcen in Skripten beschrieben, die von Tools gelesen werden, die mit der Public-Cloud-API kommunizieren, um sicherzustellen, dass die Realität dem gewünschten Zustand entspricht.
Wie oben erwähnt, verwenden IaC-Tools Eingaben aus Skripten; Diese Skripte werden von Menschen geschrieben und beschreiben einen gewünschten Zustand für die gegebenen Cloud-Ressourcen. Die Tools kommunizieren über seine API mit dem Cloud-Anbieter, um Ressourcen zu erstellen, zu aktualisieren oder zu löschen, sodass die Realität mit dem in den Eingabeskripten beschriebenen gewünschten Zustand übereinstimmt. Im Vergleich zur manuellen Bereitstellung und Konfiguration bietet IaC eine einzige Quelle der Wahrheit (die Eingabeskripte) und eliminiert so die meisten menschlichen Fehler.
Das Ausführen eines IaC-Skripts ist ein wiederholbarer Vorgang, der jedes Mal genau das gleiche Ergebnis liefert. Dies kann in vielerlei Hinsicht hilfreich sein, zum Beispiel bei:
Die IaC-Skripte können in einem Git-Repository gespeichert werden, sodass Sie einen Verlauf Ihrer Infrastruktur erhalten. Da es sich bei den Skripten lediglich um Text handelt, ist es als zusätzlicher Bonus möglich, Versionen zu vergleichen, um zu sehen, was hinzugefügt, geändert oder entfernt wurde.
Ein weiterer Vorteil besteht darin, dass IaC es einem Junior-Systemadministrator oder einer technisch nicht versierten Person ermöglicht, eine ganze Arbeitslast ohne technische Kenntnisse zu erstellen. Wenn Sie Ihr Cloud-Konto richtig konfigurieren, können Sie einem Benutzer mit eingeschränkten Berechtigungen sogar erlauben, eine solche Arbeitslast über IaC-Tools zu erstellen, selbst wenn der Benutzer nicht über die Rechte zum direkten Erstellen der Ressourcen verfügt. Sie können auch zusätzliche Tools und Vorlagen nutzen, um sicherzustellen, dass Sicherheitsrichtlinien früher implementiert werden, um das Risiko von Sicherheitslecks und Fehlkonfigurationen durch denjenigen zu begrenzen, der den IaC-Stack instanziiert.
Einer der größten Vorteile von IaC gegenüber manuellen Vorgängen ist neben der exakten Wiederholbarkeit die Skalierbarkeit. Tatsächlich müssen Sie die IaC-Skripte nur einmal schreiben und Workloads können dann nahezu augenblicklich beliebig oft instanziiert werden. Indem Sie schließlich mehr Zeit damit verbringen, die richtigen Berechtigungen in Ihre IaC-Skripte zu integrieren, können Sie den typischen Nachteil der manuellen Arbeit vermeiden, die dazu führt, dass zu viele Berechtigungen für Rollen und Ressourcen erteilt werden.
Normalerweise möchten Sie einige Vorgänge automatisieren, die Sie derzeit manuell ausführen. Der erste Schritt besteht also darin, dass Sie die manuellen Schritte dokumentieren, die zum Aufbau der für Ihre Arbeitslast erforderlichen Infrastruktur erforderlich sind. Dies sind die Schritte, die Sie durch IaC automatisieren werden.
Anschließend müssen Sie eine IaC-Software auswählen. Dies sollte keine schwierige Wahl sein, da es nur wenige gibt und alle drei großen Cloud-Anbieter ihre eigenen haben: Amazon Web Services bietet CloudFormation, Microsoft Azure bietet Azure Resource Manager und Google Cloud Platform bietet Google Cloud Bereitstellung Manager an. Die bekannteste herstellerunabhängige Option ist Terraform, die nicht nur die drei oben genannten Cloud-Anbieter unterstützt, sondern noch viele weitere.
Als Nächstes müssen Sie einige Skripte für das IaC-Tool Ihrer Wahl schreiben, um die von Ihnen dokumentierten manuellen Schritte zu reproduzieren. Normalerweise ist es eine gute Idee, diese im Laufe der Zeit zu testen. Mit anderen Worten: Schreiben Sie ein Stück IaC-Code, stellen Sie es bereit, testen Sie es, und wenn Sie zufrieden sind, dass es gut aussieht, fahren Sie mit dem nächsten Stück Code fort. Wenn Sie alles auf einmal schreiben, kann es zu großen Fehlern in Ihrem Code kommen, die Sie erst nach vielen Stunden Arbeit entdecken, was bedeutet, dass Sie möglicherweise einen erheblichen Teil Ihrer Skripte neu schreiben müssen.
Darüber hinaus liegt das Thema Shift Left weiterhin im Trend. Das bedeutet im Wesentlichen, dass Sie so früh wie möglich mit dem Testen beginnen und sich auf die Vermeidung von Problemen konzentrieren (anstatt sie erst zu erkennen und zu lösen, nachdem sie aufgetreten sind). Die Idee ist, dass sich dadurch die Gesamtqualität und Sicherheit verbessern.
Idealerweise sollte diese Verschiebung nach links die Automatisierung so weit wie möglich nutzen. Tatsächlich stehen verschiedene Tools zur Automatisierung bestimmter Aspekte des Schreibens von IaC-Skripten zur Verfügung, beispielsweise Sicherheit und Compliance. Diese Tools scannen den Code vor jeder Bereitstellung, um das Auftreten von Problemen wie Fehlkonfigurationen, übermäßig freizügigen Einstellungen und bekannten Schwachstellen zu reduzieren. Einige diesbezügliche Anwendungsfälle stehen Ihnen hier zur Einsichtnahme zur Verfügung .
Um IaC richtig nutzen zu können, muss die Person, die die IaC-Skripte schreibt, über umfassende Kenntnisse der verwendeten Cloud-Plattform verfügen. Daher ist es ratsam, sicherzustellen, dass die kritischsten Teile Ihrer IaC-Arbeit von erfahrenen DevOps-Ingenieuren erledigt werden.
Normalerweise ist es eine gute Idee, ein Team erfahrener DevOps-Ingenieure (oder mindestens einen) mit der Leitung Ihrer IaC-Bemühungen zu beauftragen. Dieses Team wird in der Lage sein, sich auf Best Practices und Sicherheit zu konzentrieren und somit eine Blaupause für weitere Nachwuchsingenieure bereitzustellen. Es wird auch in der Lage sein, generische Module zu schreiben, die in IaC-Skripten innerhalb Ihrer Organisation wiederverwendet werden können, wodurch vorab geprüfte Bausteine für jüngere Ingenieure leicht verfügbar sind.
Wenn strenge Sicherheit wichtig ist und dies höchstwahrscheinlich der Fall ist, kann dieses Team auch für die Überprüfung öffentlich verfügbarer Module und Software verantwortlich sein. Es ist ziemlich einfach, einige IaC-Module online zu finden; Terraform verfügt sogar über ein offizielles Repository dafür. Allerdings entsprechen solche öffentlich verfügbaren Module möglicherweise nicht den Sicherheitsstandards, die in Ihrer Organisation oder Ihrem Projekt gelten. Daher ist es wichtig sicherzustellen, dass Ihr IaC-Team nur geprüfte Module verwendet.
Darüber hinaus wäre es eine gute Idee, wenn Ihr SecOps-Team mit Ihrem DevOps-Team zusammenarbeitet. Durch eine solche Zusammenarbeit können DevOps-Prozesse frühzeitig im Projekt hinsichtlich der Sicherheit optimiert werden. Fehler, die nach einer Produktionsbereitstellung entdeckt werden, können insbesondere im Hinblick auf die Kundenbeziehungen sehr kostspielig sein. Die Sicherstellung einer hohen Qualität zu Beginn des Prozesses trägt wesentlich dazu bei, eine solche Katastrophe zu vermeiden.
Obwohl es sich um eine recht neue Entwicklung handelt, sollte IaC heutzutage ein wesentlicher Bestandteil der Bereitstellungsstrategie jeder Organisation sein, die Cloud-Ressourcen benötigt, und sollte zumindest auf die Integration in Ihre Teams geprüft werden. Unabhängig von der Größe Ihres Unternehmens möchten Sie höchstwahrscheinlich, dass IaC zumindest einen Teil Ihrer Arbeitslasten verwaltet.