Konfigurations-Management: Web-Anwendung auf Apache mit Chef konfigurieren

    Configuration-Management mit ChefKochbücher bil­den in Chef die grund­legende Ein­heit zur Konfi­guration von Richt­linien. Jedes davon defi­niert ein Sze­nario oder einen Konfigurations­status. Im fol­genden Bei­spiel möchte ich eine Web-Anwendung mit Hilfe eines Chef-Rezepts bootstrappen. Dazu erstelle ich auf der Work­station ein einfaches Cookbook.

    Ein Kochbuch besteht aus mehreren Komponenten, und zwar in erster Linie den einzelnen Chef-Rezepten, aber auch Vorlagen- und Konfigurations­dateien. Technisch gesehen ist ein Cookbook aber nur eine vorge­gebene Ordner­struktur, die so aussieht:

    Ordnerstruktur für ein Cookbook unter Chef

    Die Cookbooks selbst werden vom Chef-Server in einem Online-Repository bereit­gehalten und verwaltet, etwa im ZIP-Format oder besser als Quellcode-Repository, in dem sich die Cookbooks auch versionieren lassen. Wer Chef in AWS betreibt, verwendet ein versioniertes S3-Bucket oder AWS CodeCommit.

    Unterhalb des Ordners mit dem Namen des Cookbooks erscheint nach dem Generieren des Skeletons eine Verzeichnis­struktur aus den drei Komponenten Attribute-Files, Template-Files und Recipe-Files.

    Rezepte, Attribute, Vorlagen

    Hier sind Recipe files die eigentlichen Rezepte. Dabei handelt es sich um pure Ruby-Anwendungen, die alles definieren, was zum Konfigurieren eines Systems erforderlich ist. Dazu zählt das Erstellen und Konfigurieren von Ordnern, Installieren und Anpassen von Paketen und das Starten von Diensten.

    Die Attribute files enthalten Werte, die von den Rezepten und Vorlagen verwendet werden können. Attribute-Dateien haben wie Rezepte die Endung .rb.

    Template-Files sind Vorlagen, die Rezepte zum Erstellen anderer Dateien darstellen, zum Beispiel von Konfigurations­dateien. Sie modifizieren diese durch das Überschreiben von Attributen, ohne dass dazu das Cookbook selbst angefasst werden oder eine neue Konfigurations­datei geschrieben werden muss. Templates tragen die Endung .erb.

    Apache HTTP-Server installieren

    Das folgende Beispiel definiert ein Rezept zum Installieren des Apache-Webservers und muss innerhalb des Cookbooks im Subfolder recipes mit einem Dateinamen gespeichert werden, der auf .rb endet.

    Fertige Rezepte, etwa zum Bereitstellen und Konfigurieren eines IIS unter Windows Server 2016 finden sich im Chef Supermarket. Dazu später mehr.

    Struktur mit dem Starter-Kit erzeugen

    Für den Anfang und das weitere Verständnis genügt es, sich zunächst mit dem Starter-Kit vertraut zu machen. Dieses  stellt bereits einen Cookbook-Folder unter

    ~/[Name-des-Starter-Kit-Verzeichnis]/cookbooks

    zur Verfügung. Das Erstellen eines neuen Kochbuchs namens simple-webapp mit passenden (leeren) Skeletons für Attribute, Templates und Recipes erfolgt dann durch Eingeben von

    chef generate cookbook simple-webapp

    Die Ausgabe sollte so aussehen:

    Cookbook erzeugen in Chef

    Danach wechselt man ins Unter­verzeichnis des neuen Cookbooks simple-webapp und führt dort folgendes Kommando aus, um eine Template-Datei namens index.html.erb zu generieren.

    chef generate template index.html.erb

    Template-Datei erzeugen in Chef

    Diese Template-Datei muss nun mit Hilfe eines Editors mit Inhalt gefüllt werden, etwa so:

    Danach generieren wir mit dem folgenden Befehl auch noch eine passende Attributdatei mit dem Namen default:

    chef generate attribute default.rb

    Diese befüllen wir dann so:

    default ['simple-webapp'] ['appname'] = 'Simple WebApp'
    default ['simple-webapp'] ['meinname'] = 'Thomas Drilling'
    default['simple-webapp']['bgcolor'] = ' DF7401 '

    Jetzt ist es an der Zeit, das noch leere Standard­rezept anzupassen, wozu wir die Datei recipes /default.rb mit einem Editor unserer Wahl bearbeiten. Hier hinein kommt jetzt der Code in Ruby-Syntax, um die Web-Server-Bereitstellung mit zugehöriger /var/www/html/index.html aus der obigen Vorlage zu erzeugen:

    Chef Supermarket

    Anschließend erweitern wir unser Kochbuch, um es als Standard-Cookbook für den chef-client zu verpacken. Ein gängiger Workflow dazu ist das Schreiben eines sogenannten Wrapper-Cookbooks.

    Hierbei handelt es sich um ein Standard-Kochbuch, das von anderen Cookbooks und Rezepten abhängt bzw. darauf verweist. Auf diese Weise lassen sich vorhandene Rezepte aus dem Chef-Supermarket für den chef-client oder den IIS einfach zugänglich machen.

    Ansatzpunkt dazu ist das Bearbeiten der Datei metadata.rb im Hauptverzeichnis des jeweiligen Cookbooks. Dieses ergänzen wir um die Zeile

    depends 'chef-client'

    Danach ändern wir noch das Standard­abfrageintervall für den Chef-Client von 30 auf 5 Minuten, wozu wir die attributes.rb-Datei um folgende Zeile ergänzen:

    default['chef-client']['interval'] = '300'
    default['chef-client']['splay'] = '0'

    Dabei ist splay ist eine Funktion, die dem Abfrageintervall eine zufällige Anzahl von Sekunden (standardmäßig zwischen 1 und 300) hinzufügt. Das Reduzieren auf null stellt sicher, dass der Chef-Client alle fünf Minuten auf Änderungen abfragt.

    Chef-Cookbook für eine besipielhafte Web-Anwendung

    Jetzt müssen wir nur noch unserer Standard­rezept für simple-webapp um den Eintrag

    include_recipe 'chef-client::default'

    erweitern, um den Chef-Client beim Bootstrapping von simple-webapp gleich mit zu installieren.

    Keine Kommentare