Scroll Top

Was ist Terraform? Warum Terraform?

Was ist Terraform

Terraform ist ein sogenanntes Infrastructure as Code (IaC)-Tool, mit dem sich Cloud und On-Premises-Ressourcen als Code definieren lassen.

Wer bereits mit Azure ARM-Templates oder AWS CloudFormation vertraut ist, wird das Konzept Infrastructure as Code bekannt vorkommen. Doch warum ein anderes Tool verwenden? Oder warum sollte man sich als Admin überhaupt mit Code beschäftigen?

Der Vorteil von Terraform ist, dass es plattformunabhängig ist. Mit Terraform kann Infrastruktur in vielen verschiedenen Cloud-Anbietern bereitgestellt werden, darunter AWS, Azure, GCP, Oracle und viele mehr. Auch für viele On-Premise Systeme gibt es Anbindungen, darunter Active Directory, F5, VMware und viele andere. Terraform ist im Prinzip ein Programm zum State Management, welches an Systeme mithilfe ihrer Programmierschnittstellen angebunden werden kann.

Für komplexe Umgebungen existiert auch eine kostenpflichtige Version namens Terraform Enterprise. Diese Version bietet dabei genau denselben Funktionsumfang wie Open-Source Terraform, jedoch mehr Management und Governance-Kontrollen in größeren Umgebungen, darunter Policies, Naming Conventions und Teams.

Terraform ist komplett Open Source. Der vollständige Source-Code ist auf GitHub einsehbar. Es können jederzeit eigene Änderungen am Code durchgeführt werden. Weiterhin bietet Terraform eine kostenlose Umgebung für die Ausführung und Verwaltung von mehreren Umgebungen unter Terraform Cloud by HashiCorp.

Terraform bietet viele Vorteile für Entwickler sowie für DevOps-Teams und Administratoren:                                                                    

Die Vorteile von Terraform im Überblick:

  • Dokumentation: Ressourcen werden vorher als Code definiert bevor Sie tatsächlich deployed werden. Daher kann sehr gut nachvollzogen werden, was genau deployed wurde. Über Kommentare und Beschreibungen können genauere Informationen hinterlegt werden.
  • Nachvollziehbarkeit und Historie: Wird Terraform gemeinsam mit einem Versions-Kontrollsystem (wie z.B. Git) verwendet, kann anhand der Commit-Historie eine optimale Nachverfolgbarkeit gewährleistet werden. Änderungen sind somit immer dokumentiert und nachvollziehbar.
  • Plattform-unabhängig: Terraform funktioniert mit hunderten von Systemen, darunter Cloud-Providern und On-Prem Systemen.
  • Deterministisch: Terraform kalkuliert vor jeder Änderung eines Systems die Aktionen, die durchgeführt werden. Somit kann bei einer nicht gewünschten Änderung der Prozess jederzeit abgebrochen werden. Terraform führt Änderungen nur mit vorher ausdrücklicher Genehmigung durch. Es gibt jedoch auch eine Option, die Änderungen direkt ohne Genehmigung ausführen zu lassen.
  • Wiederholbarkeit: Werden die Ressourcen als Code definiert, werden Sie immer gleich deployed, dies reduziert menschliche Fehler quasi auf 0. Dieser Code kann in anderen, ähnlichen Projekten aufgrund seiner Wiederholbarkeit wiederverwendet werden. Damit lassen sich Sicherheitspolicies durchsetzen, zum Beispiel ein Country Blocking für bestimmte Server, iptable-Settings und mehr.
  • DevOps-freundlich: Terraform fügt sich perfekt in bestehende DevOps-Prozesse ein. Werden Applikationen deployed, kann Terraform verwendet werden, um die Infrastruktur bereitzustellen. Aufgrund der deterministischen Eigenschaft von Terraform wird immer die gleiche Infrastruktur bereitgestellt. Müssen Änderungen an der Infrastruktur bereitgestellt werden, können diese zusammen mit dem Source-Code gleichzeitig erfolgen. Das Deployment von Infrastruktur mittels Terraform lässt sich durch Skripte auslösen.
  • Kosten- und Zeitersparnis: Da Terraform sich um die gesamte Infrastruktur kümmert und Code wiederholbar sowie deterministisch ist, lassen sich neue Umgebungen, wie zum Beispiel eine Test- oder Integrationsumgebung, einfach und schnell aufbauen, nutzen und auch wieder schnell abbauen. Mit Terraform wird also der Nutzen einer Cloud (man zahlt nur was man nutzt) richtig verwertbar. Testumgebungen für die Entwicklung braucht man oft nur wochenweise. Bei vielen Unternehmen werden diese Umgebungen dauerhaft vorgehalten.

