Was ist Terraform?

Programmieren geht über Installieren

Terraform kurz und knapp erklärt

Terraform ist ein Infrastructure as Code-Werkzeug von der Firma HashiCorp. Ihre gewünschte IT-Infrastruktur, wie z.B. virtuelle Maschinen, Webserver oder Datenbanken, klicken Sie mit Terraform nicht mehr in mühevoller manueller Handarbeit zurecht. Stattdessen wird eine spezielle Konfigurationsdatei verwendet, mit der eine CLI (Kommandozeilen-Werkzeug) beliebige Software-Komponenten auf einer Ziel-Plattform, z.B. Microsoft Azure, AWS oder Kubernetes, bereitstellt. Mit der Konfigurations-Datei erhält ein IT-Fachmann oder eine IT-Fachfrau alles, um Infrastruktur zu versionieren, zu teilen und wiederzuverwenden – halt alle Vorzüge, die Softwareentwicklung so bietet. Aber das kann man doch auch mit Shell-Programmierung und den entsprechenden APIs der Cloud-Hersteller? Ja, das stimmt. Allerdings bildet Terraform eine herstellerunabhängige vereinheitlichte Schnittstelle, mit der unter der Haube über sogenannte Provider sowohl Cloud- als auch On-Premise-Infrastruktur aufgesetzt wird. Terraform ist also ein hilfreiches Werkzeug für alle, die ihre Infrastruktur austomatisieren wollen, denn: 

  • Terraform stellt eine vereinheitlichte Schnittstelle bereit, um mit Hilfe von sogenannten Providern beliebig Infrastruktur in einer Ziel-Umgebung aufzusetzen.
  • Eine gut lesbare Konfigurationsdatei beschreibt alle Infrastruktur-Komponenten (Ressourcen), die gebraucht werden.
  • Über die Kommandozeile (CLI) wird die Konfigurationsdatei automatisiert angewendet.
  • Terraform ist ein herstellerunabhängiges und weit verbreitetes Werkzeug.

Und so sieht nun eine Terraform-Konfigurationsdatei aus. Nicht schön aber zweckmäßig:

				
					// Konfigurieren des Microsoft Azure Provider 
provider "azurerm" { 
 
 
  subscription_id = "${var.subscription_id}" 
  tenant_id       = "${var.tenant_id}" 
  client_id       = "${var.client_id}" 
  client_secret   = "${var.client_secret}" 
  version         = "=2.3.0" 
  features {} 
} 
 
// Konfigurieren eines SQL-Servers 
resource "azurerm_sql_server" "sql_server" { 
  name                         = "${var.machine_registry_alias}-${var.environment}-${var.service_version}-sql-server" 
  resource_group_name          = "${var.resource_group_name}" 
  location                     = "${var.location}" 
  version                      = "12.0" 
  administrator_login          = "${var.administrator_login}" 
  administrator_login_password = "${var.administrator_login_password}" 
} 
// Attention! Only for test purpose 
resource "azurerm_sql_firewall_rule" "AllowAll" { 
  name                = "AllowAll" 
  resource_group_name = "${var.resource_group_name}" 
  server_name         = "${azurerm_sql_server.sql_server.name}" 
  start_ip_address    = "0.0.0.0" 
  end_ip_address      = "255.255.255.255" 
} 
 
resource "azurerm_sql_database" "sql_database" { 
  name                = "${var.machine_registry_alias}-${var.environment}-${var.service_version}-db" 
  resource_group_name = "${var.resource_group_name}" 
  location            = "${var.location}" 
  server_name         = "${azurerm_sql_server.sql_server.name}" 
  edition             = "Basic" 
} 

				
			

Wie wird jetzt aus Terraform-Code ein Cloud-Dienst?

Von der HashiCorp Configuration Language zur Infrastruktur

Terraform ist also ein Werkzeug für die automatisierte Bereitstellung von Infrastruktur-Ressourcen via Kommandozeile und einer Konfigurationsdatei. Softwareentwickler und Administratoren bekommen so alles in die Hand, um ihre Anwendungen rund um zu versorgen. Der Ablauf, um endgültig reale Infrastruktur zu erhalten sieht dann wie folgt aus: 

  • Am Anfang steht eine Anwendung, die beispielsweise im Rahmen eines individuellen Softwareentwicklungs-Projektes erstellt wurde. Hieraus leitet sich ab, welche Infrastruktur man benötigt. Schließlich setzt niemand aus Spaß einfach mal so eine Datenbank auf.
  • Nachdem alle Anforderungen geklärt sind, kann es losgehen und in die Tasten gehauen werden: Die Konfigurationsdatei beschreibt im Ergebnis Login-Daten, Ziel-Plattform, Datenbanken, Webserver usw. Halt alles was man auch bräuchte, um solche Dienste manuell mit Hilfe der APIs aufzusetzen. Diese Phase wird auch als Write-Phase im Terraform-Workflow bezeichnet.
  • Es folgt die Plan-Phase. In dieser berechnet Terraform alle notwendigen Einzelschritte, wie z.B. das Löschen, Erstellen oder Ändern von Infrastruktur-Ressourcen.
  • Nun wird es ernst: Mit der Apply-Phase wird aus dem Plan Realität und alle Komponenten aufgesetzt.
  • Zum krönenden Abschluss erhält man eine State-Datei. Diese speichert den aktuellen Zustand der Infrastruktur. Wichtig ist, dass niemand im Nachgang manuell an den aufgesetzten Diensten rumschraubt. Sonst kommt Terraform natürlich durcheinander, wenn es von diesen Änderungen nichts mitbekommt.

Sollen Änderungen vorgenommen werden, kann das ganze Spiel von vorne anfangen.

Der typische Terraform-Workflow mit Write-, Plan- und Apply-Phase

Der Workflow besteht also im Kern immer aus Write, Plan und Apply. In der Praxis bestehen Plan und Apply im Wesentlichen aus Kommandozeilenbefehlen. Wie praktisch! Bei einem IaC-Tool wie Terraform ist in diesem Zusammenhang wichtig, dass die State-Datei möglichst nicht durch manuelle Nacharbeiten an der Infrastruktur, z.B. das Verändern einer Preis-Stufe, durcheinanderkommt. Werden generell keine Änderungen ins System eingepflegt, sondern alle Infrastruktur-Ressourcen durch Automatisierungs-Routinen jedes Mal komplett neu aufgesetzt, z.B. mit Terraform, spricht man auch von Immutable Infrastructure.

Sie haben Fragen oder Anregungen?

Kontaktieren Sie uns noch heute: