Terraform
Um Arbeitsumgebungen oder gar komplette IT-Strukturen umzusetzen, nutzen heutzutage immer mehr Unternehmen die Cloud. Infrastructure as a Service (IaaS) 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, Firewalls oder 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 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.
- Kostengünstige vCPUs und leistungsstarke dedizierte Cores
- Höchste Flexibilität ohne Mindestvertragslaufzeit
- Inklusive 24/7 Experten-Support
Was ist Terraform?
Wenn es um die zugrundeliegende Infrastruktur in der Softwareentwicklung geht, sind Administratoren immer wieder gefordert: Die Tendenz zur agilen Entwicklung 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.
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.
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.
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.
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.
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 können Sie diese Dateien problemlos versionieren – sofern dies gewünscht ist.
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.
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.
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 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 umwandeln.
- Vollständige Datensouveränität
- Kein Administrationsaufwand dank Managed-Betrieb
- Flexibel um Apps und Online Office erweiterbar
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 wie die Provider-Erweiterungen, die der CLI alle relevanten Informationen über die unterstützten Webservices liefern. Entwickler, die die Programmiersprache Go(lang) 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-Werkzeugs zählen unter anderem folgende drei:
Heroku-App-Setup
Heroku zählt zu den bekanntesten PaaS-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.
Mit der Enterprise Cloud und dem Data Center Designer 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. Zudem kann die Anwendung mehrere Provider mit einer einzigen Konfiguration verwalten und sogar cloud-übergreifende Abhängigkeiten regeln.
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.
Zu den diversen verfügbaren Terraform-Plugins zählt unter anderem auch die Erweiterung „IONOS Provider“. Diese ermöglicht dem IaC-Tool den Zugriff auf das IONOS Cloud-Server-API 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.
Vorteile von Terraform | Nachteile von Terraform |
---|---|
Open Source | Anspruchsvoller Einstieg |
Einheitliche Syntax für Infrastructure as Code | Keine automatische Rollback-Funktion für fehlerhafte Änderungen an Ressourcen |
Unterstützung von diversen Cloud-Lösungen | Collaboration- und Sicherheits-Features nur in teuren Enterprise-Plänen verfügbar |
Hochgradig erweiterbar | |
Speicher- und Import-Funktion für bestehende Architekturen | |
Möglichkeit, Abhängigkeitsgraphen zu generieren |