Definition

HashiCorp Terraform

HashiCorp Terraform ist ein Open-Source-IaC-Tool, mit dem DevOps-Ingenieure physischen Ressourcen programmgesteuert bereitstellen können. Infrastruktur als Code (IaC) ist eine IT-Praxis, die automatisiert zugrundeliegende Infrastrukturen für Anwendungen verwaltet. Dieser Ansatz zur Ressourcenzuweisung ermöglicht es Entwicklern, Ressourcen logisch zu verwalten, zu überwachen und bereitzustellen. Dadurch muss das Betriebsteam nicht mehr jede Ressource manuell konfigurieren.

Terraform-Benutzer definieren und erzwingen Infrastrukturkonfigurationen mithilfe einer JSON-ähnlichen Konfigurationssprache namens HCL (HashiCorp Configuration Language). Die einfache Syntax von HCL erleichtert es DevOps-Teams, die Infrastruktur unterschiedlichen Umgebungen in der Cloud oder On-Premises bereitzustellen und zu verwalten.

HashiCorp bietet eine kommerzielle Version von Terraform namens Terraform Enterprise an. Laut der HashiCorp-Website enthält sie zusätzliche Unternehmensfunktionen, ein Framework namens Sentinel, das Richtlinien als Code implementieren kann.

Wie funktioniert Terraform?

Mit Terraform können Benutzer ihre gesamte Infrastruktur einfach mit Konfigurationsdateien und Versionskontrolle definieren. Wenn das System einen Befehl zum Bereitstellen und Ausführen eines Servers, einer Datenbank oder eines Load Balancers ausgibt, analysiert Terraform den Code und übersetzt ihn in einen API-Aufruf (Application Programming Interface) an den Ressourcenanbieter. Da Terraform Open Source ist, können Entwickler den Nutzen des Tools jederzeit erweitern, indem sie neue Plugins schreiben oder verschiedene Versionen vorhandener Plugins kompilieren.

Terraform besteht aus zwei wichtigen Komponenten: Terraform Core und Terraform Plugins. Terraform Core überwacht das Lesen und Interpolieren von Ressourcenplanausführungen, Ressourcendiagrammen, Statusverwaltungsfunktionen und Konfigurationsdateien. Core besteht aus kompilierten Binärdateien, die in der Programmiersprache Go geschrieben sind. Jede kompilierte Binärdatei fungiert als Kommandozeile (Command Line Interface, CLI) für die Kommunikation mit Plugins über Remote Procedure Calls (RPC). Terraform Plugins sind für das Definieren von Ressourcen für bestimmte Dienste verantwortlich. Das umfasst die Authentifizierung von Infrastrukturanbietern und die Initialisierung der Bibliotheken, die zum Ausführen von API-Aufrufen verwendet werden. Terraform-Plugins werden in Go als ausführbare Binärdateien geschrieben, die entweder als bestimmter Dienst oder als Provisioner dienen können. (Provisioner-Plugins werden verwendet, um Befehle für eine bestimmte Ressource auszuführen.)

Terraform-Module

Mit Terraform-Modulen können Nutzer komplexe Ressourcen nach Bedarf verwenden und wiederverwenden. Jedes Modul ist im Wesentlichen ein Container für mehrere Infrastrukturressourcen, die der Entwickler zusammenfassen möchte. Module haben sowohl Eingangs- als auch Ausgangsvariablen.

Eingangsvariablen akzeptieren Werte von einem Modul, Ausgabevariablen geben Daten an das Modul zurück. Module können sich gegenseitig aufrufen, was ein schnelleres Durchführen der Konfigurationen erlaubt. Um für die Terraform-Registrierung geeignet zu sein, muss jedes Modul über eine Namensstruktur, eine Repository-Beschreibung, eine Standardmodulstruktur, ein unterstütztes Versionskontrollsystem und Tags für die Freigabe verfügen. Die Terraform-Registrierung fungiert als zentrales Repository für die Modulfreigabe und ermöglicht das Erkennen und Verteilen von Terraform-Modulen an Benutzer.

Die Registrierung ist in zwei Varianten verfügbar:

Öffentliche Registrierung – Enthält Dienste, die mit einer API interagieren, um bestimmte Ressourcen und von der Community bereitgestellte Module verfügbar zu machen und zu verwalten.

Private Registry – Enthält Dienste für Module, die intern in einer Organisation verwendet werden.

Wofür eignet sich Terraform?

Externes Ressourcenmanagement – Terraform unterstützt Public- und Private-Cloud-Infrastrukturen sowie SaaS-Bereitstellungen (Network Appliances und Software as a Service).

