Konfigurationsbasierte vs. codebasierte Automatisierung

  • Veröffentlicht

Inhalt

Konfigurationsbasierte Automatisierung

Was ist konfigurationsbasierte Automatisierung?

In der Infrastrukturverwaltung ist die konfigurationsbasierte Automatisierung die Norm. Das bedeutet, dass der gewünschte Zustand einer Infrastruktur in einer Konfigurationsdatei beschrieben wird. Wie dieser gewünschte Zustand erreicht wird, bleibt für Benutzer_innen verborgen. Das ist elegant und einfach, denn ein großer Teil der Komplexität wird verborgen. Benutzer_innen denken einfach darüber nach, welcher gewünschter Zustand erreicht werden soll. Wie dieser erreicht wird, darum muss man sich nicht kümmern.

Was sind die Vorteile von konfigurationsbasierter Automatisierung?

Die wichtigsten Vorteile sind:

  • Die Überprüfung des aktuellen Zustands und die Entscheidung, welche Schritte unternommen werden müssen, um vom aktuellen zum gewünschten Zustand zu gelangen, wird vom Automatisierungstool übernommen. Benutzer_innen müssen sich darüber keine Gedanken machen. Das ist eine enorme Vereinfachung, denn verschiedene Ist-Zustände können viele verschiedene Einzelschritte und Prozesse erfordern, um den gewünschten Zustand zu erreichen.
  • Auch um die Reihenfolge der Abläufe kümmert sich das Automatisierungstool und der Benutzer muss sich (meistens) nicht darum kümmern.

Was sind die Nachteile der konfigurationsbasierten Automatisierung?

Das Automatisierungstool die zugrundeliegende Logik zur Erzeugung eines gewünschten Zustands übernehmen zu lassen, ist praktisch. Es bedeutet aber auch, dass Benutzer_innen keine Kontrolle darüber haben. Das kann unpraktisch sein:

  • Die Reihenfolge oder die Abläufe können von Bedeutung sein und lassen sich nicht in der Konfigurationsdatei festlegen. Zum Beispiel könnte es beim Deployment einer Software mit einer Datenbank-, Backend- und Frontend-Komponente erforderlich sein, dass die Datenbank-Komponente in Betrieb ist, bevor Backend und Frontend deployed werden können. Ansonsten kommt es zum Absturz, da erwartet wird, dass das DB-Backend in Betrieb ist. Jede Logik dieser Art, die das Automatisierungstool nicht kennt, kann auch nicht in der Konfigurationsdatei definiert werden und könnte einige Hacks erfordern bzw. einfach nicht mit einem konfigurationsbasierten Automatisierungstool möglich sein.
  • Andere Arten von Logik können bei der Festlegung eines Deployment-Prozesses erforderlich oder nützlich sein. So könnten beispielsweise mehrere Versionen einer Bibliothek verwendet werden. Zusätzlich soll eine bestimmte präferierte Reihenfolge festgelegt werden – was mit einem konfigurationsbasierten Tool oft nicht möglich ist. Definitionen von Fallbacks sind ebenfalls etwas, das mit einem konfigurationsbasierten Tool nicht möglich ist – oder es kann möglich sein, was dann bereits eine Art „hybriden“ Ansatz darstellt, bei dem das konfigurationsbasierte Tool eine gewisse Logik zulässt.

Darüber hinaus gibt es eine Reihe gängiger und nützlicher Funktionen, die in einem codebasierten Automatisierungstool sehr einfach zu implementieren sind, bei Verwendung eines konfigurationsbasierten Automatisierungstools jedoch ein zusätzliches Tool erfordern, z.B:

  • Zeitplanung, Benachrichtigungen, benutzerdefinierte Fehlerbehandlung
  • Dynamische Erstellung von Konfigurationen, z. B. das Abrufen der IP-Adresse einer VM, auf der eine Software bereitgestellt werden soll, aus einem VM-Verwaltungstool oder das Abrufen des Domänennamens für einen Dienst aus einer Datenbank.

Configuration Drift – Konfigurationsabweichung

Ein großer Nachteil von konfigurationsbasierten Automatisierungswerkzeugen ist die Schwierigkeit, eine große Anzahl von Konfigurationsdateien zu verwalten, die sich schnell vermehren.

Die möglichen Permutationen von Konfigurationsoptionen sind riesig, selbst bei einfachen Systemen, die nur wenig Konfiguration benötigen. Dies führt zu vielen Konfigurationsdateien mit kleinen Unterschieden, die oft über eine große Anzahl von Orten verteilt sind. So kann beispielsweise jede_r Entwickler_in mehrerer solcher Konfigurationsdateien für verschiedene verwendete Umgebungen haben, die über mehrere Projekte im Versionskontrollsystem verteilt sind.

