Читать книгу Handbuch Infrastructure as Code - Kief Morris - Страница 70
Domänenspezifische Infrastruktur-Sprachen
ОглавлениеAbgesehen von ihrem deklarativen Ansatz nutzen viele Infrastruktur-Tools ihre eigene DSL (Domain-Specific Language).1
Eine DSL ist eine Sprache, die dazu entworfen wurde, eine bestimmte Domäne zu modellieren – in unserem Fall Infrastruktur. Damit wird es einfacher, Code zu schreiben und ihn zu verstehen, weil sie die von Ihnen zu definierenden Elemente besser abbilden kann.
So besitzen beispielsweise Ansible, Chef und Puppet jeweils eine DSL zum Konfigurieren von Servern. Ihre Sprachen stellen Konstrukte für Konzepte wie Pakete, Dateien, Services und User Accounts bereit. Ein Pseudocode-Beispiel für eine DSL zur Serverkonfiguration sieht so aus:
package: jdk
package: tomcat
service: tomcat
port: 8443
user: tomcat
group: tomcat
file: /var/lib/tomcat/server.conf
owner: tomcat
group: tomcat
mode: 0644
contents: $TEMPLATE(/src/appserver/tomcat/server.conf.template)
Dieser Code stellt sicher, dass die zwei Softwarepakete jsk und tomcat installiert werden. Er definiert einen Service, der laufen soll, legt den Port fest, an dem er lauschen soll, und bestimmt den Account und die Gruppe, unter der er aktiv ist. Schließlich definiert der Code, dass eine Serverkonfigurationsdatei aus einer Template-Datei erzeugt werden soll.
Der Beispielcode lässt sich recht einfach von jemandem verstehen, der Systemadministrationswissen besitzt, auch wenn das spezifische Tool oder genau diese Sprache ihr oder ihm nicht vertraut sind. In Kapitel 11 geht es darum, wie Sprachen zur Serverkonfiguration einzusetzen sind.
Viele Stack-Management-Tools nutzen ebenfalls DSLs, unter anderem auch Terraform und CloudFoundation. Sie bieten auf diesem Weg Konzepte aus ihrer eigenen Domäne (Infrastruktur-Plattformen) an, sodass Sie direkt Code schreiben können, der sich auf virtuelle Maschinen, Disk Volumes und Netzwerk-Routen bezieht. In Kapitel 5 finden Sie mehr Informationen über den Einsatz dieser Sprachen und Tools.
Andere Infrastruktur-DSLs modellieren Konzepte für Anwendungs-Laufzeitplattformen – zum Beispiel Anwendungs-Cluster, Service Meshes oder Anwendungen. Beispiele dafür sind Helm-Charts (https://oreil.ly/F14uU) und CloudFoundry App-Manifeste (https://oreil.ly/SBpsV).
Viele Infrastruktur-DSLs sind als Erweiterungen bestehender Markup-Sprachen wie YAML (Ansible, CloudFoundation, alles rund um Kubernetes) oder JSON (Packer, CloudFoundation) angelegt. Bei manchen handelt es sich um interne DSLs, die als Untermenge (oder Übermenge) einer allgemein nutzbaren Programmiersprache geschrieben sind. Chef ist ein Beispiel für eine interne DSL, die als Ruby-Code geschrieben wird. Andere sind externe DSLs, die durch Code in einer anderen Sprache interpretiert werden. Terraform HCL ist eine externe DSL – der Code hat nichts mit der Sprache Go zu tun, in der der Interpreter geschrieben ist.