1
 
 
Profil
In deinem persönlichen Profilbereich kannst du den Status deiner Bewerbung einsehen, unvollständige Bewerbungen zwischenspeichern und aktuelle News und Events einsehen
08. Januar 2025

Terraform-Tipps: Skalierbare & zuverlässige Infrastructure-as-Code

Worum geht es in dem Artikel?

Hast du dich jemals gefragt, wie du deine Cloud-Infrastruktur effizienter verwalten kannst? In der OTTO IT setzen viele Teams Terraform ein, um ihre Cloud-Infrastruktur effektiv zu orchestrieren, zu automatisieren und zu verwalten. Terraform ist ein leistungsstarkes Open-Source-Tool von Hashicorp, das Developer*innen ermöglicht, Infrastructure-as-Code (IaC) zu definieren. Dieser zweiteilige Beitrag gibt einen Überblick über die Hauptphasen des Terraform-Workflows und praktische Tipps zur optimalen Nutzung. In diesem ersten Teil geht es um die Hauptphasen des Terraform-Workflows und den Terraform Lifecycle sowie Terraform Module.

Terraform Workflow: Vom Code zu Cloud-Ressourcen

Terraform-Konfigurationsdateien sind deklarativ, was bedeutet, dass sie den Endzustand unserer Infrastruktur beschreiben. Anstatt Schritt-für-Schritt-Anweisungen zum Erstellen von Ressourcen zu schreiben, definieren wir einfach, was wir benötigen. Terraform übernimmt dann die zugrunde liegende Logik. 

Wenn Änderungen erforderlich sind, kann Terraform die bestehende Infrastruktur schnell und ohne manuellen Aufwand aktualisieren. Dadurch wird die Verwaltung der Infrastruktur effizienter, konsistenter und skalierbarer während Fehler minimiert werden.

Lasst uns gemeinsam betrachten, wie Terraform und seine Workflow-Hauptphasen unter der Haube funktionieren. Diese Schritte sind entscheidend für eine konsistente Verwaltung von IaC:

Konfigurationsanalyse

Deine Infrastruktur wird in Terraform-Konfigurationsdateien beschrieben, die im HCL-Format vorliegen und die Endung .tf  haben. Diese Dateien enthalten Ressourcen, Daten, Variablen und Outputs. Zunächst analysiert Terraform diese Konfigurationsdateien und erstellt einen Graphen der Infrastrukturabhängigkeiten. Dieser Graph zeigt, wie die verschiedenen Ressourcen miteinander verbunden sind und welche Abhängigkeiten zwischen ihnen bestehen. Die Effizienz von Terraform liegt darin, dass es nicht voneinander abhängige Ressourcen parallel erstellen oder modifizieren kann.

Planung (Planning)

Nach der Analyse erstellt Terraform einen Ausführungsplan. Dieser zeigt, welche Änderungen an der Infrastruktur vorgenommen werden müssen, um sie gemäß der Konfiguration zu erstellen, zu ändern oder zu entfernen. Außerdem werden die hinzugefügten, geänderten oder entfernten Ressourcen sowie eventuelle Abhängigkeiten oder Konflikte angezeigt, die berücksichtigt werden müssen.

Ausführung (Execution)

Sobald der Plan genehmigt ist, führt Terraform die notwendigen Aktionen aus, um die Infrastruktur gemäß dem Plan zu erstellen, anzupassen oder zu entfernen. Dies kann beispielsweise das Erstellen einer neuen virtuellen Maschine, das Aktualisieren vorhandener Sicherheitsrichtlinien oder das Entfernen nicht mehr benötigter Ressourcen umfassen.

Zustandsverwaltung (State Management)

Terraform verwaltet den Zustand der Infrastruktur in einer sogenannten "state-file". Diese Datei speichert den aktuellen Zustand der bereitgestellten Ressourcen sowie Metadaten über die Konfiguration. Sie wird verwendet, um zu verfolgen, welche Ressourcen Terraform erstellt hat und wie sich diese im Laufe der Zeit verändert haben.

Ressourcenverwaltung (Resource Management)

Terraform kommuniziert mit den APIs der verschiedenen Cloud-Computing-Anbieter oder anderen Infrastrukturanbietern (Providern), um die erforderlichen Ressourcen zu erstellen, zu ändern oder zu entfernen. Dies erfolgt in der Regel über HTTP-Anfragen an die entsprechenden APIs.