Beispiele von Providern

Die Anbindung an Systeme geschieht in Terraform über sogenannte Provider. Diese sind ebenfalls Open Source und können jederzeit kostenlos verwendet werden. Ist Ihr entsprechendes System nicht dabei, ist es auch möglich, selbst Provider zu schreiben, um die Funktionalität in Terraform abzubilden. Toowoxx bietet ebenfalls kostenlose und quelloffene Terraform-Provider auf GitHub an.

Provider können auf https://registry.terraform.io/browse/providers durchsucht werden.

Beispiele für Provider:

Terraform verwenden

Die Verwendung von Terraform gestaltet sich für einen IT-Administrator oder Softwareentwickler äußert einfach. Es sind nur ein paar wenige Befehle notwendig, um direkt loszulegen und funktionierende Infrastruktur aufzubauen. Eine Anleitung hierzu gibt es in der Dokumentation für Terraform.

Mit Terraform Cloud durchstarten

Die Terraform Cloud bietet die Möglichkeit, Terraform direkt aus der Cloud heraus zu verwenden. Die Webanwendung von HashiCorp bietet viele Funktionen und Visualisierungen der Vorgänge und Zustände von Terraform. Der einfachste Weg, mit Terraform Cloud zu starten, ist, in der Terraform Cloud einen Workspace anzulegen und ein Git-Repository zu hinterlegen. Durch das Pushen der Änderungen auf das hinterlegte Git-Repository werden die Änderungen von der Terraform Cloud automatisch aufgenommen und verarbeitet.

Beispiel: Azure VM

Ein Codebeispiel, mithilfe dessen eine virtuelle Maschine auf Azure erstellt werden kann:

resource "azurerm_linux_virtual_machine" "NomadServer" {
  name                = "NomadServer1"
  resource_group_name = azurerm_resource_group.Nomad_RG.name
  location            = azurerm_resource_group.Nomad_RG.location
  size                = "Standard_DS1_v2"
  admin_username      = "terraform"
  network_interface_ids = [
    element(azurerm_network_interface.NomadServer-nic.*.id, count.index + 1)
  ]
  os_disk {
    caching              = "ReadOnly"
    storage_account_type = "Premium_LRS"
  }
  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "18.04-LTS"
    version   = "latest"
  }
}

Beispiel: Containergruppe mit Docker Containern

Ein Codebeispiel, mit dem eine Containergruppe, bestehend aus zwei Containern, erstellt wird. Hierbei handelt es sich um ein MinIO-Deployment als S3-kompatibles Gateway zu einem Azure Blob Storage. Das Codebeispiel ist so voll funktional und lässt sich innerhalb von Minuten über Terraform auf Azure deployen.

resource "azurerm_container_group" "azure_blob_s3_gateway" {
  name                = "minio-azb-s3-gw"
  location            = "germanywestcentral"
  resource_group_name = "resourcegroup"
  ip_address_type     = "public"
  dns_name_label      = "azb-s3-gw"
  os_type             = "Linux"
  restart_policy      = "Always"

  container {
    name   = "minio"
    image  = "minio/minio"
    cpu    = "0.8"
    memory = "0.4"
    commands = [
      "minio", "gateway", "azure"
    ]

    environment_variables = {
      "MINIO_ROOT_USER" = "storagekey"
      "MINIO_BROWSER"   = "off"
    }

    secure_environment_variables = {
      "MINIO_ROOT_PASSWORD" = "storagepassword"
    }
  }

  container {
    name   = "reverse-proxy-https"
    image  = "caddy"
    cpu    = "0.2"
    memory = "0.2"
    commands = [
      "caddy", "reverse-proxy",
      "-from", "azb-s3-gw.germanywestcentral.azurecontainer.io",
      "-to", "localhost:9000",
    ]

    ports {
      port     = 80
      protocol = "TCP"
    }

    ports {
      port     = 443
      protocol = "TCP"
    }
  }
}

Terraform bei Iqunit

Wir nutzen Terraform für unsere Cloud-Infrastruktur auf Azure. Ob eigenentwickelte Software, vernetzte Systeme oder allgemeine Infrastruktur: bei uns findet Terraform sowie Terraform Cloud in allen Bereichen Verwendung.

Related Posts

Leave a comment

acht − vier =