IaC-Tools verstehen: Cloudformation vs. Terraform

Stehen Sie vor der Entscheidung zwischen AWS CloudFormation und Terraform? Dieser Artikel soll Ihnen bei der Wahl des richtigen Tools helfen.

Cloud Computing hat die DevOps-Welt grundlegend verändert. Es ist nicht nur ein Modewort, sondern eine Realität, die die Art und Weise, wie wir Anwendungen entwickeln und pflegen, nachhaltig prägt. Obwohl es viele Gründe für den Einsatz von Cloud Computing in Unternehmen jeder Größe gibt, gibt es eine Hürde: die anfängliche manuelle Bereitstellung der Infrastruktur.

In der Vergangenheit war es notwendig, über die Konsolen der Cloud-Anbieter jede einzelne Ressource einzurichten. Für kleinere Projekte mag das praktikabel sein, aber wenn mehrere Personen an Konfigurationsänderungen arbeiten, kann dies zu einer unübersichtlichen und schwer zu wartenden Infrastruktur führen. Es fehlt an effizienten Möglichkeiten zur Zusammenarbeit und zur Nachverfolgung von Änderungen. Doch hier kommt die „Infrastruktur als Code“ (IaC) ins Spiel.

IaC ist ein zentraler Begriff im Cloud Computing und beschreibt die Verwaltung der IT-Infrastruktur durch Code. Anstatt manuell in den Konsolen zu arbeiten, ermöglicht IaC das Schreiben von Konfigurationsdateien, die dann automatisch die Cloud-Infrastruktur bereitstellen. IaC bietet Vorteile wie Konsistenz, einfache Wartung und eine Reduzierung menschlicher Fehler.

IaC-Nutzung mit Amazon Web Services

AWS ist der führende Cloud-Computing-Anbieter mit einem Marktanteil, der doppelt so groß ist wie der des nächstgrößten Wettbewerbers. Es bietet über 200 Dienste, die ein breites Spektrum an Anwendungsfällen abdecken.

Bei der Verwendung von IaC mit AWS stehen meist zwei Optionen zur Auswahl: AWS CloudFormation und das Open-Source-Tool Terraform. Die Entscheidung zwischen diesen beiden Tools kann aufgrund ihrer vielfältigen Funktionen herausfordernd sein. Dieser Artikel beleuchtet die Unterschiede zwischen AWS CloudFormation und Terraform, um Ihnen die Entscheidung zu erleichtern.

Terraform vs. AWS CloudFormation: Ein Vergleich

Modularität

In großen Organisationen spielt Modularität eine wichtige Rolle bei der Auswahl des passenden IaC-Tools.

CloudFormation

CloudFormation bietet keine direkte Unterstützung für Module, sondern verwendet sogenannte verschachtelte Stacks, die als Module fungieren können.

Sie könnten beispielsweise eine Standardkonfiguration für die Bereitstellung eines S3-Buckets definieren. Dazu erstellen Sie eine CloudFormation-Vorlage, die S3-Buckets erstellt. Benutzer können diese Vorlage dann als verschachtelten Stack verwenden, um einen standardisierten S3-Bucket zu erstellen.

Der AWS Service Catalog ist ein weniger bekannter Dienst von AWS, der bei der Modularisierung von CloudFormation helfen kann. Er wurde speziell für Unternehmen entwickelt, die den Umfang der AWS-Services aus Compliance-, Sicherheits- oder Kostengründen einschränken möchten. Dieser Service nutzt CloudFormation-Vorlagen im Hintergrund.

Ein Beispiel verdeutlicht dies: S3-Buckets können, wenn sie nicht korrekt konfiguriert sind, ein Sicherheitsrisiko für vertrauliche Daten darstellen. Sie möchten daher eine Standardmethode für die Verwendung von S3 in Ihrer Organisation definieren. Neben verschachtelten Stacks können Sie den AWS Service Catalog verwenden. Dieser erlaubt es Benutzern, die Standardvorlage über eine Benutzeroberfläche zu nutzen und Parameter für Anpassungen anzugeben. Dies ermöglicht eine Kontrolle über die Bereitstellung der Infrastruktur und verhindert unerwünschte Szenarien.

Terraform

Terraform bietet native Unterstützung für Module. Sie können damit Standardkonfigurationen erstellen und in anderen Terraform-Konfigurationen wiederverwenden.

Als Open-Source-Tool ermöglicht Terraform die Nutzung vorgefertigter Module aus der Terraform-Registry. Sie können auch eigene Module erstellen und diese in einer privaten Modulregistry hosten.

Bei der Frage der Modularität ist Terraform in meinen Augen die bessere Wahl gegenüber CloudFormation.

Das Arbeiten mit verschachtelten Stacks in CloudFormation ist umständlicher als die Verwendung von Modulen in Terraform. Die Datenübergabe von einer CFN-Vorlage an einen verschachtelten Stack kann komplex sein.

Es gibt keinen zentralen Ort zum Teilen von CloudFormation-Vorlagen. Der AWS Service Catalog bietet zwar eine Möglichkeit zur Durchsetzung von Regeln bei der Erstellung von Infrastruktur über die Konsole, aber der Fokus sollte auf Code liegen. Mit dem Service Catalog müssen Benutzer trotz der Komplexitätsreduzierung immer noch manuell in der Konsole Parameter eingeben, um ihre Infrastruktur zu erstellen.