Terraform Infrastructure as Code: Workflow
Terraform Infrastructure as Code: Workflow

Terraform: Die essenziellen Befehle für die Verwaltung deiner Cloud-Infrastruktur

Der Lebenszyklus von Terraform umfasst mehrere Phasen, von der Planung bis zur Bereitstellung. Hier sind die wichtigsten Befehle, die wir kennen sollten:

  • terraform init: Dieser Befehl initialisiert das Arbeitsverzeichnis, in dem deine Terraform-Konfigurationen gespeichert sind. Er lädt die benötigten Provider-Plugins und Module herunter und bereitet Terraform auf die Ausführung vor.

  • terraform plan: Durch dieses Command erstellt Terraform einen Ausführungsplan, der zeigt, welche Aktionen ausgeführt werden, um den aktuellen Zustand der Infrastruktur in den gewünschten Zustand zu überführen. Dies ermöglicht dir, die geplanten Änderungen zu überprüfen, bevor sie tatsächlich angewendet werden.

  • terraform apply: Dieses Command führt die im Plan beschriebenen Änderungen aus und bringt die Infrastruktur in den gewünschten Zustand.

  • terraform destroy: Mit diesem Befehl entfernt Terraform alle verwalteten Ressourcen. Dies ist nützlich, wenn wir eine Umgebung vollständig zurücksetzen möchten.
Terraform Lifecycle
Terraform Lifecycle

Da wir nun die Ausführungsschritte von Terraform näher betrachtet haben, lassen sich gut Ableitungen treffen, was die Handhabung und Organisation von Terraform-Files anbelangt. Darüber hinaus gibt es aus viele hilfreiche Hinweise und Learnings aus der Praxis, die uns vor Stolperfallen bewahren. Einige von ihnen werden wir im Folgenden beleuchten.

Modulares Design und Wiederverwendbarkeit unserer Ressourcen

Wie oben erwähnt, lässt sich die Ressourcenverwaltung von Terraform wie folgt vorstellen: Jede Aktion in Terraform besteht aus einer Reihe von API-Aufrufen. Wenn Ressourcen definiert werden, führt Terraform API-Aufrufe an den Cloud-Provider aus, um die entsprechenden Infrastrukturkomponenten zu erstellen, zu ändern oder zu löschen. Wenn also mehrere Ressourcen oder Module miteinander verknüpft werden, ist die Wahrscheinlichkeit groß, dass diese Abhängigkeiten zu einem komplexen Netz von API-Aufrufen führen.

Dieses Szenario kann zu einer erheblichen Anzahl von API-Aufrufen führen, die alle erfolgreich sein müssen, um die gewünschte Infrastruktur (beispielsweise Cloud Monitoring) korrekt zu provisionieren. Da API-Aufrufe von Natur aus fehleranfällig sein können, wirkt sich dies direkt auf die Stabilität und Leistung der Infrastruktur-Bereitstellung aus.

Die Ausführungspläne von Terraform zeigen, dass viele abhängige Ressourcen vorhanden sind. In diesem Fall muss Terraform eine komplexe Kette von API-Aufrufen verwalten. Je weniger abhängige API-Aufrufe vorhanden sind, desto stabiler und effizienter gestaltet sich die Bereitstellung. Daraus lassen sich hilfreiche Ableitungen ziehen, wie die Abhängigkeiten und die damit verbundenen API-Aufrufe von vornherein minimiert werden können.

Wie man Terraform-Dateien strukturiert: schlechter Ansatz für API-Aufrufe
Wie man Terraform-Dateien strukturiert: schlechter Ansatz für API-Aufrufe

Terraform unterstützt wiederverwendbare Konfigurationskomponenten, die als “Module” bezeichnet werden. Ein modulares Design ermöglicht die Zerlegung von Terraform-Konfigurationen in wiederverwendbare und zusammensetzbare Blöcke. Diese Module kapseln Infrastruktur-Ebenen und sind so unabhängig wie möglich gestaltet. Dabei werden fest codierte Werte vermieden und stattdessen als Eingabevariablen übergeben, um Flexibilität zu gewährleisten. 

Des Weiteren werden Module semantisch versioniert, um einfache Upgrades zu ermöglichen. Diese Module definieren konfigurierbare Sammlungen von Infrastruktur, sparen Zeit und fördern bewährte Verfahren. Wir können dabei öffentlich verfügbare Module aus der Terraform Registry verwenden oder unsere eigenen Module schreiben.

