Infrastruktur-Code kann chaotisch sein. YAML-Dateien, die sich über Kilometer erstrecken, JSON, das einem die Augen bluten lässt, und dann sind da noch die Bash-Skripte, die nur mit Klebeband und Gebeten zusammengehalten werden. Aber was wäre, wenn wir die Sicherheit und Ausdruckskraft einer stark typisierten Sprache auf unseren Infrastruktur-Code übertragen könnten?
Hier kommen Kotlin und Arrow-kt ins Spiel. Mit den DSL-Building-Fähigkeiten von Kotlin und den funktionalen Programmierwerkzeugen von Arrow-kt können wir eine IaC-Lösung schaffen, die:
- Typensicher ist: Fehler werden zur Kompilierzeit erkannt, nicht erst, wenn der Produktionsserver brennt
- Komponierbar ist: Komplexe Infrastruktur aus einfachen, wiederverwendbaren Komponenten aufbauen
- Ausdrucksstark ist: Ihre Infrastruktur auf eine Weise beschreiben, die für Menschen tatsächlich Sinn ergibt
Die Bühne bereiten
Bevor wir loslegen, stellen wir sicher, dass wir unsere Werkzeuge bereit haben. Sie benötigen:
- Kotlin (vorzugsweise 1.5.0 oder später)
- Arrow-kt (wir verwenden Version 1.0.1)
- Ihren bevorzugten IDE (IntelliJ IDEA wird für die Kotlin-Entwicklung sehr empfohlen)
Fügen Sie die folgenden Abhängigkeiten zu Ihrer build.gradle.kts
-Datei hinzu:
Unsere DSL Stück für Stück aufbauen
Beginnen wir mit der Definition einiger grundlegender Bausteine für unsere Infrastruktur. Wir erstellen ein einfaches Modell für Server und Netzwerke.
1. Unseren Bereich definieren
Dies gibt uns eine grundlegende Struktur, mit der wir arbeiten können. Nun erstellen wir eine DSL, um diese Ressourcen zu definieren.
2. Die DSL erstellen
Jetzt können wir unsere Infrastruktur so definieren:
Typensicherheit mit Arrow-kt hinzufügen
Unsere DSL sieht gut aus, aber lassen Sie uns mit etwas funktionaler Programmierkunst von Arrow-kt noch einen Schritt weiter gehen.
1. Validierte Ressourcen
Verwenden wir zunächst Arrow's Validated
, um sicherzustellen, dass unsere Ressourcen korrekt definiert sind:
2. Validierungen zusammensetzen
Aktualisieren wir nun unsere Infrastructure
-Klasse, um diese Validierungen zu verwenden:
Weiter gehen: Ressourcenabhängigkeiten
Echte Infrastruktur hat oft Abhängigkeiten zwischen Ressourcen. Lassen Sie uns dies mit Arrow's Kleisli
modellieren: