Eine gute Entscheidungsfindung sollte damit beginnen, dass man sich die Gegebenheiten, das Team und die geschäftlichen Anforderungen und Ziele anschaut. Oft neigen wir dazu, uns auf unser Fachgebiet zu beschränken und unser Arbeitsumfeld außer Acht zu lassen. Dabei ist genau dieses Umfeld entscheidend für den Erfolg eines Projektes. Tatsächlich gibt es keine “Einheitslösung”, denn wir leben in einer Welt, die von Innovationen und ständigem Wandel geprägt wird. Dieser Artikel soll dir nicht die Entscheidungen abnehmen, sondern dir Einblicke gewähren und aufzeigen, warum wir uns für Terraform entschieden haben und wie wir damit arbeiten.
„Die Welt ist nicht Golf, und das meiste davon ist nicht einmal Tennis. Wie Robin Hogarth es ausdrückte, ist ein großer Teil der Welt “Marstennis”. Sie können Spieler auf einem Platz mit Bällen und Schlägern sehen, denen niemand die Regeln mitgeteilt hat. Es liegt an dir, sie abzuleiten, auch wenn sie sich ohne Vorankündigung ändern.“
David Epstein, Range: Warum Generalisten in einer spezialisierten Welt triumphieren
AWS ist eine großartige Wahl, wenn es um die Flexibilität beim Einrichten einer Infrastruktur geht, die den Anforderungen deines Unternehmens entspricht. Oft höre ich Leute sagen: „Man braucht eine große Menge an Fachwissen, um mit AWS zu arbeiten“. Das stimmt, aber darin liegt auch der größte Vorteil, wenn man mit AWS arbeitet. Mit Fachwissen musst du dich nicht auf vordefinierte oder festgelegte Architekturen beschränken, sondern hast die Freiheit, auf Grundlage von projekt- und unternehmensspezifischen Anforderungen neue Architekturen zu gestalten. Das führt meiner Erfahrung nach zu IT-Infrastrukturen, die auf lange Sicht robuster und viel flexibler sind, wenn sie gut umgesetzt werden. Sicherlich ist AWS nicht frei von starren Ansätzen, aber als Architekt, der mit allen großen Cloud-Plattformen gearbeitet hat, kann ich sagen, dass es für uns das richtige Gleichgewicht bietet.
Jetzt denkst du vielleicht: “Was hat die Flexibilität des Cloud-Anbieters mit der Wahl des IaC-Tool zu tun?“. Ich würde sagen, eine ganze Menge, denn Flexibilität bringt eine Menge Verantwortung mit sich.
Jedes Unternehmen möchte so schnell wie möglich agieren und trotzdem die beste Servicequalität bieten. Um das zu erreichen, muss jedes Team Best Practices entwickeln, die es ihm ermöglichen, diese Ziele auch tatsächlich zu erreichen. Ein Gleichgewicht aus Flexibilität, Innovation und abrufbaren Best Practices ist hierbei der Schlüssel. Um dieses Gleichgewicht zu schaffen, verwendet Terraform zusammensetzbare Module.
Modularisierung ist eine der Stärken von Terraform.Mit Modulen ist es möglich, gängige Best Practices deines Unternehmens zur Wiederverwendung zu verpacken und so die Kontrolle über die Konfiguration einer bestimmten Ressource oder einer Reihe von Ressourcen zu haben. Indem man die Dinge, die konfiguriert werden können, offenlegt und die statische Konfiguration vom Benutzer des Moduls fernhält, haben Entwickler direkte Richtlinien, wie diese Module zu verwenden sind. Weiter gedacht, kann das mitunter dazu führen, dass Terraform zum Wegbereiter wird, um Infrastruktur als Produkt in deinem Unternehmen zu positionieren.
Das Ziel des Taggings ist es, Ressourcen anhand von in deinem Unternehmen definierten Parametern zu gruppieren. Dies hilft – von der Abrechnung über die Wartung – deine Konten sauber zu halten. Eine gute Regel ist zum Beispiel, ein “Application”-Tag mit dem Namen der Anwendung zu setzen, zu der die Ressource gehört. Jeder Entwickler ist nun dafür verantwortlich, dass jede erstellte AWS-Ressource mit diesem Tag versehen wird. Mit einem mag das funktionieren, aber mit mehreren verschiedenen Parametern wie Umgebung, Geschäftseinheit usw. wird es für Entwickler immer komplizierter und zeitaufwändiger, sich wiederholt an die genaue Schreibweise zu erinnern und die Vollständigkeit aller Tags zu überprüfen. Eine Lösung bietet AWS Config. Damit lassen sich die Tagging-Konventionen automatisch überprüfen, was grundsätzlich eine gute Idee ist, aber dem Entwickler nicht die Last abnimmt.
Mit Terraform-Modulen hingegen kannst du ein Tag-Modul mit den erforderlichen Parametern schreiben, mit dem Ziel, ein konstantes und einheitliches Tag-Set für deine gesamte Infrastruktur zu erstellen. Wenn eine erforderliche Konfiguration nicht an das Modul übergeben wird, wirft es eine Fehlermeldung aus, wodurch die Terraform Plan- oder Applyphase nicht ausgeführt werden kann.
Mittlerweile stellt die Community bereits viele gute Module zur Verfügung, um loszulegen und diese an die eigenen Bedürfnisse anzupassen. Nur durch diese großartige Community hat Terraform in den letzten Jahren jene Aufmerksamkeit erlangt und wird von kleinen bis großen Unternehmen eingesetzt.
Auch zum Thema Lesbarkeit und die damit verbundene Wartung hat HashiCorp recht gut abgeschnitten. Sie entwickelten ihre eigene Beschreibungssprache namens HCL, die sie wie folgt definieren: „HCL versucht einen Kompromiss zwischen generischen Serialisierungsformaten wie JSON und Konfigurationsformaten, die um vollständige Programmiersprachen wie Ruby herum aufgebaut sind, zu finden. Die HCL-Syntax ist so konzipiert, dass sie von Menschen leicht gelesen und geschrieben werden kann, und erlaubt eine deklarative Logik, die den Einsatz in komplexeren Anwendungen ermöglicht.“
Obwohl es sich um eine weitere zu erlernende Sprache handelt, bringt sie einige starke Konzepte in den Konfigurationscode, die ziemlich unlesbar sind, wenn sie zu JSON oder YAML hinzugefügt werden, wie z. B. Schleifen, Bedingungen usw.. Zusätzlich entfernt sie eine Menge Boilerplate-Code, den man sieht, wenn IaC Implementierung mit allgemeinen Programmiersprachen erfolgt.
Da Terraform als ein gut lesbares, leicht verständliches Tool gebaut wurde, eignet es sich besonders für Unternehmen, die für mehrere Kunden parallel arbeiten. In unserer Branche sind wir mit mehreren Projekten zeitgleich beschäftigt. Deshalb ist für uns essentiell, schnell in verschiedene Projekte einsteigen zu können. Das ist natürlich nicht nur durch den Einsatz von Terraform möglich, sondern auch durch gute Kodierrichtlinien, die die Struktur eines jeden Terraform-Projekts definieren.Einen Einstieg in dieses Thema findest du unter hier.
Stay tuned – ein weiterer Artikel darüber, wie wir mit Terraform im Alltag arbeiten, folgt.
Terraform liefert die richtige Balance zwischen Flexibilität und vorhandenen Ressourcen, um schnell Lösungen für uns und unsere Kunden zu finden. Neben den im Artikel genannten Punkten bietet Terraform viele weitere Vorteile, aber auch Aspekte, die noch verbessert werden müssen.
Von unserem DevOps-Team hören wir oft, dass sie gerne damit arbeiten. Das zeigt, was für ein Game Changer das richtige Tool sein kann, vor allem in einem DevOps-Umfeld, in dem das Tooling noch nicht so ausgereift ist wie in anderen Bereichen der Softwareentwicklung. Jedes verwendete Tool kann nur dann helfen, wenn es bewusst und zielgerichtet eingesetzt, bei Bedarf angepasst und das Team im Umgang damit geschult wird. Mit Hilfe von Dokumentation und Artikel kannst du vielleicht 20 % des Weges einer erfolgreichen Implementierung abdecken. Die wirkliche Arbeit beginnt allerdings erst, nachdem die Entscheidungen getroffen wurden.
Ich hoffe, der Blog-Beitrag war informativ für dich und hat Spaß beim Lesen bereitet.