Die Nutzung von Modulen eröffnet uns einige Vorteile:

  • Konsistenz und Wiederholbarkeit: Durch die Verwendung von Modulen können wir bewährte Konfigurationen problemlos in verschiedenen Projekten einsetzen.

  • Wartung und Aktualisierung: Änderungen können zentral verwaltet und auf alle Instanzen eines Moduls angewendet werden, was die Wartung erleichtert.

  • Übersichtlichkeit: Module ermöglichen es, komplexe Infrastrukturen in überschaubare, gut strukturierte Einheiten zu unterteilen, was zudem auch die Fehlersuche verbessert.

  • Teamarbeit: Klar definierte und dokumentierte Module fördern die Zusammenarbeit im Team, da sie einfacher gemeinsam genutzt und weiterentwickelt werden können. Man könnte die wiederverwendbaren Module zentralisiert in einem eigenen Directory oder sogar Repository halten.

  • Sicherheitspraktiken: Durch die Verwendung von Modulen können bewährte Sicherheitspraktiken und Compliance-Standards einfacher implementiert und durchgesetzt werden, was die Gesamtqualität und Sicherheit der Infrastruktur erhöht.
Wie man Terraform-Dateien strukturiert: guter Ansatz für API-Aufrufe
Wie man Terraform-Dateien strukturiert: guter Ansatz für API-Aufrufe

Terraform ist ein mächtiges Werkzeug, das dir hilft, deine Cloud-Infrastruktur effizient zu verwalten. Indem wir die beschriebenen Workflow-Phasen und Terraform Best Practices befolgen, können wir die Qualität und Wartbarkeit deiner Infrastruktur erheblich verbessern.

Im nächsten Teil werden spezifische Tipps und Tricks zur Handhabung von Ein- und Ausgabewerten sowie zur Optimierung der Verzeichnisstruktur und Ressourcenorganisation vorgestellt.

Stay tuned – bis zum nächsten Teil meiner Terraform-Tipps! ;-)

Möchtest du Teil des Teams werden?

8 Personen gefällt das

0Noch keine Kommentare

Dein Kommentar
Antwort auf:  Direkt auf das Thema antworten

Geschrieben von

Nina Braunger
Nina Braunger
Junior Software Entwicklerin

Ähnliche Beiträge

We want to improve out content with your feedback.

How interesting is this blogpost?

We have received your feedback.

Cookies erlauben?

OTTO und vier Partner brauchen deine Einwilligung (Klick auf "OK") bei einzelnen Datennutzungen, um Informationen auf einem Gerät zu speichern und/oder abzurufen (IP-Adresse, Nutzer-ID, Browser-Informationen).
Die Datennutzung erfolgt für personalisierte Anzeigen und Inhalte, Anzeigen- und Inhaltsmessungen sowie um Erkenntnisse über Zielgruppen und Produktentwicklungen zu gewinnen. Mehr Infos zur Einwilligung gibt’s jederzeit hier. Mit Klick auf den Link "Cookies ablehnen" kannst du deine Einwilligung jederzeit ablehnen.

Datennutzungen

OTTO arbeitet mit Partnern zusammen, die von deinem Endgerät abgerufene Daten (Trackingdaten) auch zu eigenen Zwecken (z.B. Profilbildungen) / zu Zwecken Dritter verarbeiten. Vor diesem Hintergrund erfordert nicht nur die Erhebung der Trackingdaten, sondern auch deren Weiterverarbeitung durch diese Anbieter einer Einwilligung. Die Trackingdaten werden erst dann erhoben, wenn du auf den in dem Banner auf otto.de wiedergebenden Button „OK” klickst. Bei den Partnern handelt es sich um die folgenden Unternehmen:
Google Ireland Limited, Meta Platforms Ireland Limited, LinkedIn Ireland Unlimited Company, TikTok Information Technologies UK Limited
Weitere Informationen zu den Datenverarbeitungen durch diese Partner findest du in der Datenschutzerklärung auf otto.de/jobs. Die Informationen sind außerdem über einen Link in dem Banner abrufbar.
Du kannst deine Einwilligung auch jederzeit grundlos mit Wirkung für die Zukunft widerrufen, indem du auf den Button "Cookie-Einstellungen" im Footer der Website und "Cookies ablehnen" klickst.