Terraform

terraform_titel

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.

# Configure the Docker provider
provider "docker" {
 host = "unix:///var/run/docker.sock"
}

# configure nginx image
resource "docker_image" "nginx" {
  name = "nginx:latest"
}

# Create an Nginx container
resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "nginx-server"
  ports {
    internal = 80
    external = 80
  }
  volumes {
    container_path = "/usr/share/nginx/html"
    host_path = "/lokaler/pfad/zum/Ordner/"
    read_only = true
  }
} 

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:

COMMAND                     CREATED             PORTS                   NAMES
"nginx -g 'daemon of…"      12 seconds ago      0.0.0.0:80->80/tcp      nginx-server
 

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.

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/