Terraform hingegen bietet eine standardisierte Methode zur Erstellung, Verwaltung und zum Teilen von Modulen. Die Anforderungen der Module sind in der Terraform-Modulregistry einsehbar und können leicht in Terraform-Dateien verwendet werden.

Kontrolle und Governance der Infrastruktur

Sowohl AWS CloudFormation als auch Terraform bieten die Möglichkeit, die Erstellung von Ressourcen durch Mitarbeiter in Ihren AWS-Konten einzuschränken.

CloudFormation selbst bietet keine direkte Kontrolle über die Verwendung der Vorlagen. Allerdings können Sie AWS IAM-Richtlinien nutzen, um Benutzern nur die Verwendung von Standard-CloudFormation-Vorlagen zur Ressourcenerstellung zu erlauben. In unserem S3-Bucket-Beispiel könnten Sie alle „S3 Create“-Berechtigungen einschränken und die Erstellung von S3-Buckets nur über den AWS Service Catalog oder verschachtelte Stacks zulassen.

Mit Terraform können Sie über das Policy-as-Code-Tool Sentinel festlegen, welche Ressourcen Benutzer erstellen dürfen. Sentinel ermöglicht die Durchsetzung fein abgestimmter Richtlinien, um Benutzeraktionen zu erlauben oder zu verweigern. Sie könnten beispielsweise jegliche Erstellung von S3-Buckets ablehnen und nur die Erstellung über ein Standardmodul zulassen.

Statusverwaltung

Sowohl AWS CloudFormation als auch Terraform müssen den Überblick über die verwalteten Ressourcen behalten.

Terraform speichert den Status der Infrastruktur in einer Statusdatei. Diese Datei kann standardmäßig lokal gespeichert werden, wird jedoch meist in Remote-Backends wie S3 abgelegt, um die Zusammenarbeit mehrerer Benutzer zu ermöglichen.

CloudFormation verwaltet keine sichtbare Statusdatei, sondern übernimmt die gesamte Statuspflege im Hintergrund als verwalteter Dienst.

Beide Tools bieten die Möglichkeit, Änderungen an der Infrastruktur zu überprüfen. In Terraform können Sie mit dem Befehl „terraform plan“ die geplanten Änderungen einsehen. In CloudFormation werden diese Informationen über Change Sets bereitgestellt.

Sprache

Terraform verwendet die HashiCorp Configuration Language (HCL), eine von HashiCorp entwickelte Sprache. Sie ist JSON sehr ähnlich, bietet jedoch zusätzliche Funktionen.

CloudFormation-Vorlagen werden im YAML- oder JSON-Format geschrieben.

Protokollierung und Rollbacks

Sowohl AWS CloudFormation als auch Terraform verfügen über gute Protokollierungsfunktionen. In meinen Erfahrungen waren Fehler und Probleme meist leicht zu beheben.

CloudFormation: Bei einem fehlgeschlagenen Stack-Update werden standardmäßig alle Änderungen zurückgesetzt. Dies ist eine nützliche Funktion, die zu Debugging-Zwecken deaktiviert werden kann.

Terraform: Terraform setzt Änderungen nicht automatisch zurück. Dies ist jedoch kein Problem, da Sie jederzeit den Befehl „terraform destroy“ verwenden können, um eine halb bereitgestellte Konfiguration zu löschen und den Terraform-Lauf neu zu starten.

Anwendungsbereich

Terraform ist nicht auf AWS beschränkt. Dies ist ein wichtiger Faktor bei der Wahl zwischen Terraform und CloudFormation, da Terraform auch andere Cloud-Anbieter und -Dienste unterstützt.

Wenn Sie also planen, IaC für mehrere Cloud-Plattformen zu nutzen, ist Terraform die bessere Wahl. CloudFormation ist zwar leistungsstark, aber nur auf AWS beschränkt. Durch den Einsatz von Terraform können Sie eine Infrastruktur einrichten und Anwendungen auf verschiedenen Cloud-Plattformen bereitstellen, was die Verfügbarkeit und Robustheit Ihrer Anwendung erhöht.

Funktionsunterstützung

Wenn AWS neue Services und Funktionen einführt, wird CloudFormation in der Regel schneller aktualisiert als Terraform, da es sich um einen AWS-eigenen Dienst handelt. Mittlerweile decken jedoch beide Tools die meisten Dienste und Funktionen gut ab. Dies kann ein kleiner Nachteil bei der Verwendung von Terraform sein, aber es gibt eine Lösung.

Es ist möglich, einen CloudFormation-Stack in Ihrem Terraform-Code zu erstellen. Wenn also eine Funktion in Terraform noch nicht verfügbar ist, können Sie vorübergehend einen CloudFormation-Stack in Ihrem Terraform-Code verwenden.

Technischer Support

Der kostenpflichtige AWS-Support umfasst auch CloudFormation-Support.

HashiCorp bietet ebenfalls kostenpflichtige Support-Pläne für Terraform an.

Fazit

Sowohl AWS CloudFormation als auch Terraform sind leistungsstarke und ausgereifte Tools. Die genannten Unterschiede helfen Ihnen bei der Entscheidung, welches Tool Ihren Anforderungen besser entspricht. Wenn Sie planen, in Zukunft mehrere Cloud-Plattformen zu nutzen, oder bereits mehrere Clouds verwenden, ist Terraform die bessere Wahl. Wenn Sie ein IaC-Tool nur für AWS benötigen, sind beide Optionen eine gute Wahl.

Wenn Sie Terraform lernen möchten, gibt es viele Online-Kurse.