# Terraform

Um Arbeitsumgebungen oder gar komplette IT-Strukturen umzusetzen, nutzen heutzutage immer mehr Unternehmen die **Cloud**. [Infrastructure as a Service (IaaS)](https://www.ionos.at/digitalguide/server/knowhow/iaas-infrastructure-as-a-service/ "IaaS: Infrastructure-as-a-Service") ist in vielen Fällen der einfache und preisgünstige Weg, um die Basis für geplante Projekte zu schaffen. Zudem ermöglichen Cloud-Lösungen, punktgenau auf **aktuelle Anforderungen** zu reagieren: Während die dahintersteckenden Komponenten wie [Server](https://www.ionos.at/digitalguide/server/knowhow/was-ist-ein-server-ein-begriff-zwei-definitionen/ "Was ist ein Server? Ein Begriff, zwei Definitionen"), [Firewalls ](https://www.ionos.at/digitalguide/server/sicherheit/was-ist-eine-firewall/ "Was ist eine Firewall?")oder [Load Balancer](https://www.ionos.at/digitalguide/server/knowhow/bessere-serverzugriffszeiten-durch-load-balancer/ "Bessere Serverzugriffszeiten durch Load Balancer") **im Rechenzentrum** des Anbieters zwar statisch sind, lassen sie sich im virtualisierten Cloud-Umfeld dynamisch verändern – was Kunden die Möglichkeit gibt, die **Ressourcen jederzeit bedarfsgerecht aufzustocken oder zu reduzieren**.

Um diese Flexibilität zu gewährleisten, stellen die Provider **APIs** bereit, über die man die gemietete IaaS-Umgebung mit der passenden Software jederzeit skalieren kann – Freiheiten, die zwar attraktiv, aber auch mit einem **hohen Verwaltungsaufwand** verbunden sind. Mit der Software **Terraform** liefert die US-amerikanische Firma [HashiCorp](https://www.hashicorp.com/ "Partner für die Herausforderungen der Cloud – HashiCorp") jedoch die passende Antwort, um diesen Aufwand langfristig zu minimieren. Was es mit diesem Werkzeug für Infrastructure as Code (IaC) auf sich hat, erfahren Sie im Folgenden.

## Was ist Terraform?

Wenn es um die zugrundeliegende Infrastruktur in der **Softwareentwicklung** geht, sind Administratoren immer wieder gefordert: Die Tendenz zur [agilen Entwicklung](https://www.ionos.at/digitalguide/websites/web-entwicklung/agile-software-entwicklung-erklaerung-der-werte-prinzipien/) sorgt für immer kürzere Entwicklungszyklen und für eine noch schnellere Umsetzung von Veränderungen. Um den hohen Ansprüchen dieser Schnelllebigkeit gerecht werden zu können, müssen IT-Manager das **Ressourcenmanagement so weit wie möglich zu automatisieren**. Hierfür gilt es, maschinenlesbaren Konfigurationscode zu schreiben, was auch als Infrastructure as Code (IaC) bezeichnet wird.

[YouTube video](https://www.youtube.com/watch?v=RO7VcUAsf-I)Um diesen Prozess zu vereinfachen, können IT-Verantwortliche auf die Dienste der Software Terraform zurückgreifen, die einerseits eine einheitliche **Beschreibung von Zielinfrastruktur** ermöglicht und andererseits dafür sorgt, dass diese bei unterstützten IaaS-Providern wie gewünscht umgesetzt wird. Zudem erlaubt die Software, provisionierte Infrastruktur-Setups zu speichern, um diese zu einem späteren Zeitpunkt erneut nutzen oder in beliebiger Weise erweitern bzw. anpassen zu können.

[YouTube video](https://www.youtube.com/watch?v=Ij1NO_6hMrM)Terraform ist grundsätzlich Open Source (Mozilla Public License 2.0) und lässt sich daher kostenfrei herunterladen und nutzen. Mehrere **Features für die Zusammenarbeit im Team sowie für öffentliche Einrichtungen und Organisationen** sind allerdings nur in den kostenpflichtigen Editionen „Enterprise Pro“ und „Enterprise Premium“ verfügbar. Entwickelt wurde der IaC-Service 2012 von dem in San Francisco ansässigen Unternehmen **HashiCorp**.

Hinweis Terraform arbeitet mit **über 160 verschiedenen Partnern zusammen**. Zu diesen gehören unter anderem Amazon Web Services (AWS), Atlassian, Cloudflare, Google, Microsoft und Oracle. Eine vollständige Auflistung aller Partner finden Sie auf der offiziellen [HashiCorp-Website](https://www.hashicorp.com/partners#technology "HashiCorp-Partner-Netzwerk im Überblick").

## Wie unterstützt Terraform Anwender bei der Konzeption von Infrastructure as Code (IaC)?

Da in der Regel nicht nur auf einen, sondern auf verschiedene Cloud-Services zurückgegriffen wird, um IT-Infrastruktur bzw. die erforderlichen Ressourcen für die Software-Entwicklung zu realisieren, müssen Sie sich als Verantwortlicher standardmäßig auf **eine Menge verschiedener Schnittstellen (APIs)** einstellen und mit den Eigenheiten der jeweiligen Plattform vertraut machen. Das gilt unabhängig davon, ob Sie diese APIs manuell in dem Moment, in dem Sie Veränderungen an der Infrastruktur vornehmen, ansteuern oder ob Sie hierfür eigene IaC-Anweisungen für einen automatisierten Zugriff schreiben wollen.

[YouTube video](https://www.youtube.com/watch?v=KLe2lCEy-Xw)Als Nutzer von Terraform haben Sie dieses Problem nicht: Statt der Schnittstellensprachen können Sie wahlweise die vereinfachte JavaScript-Auszeichnungssprache JSON oder die an JSON angelehnte **HashiCorp Configuration Language (HCL)** nutzen, um die gewünschte Zielinfrastruktur zu beschreiben. Letztere ist die von HashiCorp empfohlene Option, da sie das Schreiben und das Lesen des Codes durch Kommentare und weitere Features noch einfacher macht. Die jeweiligen Konfigurationsdateien erwartet Terraform dabei als gewöhnliche **Textdateien**, wobei das IaC-Werkzeug die **Endung *.tf*** verwendet. Mithilfe eines passenden Tools wie [Git oder SVN](https://www.ionos.at/digitalguide/websites/web-entwicklung/git-vs-svn-versionsverwaltung-im-vergleich/) können Sie diese Dateien problemlos versionieren – sofern dies gewünscht ist.

Hinweis Auch wenn die Anweisungen nicht in den standardtypischen Formen der Schnittstellen verfasst werden müssen, benötigt Terraform die **API-Keys**, um mit den jeweiligen Services kommunizieren und die Infrastruktur wie in der .tf-Konfigurationsdatei definiert anpassen bzw. umsetzen zu können.

## Die wichtigsten Terraform-Komponenten im Überblick

Die Hauptaufgabe von Terraform ist die **nutzerfreundliche Konfiguration** der Infrastruktur-Ressourcen, bei der die Auszeichnung in HCL bzw. JSON eine zentrale Rolle spielt. Die sprachliche Einfachheit ist aber bei Weitem nicht alles, was das IaC-Tool auszeichnet: Erst dank der Zusammenarbeit mit allen wichtigen **Soft- und Hardware-Providern** und im Zusammenspiel mit der individuell **erweiterbaren Basis-Architektur** sowie dem leicht zu bedienenden **Kommandozeilen-Interface** können die erstellten Konfigurationsdateien ihre gewünschte Wirkung erzielen. Die folgenden Abschnitte bieten einen kleinen Einblick in die verschiedenen Terraform-Komponenten, um die Funktionalität der IaC-Software zu verdeutlichen.

### Konfigurationssprache HCL

Die bereits erwähnte HashiCorp Configuration Language soll in erster Linie das angestrebte Resultat und nicht die Schritte zum Erreichen desselben beschreiben. Das wichtigste Element der Terraform-Sprache sind **Ressourcen**, denn diese beschreiben die Infrastruktur-Komponenten, deren Management mit Terraform automatisiert werden soll. Alle anderen Sprach-Features existieren ausschließlich, um die jeweiligen Ressourcen zu spezifizieren. Dabei spielen vor allem folgende drei Basis-Elemente eine wichtige Rolle:

- **Blöcke**: Blöcke sind Container für Inhalte. In dieser Funktion bieten sie Platz für Konfigurationen beliebiger Objekte, vor allem für konfigurierte Ressourcen. Jeder Block hat einen Block-Typ, ein oder mehrere Bezeichnungen sowie einen Body-Bereich. Letzterer enthält eine beliebige Anzahl von Argumenten und Unter-Blöcken.
- **Argumente**: Um einem Namen einen Wert zuzuordnen, nutzen Sie in HCL Argumente. Diese werden immer innerhalb von Blöcken deklariert.
- **Ausdrücke**: Ausdrücke repräsentieren einen Wert. Wahlweise handelt es sich dabei um einen konkreten Wert oder um einen Verweis auf einen oder mehrere andere Werte. Ein Ausdruck tritt dabei entweder als Wert für ein Argument oder innerhalb anderer Argumente auf.

Bei HCL als deklarativer Sprache ist die **Reihenfolge** der einzelnen Blöcke **grundsätzlich nicht relevant**. Terraform verarbeitet die beschriebenen Ressourcen automatisch in der korrekten Abfolge, basierend auf vorab **definierten Beziehungen**. Lediglich bei den sogenannten Provisioner-Blöcken (dt. *Bereitsteller*), die zum Ausführen von Skripts benötigt werden, spielt die Reihenfolge eine Rolle.

### Terraform CLI (Kommandozeilen-Interface)

Damit sich die erstellten Konfigurationsdateien auswerten und anwenden lassen, stellt Terraform ein eigenes Kommandozeilen-Interface zur Verfügung. Diese Schnittstelle definiert die Syntax und Gesamtstruktur der Terraform-Sprache und koordiniert sämtliche Änderungsschritte, die für die **Umsetzung der konfigurierten Infrastruktur** erforderlich sind. Dabei hat das CLI selbst keinerlei Kenntnisse über spezifische Typen von Infrastruktur-Ressourcen, sondern holt sich diese Informationen über spezielle **„Provider“-Erweiterungen**. Auf diese Weise weiß das Interface, wie die einzelnen Ressourcentypen bei den unterstützten Cloud-Providern definiert und verwaltet werden müssen – und damit auch, wie die universell formulierten Anweisungen in den Terraform-Konfigurationsdateien **an die verschiedenen Cloud-APIs weiterzugeben** sind.

Hinweis Als **CLI (Command Line Interface)** wird eine textbasierte Schnittstelle bezeichnet, über die Menschen Anweisungen an die Maschine **per Befehlseingabe** weitergeben. Das Konzept unterscheidet sich von der Maschinenbedienung **mittels grafischer Steuerelemente wie Icons, Menüs oder Schaltflächen**. Bei der letztgenannten Art von Bedienung spricht man von einer grafischen Schnittstelle bzw. einem **GUI (Graphical User Interface)**.

### Speicher- und Importfunktion

Um der Konfiguration reale Ressourcen zuordnen, Metadaten im Auge behalten und die Leistung größerer Infrastrukturen stetig verbessern zu können, **speichert Terraform den Status von Ressourcen und der erstellten IaC-Konfiguration**. Standardmäßig legt die Software hierfür die Datei *terraform.tfstate* in einem lokalen Verzeichnis ab – alternativ lässt sich allerdings auch ein anderer Speicherort wählen, was insbesondere für die Arbeit im Team zu empfehlen ist. Um den Status jedes Mal mit der aktuellen Infrastruktur abzugleichen, führt Terraform vor jeder ausgeführten Programmoperation über das CLI automatisch eine **Aktualisierung** durch.

Hinweis Für die nicht-lokale Status-Speicherung und für die Ausführung von Operationen (nur mit „Enterprise Pro“ und „Enterprise Premium“ möglich) nutzt Terraform spezielle Backends anstelle des standardmäßigen lokalen Backends. Zur Nutzung müssen diese besonderen Abstraktionsschichten direkt in der Konfigurationsdatei definiert und über das CLI initialisiert werden.

Haben Sie eine Infrastruktur mit anderen Mitteln erstellt, können Sie dies bestehende Setup dank der integrierten Funktion **importieren**, um die entsprechenden Ressourcen künftig mit Terraform zu managen. Aktuell werden dabei allerdings lediglich die Ressourcen, aber nicht deren Konfiguration **zum aktuellen Status hinzugefügt**. Letzteres soll allerdings dann bei künftigen Versionen des IaC-Werkzeugs möglich sein.

### Abhängigkeitsgraph

Terraform ermöglicht Ihnen, einen Abhängigkeitsgraphen der definierten Infrastruktur-Konfiguration oder des Ausführungsplans zu erzeugen. Hierfür müssen Sie lediglich den **CLI-Befehl** „terraform graph“ nutzen und den gewünschten Graph-Typen definieren, woraufhin Terraform automatisch eine entsprechende **Output-Datei im DOT-Format** generiert. Diese lässt sich mithilfe der Visualisierungssoftware [Graphviz](https://www.graphviz.org/ "Graphviz – Software zur Visualisierung von Graphen") wiedergeben, deren Nutzung HashiCorp auch in der offiziellen Onlinedokumentation empfiehlt. Über die Kommandozeile lässt sich die Datei aber auch ganz einfach in ein Bildformat wie [SVG](https://www.ionos.at/digitalguide/websites/webseiten-erstellen/svg-format-einbindung-von-svg-vektorgrafiken/) umwandeln.

### Terraform-Plugins

Terraform setzt auf einer plugin-basierten Architektur auf, die es ermöglicht, die **Funktionalität der IaC-Suite jederzeit zu erweitern**. Die Provisioners zum Ausführen der Skripte zählen beispielsweise ebenso zu den [Plugins](https://www.ionos.at/digitalguide/server/knowhow/was-ist-ein-plug-in/ "Was ist ein Plug-in?") wie die Provider-Erweiterungen, die der CLI alle relevanten Informationen über die unterstützten Webservices liefern. Entwickler, die die Programmiersprache [Go(lang)](https://www.ionos.at/digitalguide/server/knowhow/golang/ "Golang") beherrschen und Kenntnisse über die entsprechenden Provider-APIs besitzen, können sogar eigene Erweiterungen schreiben, um so Terraform mit Cloud-Services zu verknüpfen, die von offizieller Seite nicht unterstützt werden. Neu veröffentlichte Plugins von HashiCorp werden automatisch heruntergeladen und eingebunden, während Sie dies bei sämtlichen Drittanbieter-Erweiterungen manuell erledigen müssen.

## Use Cases: Was sind die typischen Anwendungsgebiete für Terraform?

Dank des riesigen Angebots an unterstützten Cloud-Service-Providern, das von HashiCorp kontinuierlich erweitert wird und sich mit entsprechendem Know-how auch eigenständig erweitern lässt, ist Terraform für die verschiedensten Anwendungsfälle geeignet. Zu den beliebtesten Use Cases des [Infrastructure-as-Code](https://www.ionos.at/digitalguide/server/knowhow/infrastructure-as-code/ "Infrastructure as Code")-Werkzeugs zählen unter anderem folgende drei:

### Heroku-App-Setup

[Heroku](https://www.heroku.com "Platform as a Service – Heroku") zählt zu den bekanntesten [PaaS](https://www.ionos.at/digitalguide/server/knowhow/paas-platform-as-a-service/)-Anbietern für das **Hosting eigener Web-Apps**. Alle für die App benötigten Tools und Services lassen sich in Form von Add-ons hinzufügen und über das plattformeigene Dashboard überwachen. Terraform nimmt Ihnen hierbei eine Menge Arbeit ab, indem es nicht nur den **Code für das Setup Ihrer App schreibt**, sondern auch sicherstellt, dass alle erforderlichen Add-ons jederzeit zur Verfügung stehen.

### Mehrschichtige Applikationen (Multi-Tier Applications)

Die Schichtenarchitektur hat sich als Strukturierungskonzept für Softwaresysteme bewährt – besonders beliebt ist die Zwei-Schichten-Architektur mit Webserver- und untergeordneter Datenbank-Ebene. Die Möglichkeit, **die Ebenen unabhängig voneinander skalieren zu können**, ist für viele Projekte von Vorteil. Terraform erweist sich hierfür als ideales Werkzeug: Jede Schicht lässt sich als eine Sammlung von Ressourcen beschreiben. Zudem regelt die IaC-Software die **Abhängigkeiten**, sorgt also z. B. bei dem genannten Modell dafür, dass die Datenbank-Ebene verfügbar ist, bevor der Webserver startet.

### Software Defined Networking (SDN)

Software Defined Networking gewinnt in Rechenzentren immer mehr an Bedeutung. Die **softwaregesteuerte Verwaltung virtualisierter Netzwerkressourcen** bietet Administratoren und Entwicklern ein hohes Maß an Kontrolle und Flexibilität. Terraform ermöglicht es Ihnen, eine **vollständige Konfiguration** für solche SDN-Services zu schreiben und diese zu nutzen, um die softwaredefinierten Netzwerkstrukturen automatisch einzurichten und anzupassen.

Tipp Mit der [Enterprise Cloud](https://cloud.ionos.de/compute "Cloud-Lösung für Unternehmen – Enterprise Cloud von IONOS") und dem [Data Center Designer](https://cloud.ionos.de/data-center-designer "Data Center Designer: Die grafische Oberfläche der IONOS Enterprise Cloud") bietet auch IONOS zum günstigen Preis eine Software-Defined-Networking-Lösung für Unternehmen!

### Multi-Cloud-Konzept

Für viele Verantwortliche ist es ein äußerst reizvolles Modell, Infrastruktur über mehrere Clouds zu verteilen. Durch die Verteilung auf mehrere Provider lassen sich nämlich **Fehlertoleranz** und **Ausfallsicherheit erhöhen** und auch die Wiederherstellung verlorener Ressourcen ist dadurch wesentlich einfacher, als wenn Sie nur auf einen einzigen Anbieter setzen. Dank der universellen Syntax vereinfacht Terraform den Aufbau solcher [Multi-Cloud-Strukturen](https://www.ionos.at/digitalguide/server/knowhow/was-ist-eine-multi-cloud/ "Was ist eine Multi-Cloud?"). Zudem kann die Anwendung mehrere Provider mit einer einzigen Konfiguration verwalten und sogar cloud-übergreifende Abhängigkeiten regeln.

[YouTube video](https://www.youtube.com/watch?v=bsl0TrQv9EY)## Terraform: Vorteile und Nachteile im Überblick

Infrastructure as Code hilft Ihnen dabei, in einem sich ständig ändernden IT-Umfeld langfristig konkurrenzfähig zu bleiben. Ein **hoher Automatisierungsgrad** unterstützt Sie dabei, die Übersicht über benötigte Ressourcen zu behalten und erforderliche Änderungen an der Infrastruktur so schnell wie möglich in die Tat umzusetzen. Terraform erweist sich sowohl bei der Kreation als auch bei der Ausführung von „programmierbarer“ Infrastruktur als effizientes Werkzeug – nicht zuletzt dank der **Unterstützung von Cloud-Services wie AWS, Azure und Google Cloud**. Eine der größten Stärken der IaC-Software ist dabei die **einheitliche Syntax zur Beschreibung der Infrastruktur**. Sie haben jedoch immer die Wahl zwischen der HashiCorp-Konfigurationssprache HCL und der Auszeichnung in JSON haben.

Hinweis Zu den diversen verfügbaren Terraform-Plugins zählt unter anderem auch die Erweiterung [„IONOS Provider“](https://www.terraform.io/docs/providers/oneandone/index.html "Terraform-Plug-in „IONOS Provider“"). Diese ermöglicht dem IaC-Tool den **Zugriff** auf das [IONOS Cloud-Server-API](https://cloudpanel-api.ionos.com/documentation/ "Informationsseite zur Cloud-Server-API von IONOS") und erlaubt damit auch die Konfiguration und Verwaltung von Cloud-Server-Ressourcen in den Rechenzentren von IONOS.

Ein weiterer Vorteil von Terraform ist der **plugin-basierte Aufbau**, der es sowohl dem Hersteller als auch Drittanbietern ermöglicht, die Funktionalität der Software jederzeit zu erweitern. Im Falle der Hersteller-Erweiterungen lädt Terraform diese sogar automatisch herunter, ohne dass Sie diese Aktualisierung veranlassen müssen. Zusätzlich überzeugt die Open-Source-Lösung mit Features wie einer **Speicherfunktion**, dank der Sie einmal eingerichtete Infrastruktur-Setups jederzeit erneut abrufen und bequem anpassen können, sowie der Möglichkeit, einen **Abhängigkeitsgraphen** für sämtliche Schritte der IaC-Kreation und -Ausführung zu generieren.

Hinsichtlich der **Kosten** macht Terraform aufgrund des Open-Source-Ansatzes ebenfalls eine gute Figur: Die Nutzung der IaC-Software ist grundsätzlich kostenfrei. Benötigen Sie allerdings **Collaboration-Features** wie eine Verknüpfung zur Versionsverwaltung Ihrer Wahl oder die Möglichkeit, Ressourcen mit Terraform via Fernzugriff zu managen, sind Sie auf die relativ teuren Enterprise-Pläne angewiesen. Kleine Unternehmen können an dieser Stelle schnell an ihre finanziellen Grenzen stoßen. Zudem müssen Sie sich – unabhängig von der gewählten Edition – auf einen **anspruchsvollen, zeitintensiven Einstieg** einstellen. Erst, wenn Sie sich in die Funktionsweise von Terraform und die eigens konzipierten Sprache HCL eingearbeitet haben, können Sie das Tool so nutzen, dass lästige Routinearbeiten und ein mühevolles serviceübergreifendes Ressourcenmanagement der Vergangenheit angehören.

<table>
  <thead>
    <tr>
      <th>Vorteile von Terraform</th>
      <th>Nachteile von Terraform</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Open Source</td>
      <td>Anspruchsvoller Einstieg</td>
    </tr>
    <tr>
      <td>Einheitliche Syntax für Infrastructure as Code</td>
      <td>Keine automatische Rollback-Funktion für fehlerhafte Änderungen an Ressourcen</td>
    </tr>
    <tr>
      <td>Unterstützung von diversen Cloud-Lösungen</td>
      <td>Collaboration- und Sicherheits-Features nur in teuren Enterprise-Plänen verfügbar</td>
    </tr>
    <tr>
      <td>Hochgradig erweiterbar</td>
      <td></td>
    </tr>
    <tr>
      <td>Speicher- und Import-Funktion für bestehende Architekturen</td>
      <td></td>
    </tr>
    <tr>
      <td>Möglichkeit, Abhängigkeitsgraphen zu generieren</td>
      <td></td>
    </tr>
  </tbody>
</table>


This is a markdown version of: [https://www.ionos.at/digitalguide/server/tools/was-ist-terraform/](https://www.ionos.at/digitalguide/server/tools/was-ist-terraform/) for AI/LLM consumption.