Multi-Cloud-Bereitstellung – Die native Fähigkeit des Software-Tools, mehrere Cloud-Dienste zu unterstützen, verbessert die Fehlertoleranz.

Mehrschichtige Anwendungen – Mit Terraform kann jede Ressourcensammlung nach Bedarf einfach vergrößert oder verkleinert werden.

Self-Service-Cluster – Die Registrierungen erleichtern Benutzern das Auffinden vorgefertigter Konfigurationen, die unverändert verwendet oder an einen bestimmten Bedarf angepasst werden können.

Software Defined Networking (SDN) – Die Lesbarkeit von Terraform erleichtert Netzwerkingenieuren die Kodifizierung der Konfiguration für ein SDN.

Ressourcenplaner – Terraform-Module ermöglichen Ressourcen in AWS stoppen und starten sowie Kubernetes das Planen von Docker-Containern.

Wegwerfumgebung – Module können dazu dienen, eine Ad-hoc-Testumgebung für Code zu erstellen, bevor dieser in Produktion geht.

Eigenschaften von Terraform

Terraform erstellt eine Diagrammdatenbank, die den Nutzern Einblicke in Ressourcenabhängigkeiten bietet. Außerdem erstellt es einen Ausführungsplan, mit dem Anwender sehen können, welche Abfolge von Schritten Terraform ausführen wird, wenn eine Einstellung angewendet oder eine Änderung vorgenommen wird.

Die Terraform-Software umfasst außerdem Folgendes:

  • Eine Konsole, mit der Benutzer Funktionen wie numerische, String-, Daten- und Uhrzeitsammlungen sowie Codierungsfunktionen beobachten können;
  • Eine Konfigurationssprache, die Interpolation unterstützt und es Administratoren ermöglicht, Funktionen als Zeichenfolge zu übergeben, um eine Reihe von Operationen auszuführen;
  • Die Fähigkeit, HCL-Code in das JSON-Format zu übersetzen;
  • Und eine Funktion namens Module Count, die die Anzahl der Module angibt, die auf eine Infrastruktur angewendet wurden.

Vorteile und Herausforderungen der Verwendung von Terraform

Zu den Vorteilen der Verwendung von Terraform gehören:

  • HCL-Code in JSON übersetzen;
  • Eignung für Multi-Cloud-Umgebungen;
  • Inkrementelle Änderungen an Ressourcen;
  • Unterstützung softwaredefinierter Netzwerke;
  • Import vorhandener Ressourcen in einen Terraform-Status;
  • Sperren von Module, vor Statusänderungen zum Vermeiden von Konflikten

Das Verwenden von Terraform hat jedoch einige Nachteile:

  • Fehler in Neuerscheinungen und Updates
  • Mögliche Probleme mit nicht-synchronisierten States
  • Einschränkungen bei der Programmiersprache auf JSON oder HCI
  • Mangelnde Fehlerbehandlung
  • Schwieriges Verschieben von Ressourcen in Module

Alternativen zu Terraform

Zwei Beispiele für alternative Werkzeuge zu Terraform sind Pulumi und SaltStack.

Pulumi ist ein Infrastruktur-als-Code-Emporkömmling, der gezielt in Konkurrenz zu Terraform entwickelt wurde. Pulumi unterstützt Cloud-native Plattformen wie Kubernetes und fügt Terraform-ähnliche Funktionen wie CrossGuard hinzu. Die Software lässt sich auch in CI/CD-Tools (Continuous Integration/Continuous Delivery, Kontinuierliche Integration/Bereitstellung) für GitOps-Workflows und automatisierte Test-Frameworks integrieren. Der Hauptunterschied zu Terraform liegt in der verwendeten Sprache. Während Terraform die domänenspezifische HCL verwendet, verwendet Pulumi mehr gängige Programmiersprachen wie JavaScript, TypeScript und Python, Go und .NET Core.

SaltStack ist ein ereignisgesteuertes Automatisierungs- und IaC-Tool, mit dem IT-Organisationen die Cloud-Infrastruktur verwalten und sichern können. Mit dem Tool kann die effiziente Orchestrierung eines DevOps-Workflows für Unternehmen automatisiert werden. Zu den Funktionen von SaltStack gehören die automatisierte Bereitstellung, die Netzwerkbereitstellung, die Planung, die Automatisierung der Wartung der Gerätekonfiguration und der Fernzugriff von Mobilgeräten.

Diese Definition wurde zuletzt im April 2021 aktualisiert

Erfahren Sie mehr über Cloud Computing