Jede Änderung in der Deployment-Konfiguration bedeutet, dass einige Änderungen möglicherweise auf alle oder nur auf eine bestimmte Untergruppe dieser Dateien angewendet werden müssen – was schwierig zu verwalten ist, wenn es viele davon gibt. Es ist auch schwierig, die Dateien zu identifizieren, die editiert werden müssen. Die Mühe und der Zeitaufwand, die in die Pflege dieser Dateien investiert werden, führen häufig zu Initiativen für eine vernünftige Verwaltung, oft durch die Automatisierung der Erstellung und Änderung von Konfigurationsdateien. Das erfordert jedoch die Einführung eines weiteren Tools oder mehrerer Tools, um dies zu ermöglichen. Oftmals wird dadurch der Zweck verfehlt, da eine zusätzliche Komplexitätsebene eingeführt wird – obwohl es einfacher gewesen wäre, von Anfang an ein codebasiertes Tool zu verwenden.

Codebasierte Automatisierung

Was ist codebasierte Automatisierung?

Codebasierte Automatisierung ist genau das, wonach es klingt: Automatisierung mit Code. Sie verwendet Code, um einen Prozess zu definieren, der von einem aktuellen Zustand zu einem gewünschten Zustand führt.

Programmierung ist im Grunde genommen codebasierte Automatisierung. Ich spreche hier jedoch von codebasierten Automatisierungswerkzeugen, die wie konfigurationsbasierte Automatisierungswerkzeuge einige Funktionen rund um den Code bereitstellen, um die Automatisierung mithilfe von Code einfacher zu machen.

Was sind die Vorteile der codebasierten Automatisierung?

Die Vorteile der codebasierten Automatisierung sind:

  • Kontrolle über jedes kleinste Detail
  • Die Möglichkeit, sowohl den gewünschten Zustand als auch die spezifischen dahin Schritte zu definieren

Codebasierte Automatisierung kann natürlich auch Konfigurationsdateien verwenden, so dass es möglich ist, den gewünschten Zustand auf eine sehr strukturierte Weise zu definieren und gleichzeitig die volle Kontrolle darüber zu behalten, wie dieser gewünschte Zustand erreicht wird. Alles, was mit konfigurationsbasierter Automatisierung erreicht werden kann, kann auch mit codebasierter Automatisierung erreicht werden – und noch mehr.

Darüber hinaus lassen sich mit der codebasierten Automatisierung viele Aufgaben erledigen, die mit der konfigurationsbasierten Automatisierung nicht möglich sind, z. B. Zeitplanung, Benachrichtigungen, benutzerdefinierte Fehlerbehandlung usw. Allerdings muss ich darauf hinweisen, dass es bad practice ist, so etwas wie eine Fehlerbenachrichtigung in ein Stück Code einzubinden, das einen automatisierten Prozess definiert, da es eine „Meta-Funktion“ ist, die nicht in die Definition des Prozesses gehört.

Automatisierungswerkzeuge sowohl für die konfigurations- als auch für die codebasierte Automatisierung bieten oft Funktionen an, um solche Dinge hinzuzufügen, getrennt von der Automatisierung selbst.

Was sind die Nachteile der codebasierten Automatisierung?

Der Nachteil ist, dass es mehr Aufwand ist. Um die Komplexität, die Sie bei der konfigurationsbasierten Automatisierung ausblenden, müssen sich Benutzer_innen wieder kümmern.

Was ist also zu tun? Wie kann ich das Beste aus beiden Welten herausholen?

Es ist möglich, beide Ansätze zu einem Best-of-Breed-Ansatz namens dynamisches Konfigurationsmanagement zu kombinieren. Dieser Ansatz vereint die Verwendung einer Konfigurationsdatenbank mit codebasierter Automatisierung, um ephemere Konfigurationen zu erstellen, die je nach Konfiguration nicht in Dateien gespeichert werden müssen.

Was ist dynamisches Konfigurationsmanagement?

Dynamisches Konfigurationsmanagement ist die Idee, dass Konfigurationen flüchtig sind und daher dynamisch erstellt werden sollten. Das heißt, zum Zeitpunkt der Nutzung in der erforderlichen Konstellation. Das dynamische Konfigurationsmanagement trennt Zustand und Prozess.

Wie man dynamisches Konfigurationsmanagement für die Automatisierung nutzt

Die grundlegenden Elemente, die für die Nutzung des dynamischen Konfigurationsmanagements für die Automatisierung benötigt werden, sind:

  • Eine Konfigurationsdatenbank, die flüchtige Konfigurationen enthält, sowie ein Konfigurationsschema.
  • Ein gutes Konfigurationsschema, das definiert, welche Konfigurationsoptionen verfügbar sind.
  • Ein codebasiertes Automatisierungswerkzeug wie Cloudomation Engine, das in die Konfigurationsdatenbank integriert ist und es erlaubt, die Logik zu definieren, um vom aktuellen Zustand zum gewünschten Zustand zu gelangen.

Der Benutzer muss dann wiederum nur den gewünschten Zustand definieren, unterstützt durch vordefinierte Optionen, die in der Konfigurationsdatenbank festgelegt sind. Die Code-basierte Automatisierung erzeugt dann im Eiltempo den gewünschten Zustand. Erforderliche Anpassungen können durch Optimieren des Codes vorgenommen werden.

Der Wert von Templates

Ein gutes Automatisierungssystem stellt Ihnen Templates zur Verfügung, so dass Sie schnell mit sinnvollen Standardeinstellungen beginnen können. Sie können dann bei Bedarf Ihre Anpassungen vornehmen. Der Hauptvorteil: Es wird nie einen Fall geben, den Sie nicht umsetzen können. Der größte Nachteil: Die Umsetzung komplexer Anpassungen kann mit viel Aufwand verbunden sein.

Nebenbei bemerkt: warum die konfigurationsbasierte Automatisierung in der Infrastrukturautomatisierung üblich ist.

Templates können nur für bestimmte Anwendungsfälle bereitgestellt werden. Je spezifischer der Anwendungsfall ist, desto besser ist die Vorlage. Das ist der Grund, warum die konfigurationsbasierte Automatisierung in der Infrastrukturautomatisierung so weit verbreitet ist, während sie in anderen Automatisierungsarten eher unüblich ist. Die Automatisierung von Infrastrukturen ist ein ziemlich gut beschriebener Anwendungsfall. Es ist möglich, Werkzeuge zu entwickeln, die eine Logik implementieren, um viele gewünschte Zustände aus Konfigurationsdateien zu erzeugen, da es Standards gibt und die Anzahl der Optionen für gewünschte Zustände überschaubar ist. Dies ist bei den meisten anderen Anwendungsfällen der Automatisierung nicht der Fall.

Fazit

  • Die konfigurationsbasierte Automatisierung ist einfach zu starten und zu verwenden, kann aber bei größeren und komplexeren Infrastrukturen mühsam zu instandhalten sein.
  • Codebasierte Automatisierung ist viel flexibler, erfordert aber mehr Aufwand bei der Einrichtung (und kann auch mühsam zu verwalten sein, wenn der Code schlecht geschrieben ist).
  • Sowohl für die konfigurations- als auch für die codebasierte Automatisierung gibt es viele Tools, die dabei helfen, die einzelnen Herausforderungen zu bewältigen, wie z. B. die Pflege und Verteilung von Konfigurationsdateien oder die Verwaltung der Codequalität für die Prozessautomatisierung. Solche zusätzlichen Werkzeuge erhöhen jedoch auch die Komplexität.
  • Die Automatisierung mit dynamischem Konfigurationsmanagement kombiniert das Beste aus beiden Ansätzen. Sie ermöglicht es Ihnen, jedes Detail zu definieren, wie ein gewünschter Zustand erzeugt wird, und gleichzeitig eine einfache Nutzung zu ermöglichen, indem gewünschte Zustände als Konfigurationen definiert werden, die einfach in einer Konfigurationsdatenbank gepflegt werden können.
    Für kleine Infrastrukturen mit geringer bis mittlerer Komplexität ist die konfigurationsbasierte Automatisierung definitiv der richtige Weg.
  • Für größere oder komplexere Infrastrukturen werden oft codebasierte Ansätze verwendet, weil es keine Alternative gibt. Für solche Konstellationen kann die Verwendung eines dynamischen Konfigurationsmanagements mit codebasierter Automatisierung von großem Nutzen sein.

Info

Auch wenn der konzeptionelle Ansatz für die Automatisierung wichtig ist, ist es mindestens ebenso wichtig, Werkzeuge zu wählen, die ausgereift sind und ihre konzeptionellen Ansätze gut umsetzen. Die Verwendung eines schlechten Konfigurationsmanagement-Tools mit handgeschriebenem Code wird höchstwahrscheinlich keine guten Ergebnisse liefern und ist mühsam zu warten. Die Verwendung eines ausgereiften konfigurationsbasierten Automatisierungswerkzeugs mit einem guten Ökosystem von unterstützenden Werkzeugen zur Verwaltung kann sehr gute Ergebnisse liefern. Meine Empfehlung: Überlegen Sie sich Ihre Anforderungen, wählen Sie einen Ansatz und machen Sie sich dann auf die Suche nach einem guten Tool, das diesen Ansatz umsetzt.

Jetzt den Cloudomation-Newsletter abonnieren

Werden Sie Cloudomation-Insider. Immer am Ende des Monats neue News zum Thema „Cloud Development Environments“ und „DevOps“ erhalten. 




    Margot Mückstein

    CEO & co-founder von Cloudomation