Читать книгу Handbuch Infrastructure as Code - Kief Morris - Страница 69
Deklarative und imperative Sprachen für Infrastruktur
ОглавлениеDeklarativer Code ist nützlich, um den gewünschten Status eines Systems zu definieren – insbesondere, wenn es in den erwarteten Ergebnissen keine großen Variationen gibt. Normalerweise definieren Sie die Form der Infrastruktur, die Sie mit hoher Konsistenz wiederholen wollen.
So wollen Sie zum Beispiel normalerweise, dass alle Umgebungen, die einen Release-Prozess unterstützen, nahezu identisch sind (siehe »Auslieferungsumgebungen« auf Seite 96). Deklarativer Code ist daher gut für das Definieren wiederverwendbarer Umgebungen (oder Teilen davon, siehe das Reusable-Stack-Pattern in »Pattern: Reusable Stack« auf Seite 102). Sie können sogar in eingeschränktem Rahmen Variationen zwischen Infrastruktur-Instanzen umsetzen, die durch deklarativen Code definiert wurden, indem Sie Instanz-Konfigurationsparameter einsetzen (siehe Kapitel 7).
Aber manchmal wollen Sie wiederverwertbaren, gemeinsam nutzbaren Code schreiben, der abhängig von der Situation unterschiedliche Ergebnisse liefern kann. So schreibt das ShopSpinner-Team beispielsweise Code, der Infrastruktur für unterschiedliche Anwendungsserver erstellen kann. Manche dieser Server sind von außen zugänglich, daher benötigen sie passende Gateways, Firewall-Regeln, Routen und Logging. Andere Server sind nur intern erreichbar, daher gibt es für sie andere Verbindungs- und Sicherheitsanforderungen. Die Infrastruktur kann sich auch für Anwendungen unterscheiden, die Messaging, Data Storage und andere optionale Elemente nutzen.
Durch seine Unterstützung zunehmend komplexer Variationen enthält deklarativer Code auch immer mehr Logik. Irgendwann sollten Sie sich fragen, warum Sie komplexe Logik in YAML, JSON, XML oder einer anderen deklarativen Sprache schreiben.
Daher sind programmierbare, imperative Sprachen passender für das Erstellen von Bibliotheken und abstrakten Schichten, wie wir genauer in Kapitel 16 besprechen werden. Und diese Sprachen tendieren dazu, das Schreiben, Testen und Managen von Bibliotheken besser zu unterstützen.