Terraform ist ein Tool zur Orchestrierung und Konfiguration von Computersystemen mit dem Infrastrukturen sicher und effizient erstellt, geändert und versioniert werden. Die erste Version von Terraform (https://www.terraform.io/) wurde 2014 von der Firma HashiCorp veröffentlicht. Das in Go geschriebene Programm steht unter der Mozilla Public License und ist daher kostenlos. Es unterstützt eine vielzahl unterschiedlicher Provider, mit denen Terraform über eine API kommuniziert um Systeme zu erstellen und konfigurieren. Sollte jedoch ein benötigter Provider nicht unterstützt werden, kann Terraform durch eigene Plugins und Module erweitert werden. Zur Installation reicht es aus, die fertige Binärdatei herunterzuladen.
Aufgaben von Terraform
Zu den Aufgaben von Terraform gehört das Verwalten und das Bereitstellen von Systemen mittels Konfigurationsdateien (Infrastructure as Code, IaC). Zusätzlich gibt es einen Planungsschritt, in dem ein Ausführungsplan zeigt, welche Änderungen bei der Ausführung durchgeführt werden müssen. Das hilft dabei, mögliche Probleme frühzeitig zu erkennen und zu vermeiden. Mit Ressourcen Graphen können die Abhängigkeiten zwischen den verschiedenen Ressourcen grafisch dargestellt werden und mögliche Kreise erkannt werden. Damit kann Terraform so weit wie möglich die Erstellung der Ressourcen parallelisieren und effizienter aufbauen.
Terraform unterstützt viele verschiedene Cloud-Anbieter wie AWS, Google Cloud Platform, Azure, Open Telecom Cloud aber auch Virtualisierungsanwendungen wie Docker, Kubernetes, etc. Zusätzlich können Services und Tools wie DNS, MySQL oder Grafana mit Terraform konfiguriert werden.
Beispielanwendung von Terraform
In diesem Beispiel soll mit Terraform ein Docker Container erstellt werden, in dem ein Nginx Webserver läuft. Zusätzlich soll der lokale Port 80 auf den Container weitergeleitet werden und ein Docker Volume, das die Webseite enthält, in den Pfad /usr/share/nginx/html eingebunden werden.
Terraform initialisieren
Das Kommando terraform init initialisiert ein neues Terraform Arbeitsverzeichnis. Hierbei wird ein neuer Ordner .terraform angelegt, der von Terraform benötigte Informationen über Plugins, Module und Umgebungen enthält. Die späteren Aufrufe von Terraform müssen immer in diesem Ordner ausgeführt werden. Konfigurationsdatei erstellen
Was Terraform tun soll, wird in einer Konfigurationsdatei mit der Endung .tf definiert. Hier werden alle Ressourcen und Provider in der HashiCorp Configuration Language (HCL) angegeben.
Plan für die Konfiguration erstellen
Mit dem Kommando terraform plan wird ein Ausführungsplan erstellt, in dem aufgelistet wird, welche Aktionen Terraform durchführen muss, um den in der Konfigurationsdatei angegebenen Zustand zu erreichen.
Wenn der Plan fehlerfrei ist, werden die Änderungen mit dem Befehl terraform apply durchgeführt.
Laufende Docker Container anzeigen
Nach der erfolgreichen Ausführung listet die Ausgabe von docker ps jetzt einen neuen Container, in dem ein Nginx Webserver läuft:
Die Webseite ist unter der URL http://localhost:80 erreichbar.
Weitere Terraform Kommandos
Um Terraform weiter zu steuern gibt es weitere Kommandos. Die folgende Liste gibt eine Übersicht über die wichtigsten Kommandos:
terraform provider zeigt einen Baum aller genutzten Provider
terraform show zeigt Informationen zu einem Plan oder Terraform-Status
terraform validate validiert Terraform-Konfigurationsdateien
terraform destroy löscht die durch Terraform erzeugten Systeme
terraform graph erstellt einen Graphen im DOT-Format von allen Ressourcen und deren Abhängigkeiten
Da Terraform kontinuierlich weiterentwickelt wird, ist es möglich, dass sich bei neuen Terraform-Versionen die Syntax ändert. Dafür gibt es für jede Version ein Kommando, das automatisch die Syntax an die neue Version anpasst.