IaC-Tools verstehen: Cloudformation vs. Terraform

AWS CloudFormation und Terraform – nicht sicher, was Sie wählen sollen? Dieser Artikel wird Ihnen helfen, eine kluge Entscheidung zu treffen.

Cloud Computing hat die Welt von DevOps revolutioniert. Es ist nicht mehr nur ein Schlagwort; Es ist hier und es ist hier, um die Art und Weise zu ändern, wie wir unsere Anwendungen entwickeln und warten. Während es unzählige Gründe gibt, warum Sie Cloud Computing für Unternehmen aller Größenordnungen verwenden sollten, gibt es eine kleine Einschränkung: Sie müssen Ihre Infrastruktur manuell bereitstellen.

Sie müssen zu den Konsolen Ihrer Cloud-Anbieter gehen und ihnen genau sagen, was Sie wollen. Dies funktioniert gut für kleine Anwendungsfälle, aber was ist, wenn Sie verschiedene Personen haben, die Konfigurationsänderungen in der Konsole vornehmen. Sie könnten am Ende eine superkomplizierte Infrastruktur haben, die immer schwieriger zu warten ist. Es gibt keine effiziente Möglichkeit, zusammenzuarbeiten oder Änderungen an der Infrastruktur in der Cloud nachzuverfolgen. Nun, eigentlich gibt es das. Infrastruktur als Code.

Infrastruktur als Code ist ein sehr beliebter Begriff im Cloud Computing. Es ist der Prozess der Verwaltung Ihrer IT-Infrastruktur mithilfe von Code. Ja, das ist richtig. Anstatt zur Konsole zu gehen und alles manuell zu erledigen; Infrastruktur als Code, auch bekannt als IAAC oder IAC, ermöglicht es Ihnen, Konfigurationsdateien zu schreiben, die dann Ihre Cloud-Infrastruktur bereitstellen. IAC bietet uns Vorteile wie Konsistenz, einfache und schnelle Wartung und keinen Raum für menschliche Fehler.

Verwenden von IAC mit Amazon Web Services

AWS ist der weltweit führende Cloud-Computing-Dienst und hat den doppelten Marktanteil als der nächste Cloud-Anbieter danach. Es gibt über 200 Services auf AWS, die Hunderte und Tausende von Anwendungsfällen abdecken können.

Wenn Sie beginnen, IAC mit AWS zu verwenden, werden Sie Ihre Auswahl oft auf die einschränken AWS CloudFormation und das Open-Source-Tool, Terraform. Wenn Sie versuchen, eine Wahl zwischen den beiden zu treffen, kann das Verständnis der Vielzahl der Funktionen, die beide Tools bieten, ziemlich überwältigend sein. In diesem Artikel werfen wir einen Blick auf die Unterschiede zwischen AWS CloudFormation und Terraform, um Ihnen bei der Entscheidung zu helfen, welches Tool für Ihre Anforderungen besser geeignet ist.

Terraform vs. AWS CloudFormation: Unterschiede

Modularität

Beim Einsatz von IAC in großen Organisationen kann Modularität ein wichtiger Faktor für die Wahl des richtigen Tools sein.

Wolkenbildung

CloudFormation bietet keine native Unterstützung für Module. Es erlaubt Ihnen, sogenannte verschachtelte Stacks als Module zu verwenden.

  So löschen Sie Eingabeaufforderungen auf Bumble

Beispielsweise können Sie eine Standardkonfiguration für die Bereitstellung eines S3-Buckets in Ihrer Organisation haben. Sie erstellen also eine standardmäßige CloudFormation-Vorlage, die S3-Buckets erstellt. Wenn ein Endbenutzer jetzt den S3-Bucket erstellen möchte, kann er diese CloudFormation-Vorlage als verschachtelten Stack verwenden und einen Standard-S3-Bucket erstellen.

Es gibt auch einen weniger bekannten Dienst von AWS, den AWS-Servicekatalog die Ihnen bei der Modularität Ihrer AWS CloudFormation helfen können. Service Catalog ist ein AWS-Service, der speziell für Unternehmen entwickelt wurde, die den Umfang der AWS-Services einschränken möchten, um Compliance-, Sicherheits-, Kosten- oder Leistungsanforderungen zu erfüllen. Und rate was? AWS Service Catalog verwendet CloudFormation-Vorlagen im Backend.

Lassen Sie uns dies anhand eines Beispiels schnell verstehen. S3-Buckets können, wenn sie nicht richtig verwendet werden, schnell katastrophal für Ihre vertraulichen Daten sein. Nehmen wir das gleiche Beispiel: Sie möchten eine Standardmethode haben, wie Sie S3 in Ihrer Organisation verwenden möchten. Die erste Option besteht darin, die verschachtelte Stack-Vorlage zu erstellen, die in anderen CloudFormation-Stacks verwendet werden kann und genauso gut ist.

Wenn Sie nicht möchten, dass Benutzer diese Standardvorlage als verschachtelten Stack verwenden müssen, können Sie den AWS Service Catalog verwenden. Mit Service Catalog können Benutzer diese Standardvorlage über die Benutzeroberfläche der Konsole verwenden und einige Parameter für geringfügige Anpassungen angeben. Auf diese Weise können Sie steuern, wie die Infrastruktur in Ihren AWS-Konten bereitgestellt wird, und unerwünschte Szenarien verhindern.

Terraform

Terraform bietet native Unterstützung für Module. Sie können damit Standardkonfigurationen ähnlich wie AWS CloudFormation erstellen und in anderen Terraform-Konfigurationen verwenden.

Da Terraform ein Open-Source-Tool ist, können Sie auch einige vorgefertigte Open-Source-Module in der Terraform-Registrierung finden und verwenden. Sie können auch Ihre eigenen Module mit Ihren eigenen Konfigurationen erstellen und sie in einer privaten Modulregistrierung hosten.

Ich persönlich würde Terraform gegenüber CloudFormation bevorzugen, wenn Modularität eine große Anforderung wäre.

Die Verwendung eines verschachtelten Stapels in CloudFormation ist nicht so einfach wie die Verwendung von Modulen in Terraform. Der Hauptfaktor ist, dass die Übergabe von Daten aus einer CFN-Vorlage an den verschachtelten Stapel ziemlich kompliziert sein kann.

Es gibt keinen Standardort, an dem CloudFormation-Vorlagen geteilt werden können. Sie haben den AWS Service Catalog, aber das ist nur eine Möglichkeit für Sie, einige Regeln für die Erstellung einer Infrastruktur über die Konsole durchzusetzen. Bei uns dreht sich alles um Code. Wenn Sie Service Catalog verwenden, müssen Sie, obwohl einige komplizierte Aufgaben von CloudFormation-Dateien gekapselt sind, immer noch die manuelle Aufgabe durchlaufen, zur Konsole zu gehen und Parameter anzugeben, um Ihre Infrastruktur zu erstellen.

  So zeigen Sie meine Sperrliste auf Instagram an

Terraform hingegen hat eine festgelegte Methode zum Erstellen, Verwalten und Teilen der Module. Die genauen Anforderungen der Module können Sie in der Terraform-Modulregistrierung einsehen und ganz einfach in Ihren Terraform-Dateien verwenden.

Kontrolle und Governance über die Infrastruktur

Wenn Sie einschränken möchten, welche Ressourcen Ihre Mitarbeiter in Ihren AWS-Konten erstellen können: Sowohl AWS CloudFormation als auch Terraform bieten Ihnen die Mittel dazu.

Lassen Sie uns zuerst über CloudFormation sprechen. CloudFormation an sich bietet keine Kontrolle darüber, wie die Vorlagen verwendet werden, aber Sie können die AWS IAM-Richtlinien verwenden, um nur den Benutzern in Ihrem AWS-Konto zu erlauben, nur die standardmäßigen CloudFormation-Vorlagen für die Ressourcenerstellung zu verwenden. In unserem S3-Bucket-Beispiel möchten Sie möglicherweise alle „S3 Create“-Berechtigungen für Benutzer einschränken und ihnen nur erlauben, S3-Buckets aus AWS Service Catalog oder Nested Stacks zu erstellen.

Mit Terraform können Sie steuern, welche Ressourcen Ihre Benutzer mit einer Richtlinie als Code-Tool erstellen können Wächter. Mit Sentinel können Sie fein abgestimmte, logikbasierte Richtlinien durchsetzen, um Benutzeraktionen über Terraform zuzulassen oder zu verweigern. Sie können beispielsweise alle Ressourcen ablehnen, die S3-Buckets erstellen, und Benutzern nur erlauben, S3-Buckets aus einem Standardmodul zu erstellen.

Staatsverwaltung

Sowohl AWS CloudFormation als auch Terraform müssen die von ihnen verwalteten Ressourcen im Auge behalten.

Terraform speichert den Status Ihrer Infrastruktur in einer Statusdatei. Diese Datei wird standardmäßig lokal gespeichert, Sie können sie jedoch auf Remote-Backends wie S3 speichern und mehrere Benutzer Änderungen an derselben Infrastruktur vornehmen lassen.

CloudFormation verwaltet keine Statusdatei, zumindest keine, die wir sehen können. CloudFormation ist ein verwalteter Dienst, der also die gesamte Zustandspflege und -überprüfung im Hintergrund durchführt.

Sowohl AWS CloudFormation als auch Terraform bieten Ihnen die Möglichkeit, zu überprüfen, welche Änderungen an Ihrer Infrastruktur vorgenommen werden. In Terraform können Sie einen Befehl ausführen – „terraform plan“ und wie Terraform plant, Ihre Konfigurationsänderungen anzuwenden. In CloudFormation können Benutzer diese Informationen über Change Sets sehen.

Sprache

Terraform verwendet die HashiCorp Configuration Language, HCL, eine von HashiCorp erstellte Sprache. Es ist JSON mit zusätzlichen integrierten Funktionen und Fähigkeiten sehr ähnlich.

  So aktivieren Sie das versteckte E-Mail-Vorschaufenster von Gmail

CloudFormation-Vorlagen sind im YAML- oder JSON-Format geschrieben

Protokollierung und Rollbacks

Sowohl AWS CloudFormation als auch Terraform verfügen über gute Protokollierungsfunktionen. Nach meiner Erfahrung waren die Fehler und Probleme (größtenteils) unkompliziert.

CloudFormation: Standardmäßig setzt CloudFormation im Falle einer fehlgeschlagenen Stack-Änderung alle Ihre Änderungen zurück. Dies ist eine gute Funktion und kann für Debugging-Zwecke deaktiviert werden.

Terraform: Terraform setzt Ihre Änderungen nicht automatisch zurück, falls es fehlschlägt. Dies ist kein Problem, da Sie jederzeit den Befehl terraform Destroy ausführen können, um die halb bereitgestellte Konfiguration zu löschen und einen Terraform-Lauf erneut zu starten.

Zielfernrohr

Terraform ist nicht auf AWS Cloud beschränkt. Der wichtigste Faktor bei der Wahl zwischen Terraform und CloudFormation ist, dass Terraform andere Cloud-Anbieter und -Dienste unterstützt.

Wenn Sie also planen, IAC für mehrere Cloud-Plattformen zu verwenden, ist Terraform Ihre beste Wahl. CloudFormation ist zwar ein leistungsstarkes Tool, aber nur auf AWS beschränkt. Durch die Verwendung von Terraform können Sie eine Infrastruktur einrichten und Ihre Anwendung auf mehreren Cloud-Plattformen bereitstellen, wodurch Ihre Anwendung verfügbarer und robuster wird.

Funktionsunterstützung

Wenn AWS neue Services und Funktionen einführt, wird CloudFormation normalerweise vor Terraform aktualisiert, da es sich um einen AWS-Service handelt. Ab sofort decken beide Tools die meisten Dienste und Funktionen dieser Dienste ab. Dies kann ein kleiner Nachteil bei der Verwendung von Terraform sein, aber wir haben eine Lösung.

Es besteht auch die Möglichkeit, einen CloudFormation-Stack in Ihrem Terraform-Code zu erstellen. Wenn Sie also Terraform verwenden und es keine Funktion hat, können Sie vorübergehend einen CloudFormation-Stack in Ihrem Terraform-Code einrichten.

Technischer Support

Der kostenpflichtige Plan für technischen AWS-Support umfasst auch CloudFormation-Support.

HashiCorp hat auch Pläne für technischen Support auf Terraform bezahlt.

Fazit

Sowohl AWS CloudFormation als auch Terraform sind leistungsstarke und ausgereifte Tools. Die oben genannten Unterschiede helfen Ihnen, eine fundierte Entscheidung zu treffen, um das Tool basierend auf Ihren Anforderungen auszuwählen. Als persönlicher Vorschlag: Wenn Sie planen, in Zukunft mehrere Cloud-Plattformen zu verwenden oder derzeit mehrere Clouds verwenden, sollten Sie Terraform als One-Stop-Shop für alle Ihre Anforderungen nutzen. Wenn Sie nach einem IAC-Tool nur für AWS suchen, sind sowohl AWS CloudFormation als auch Terraform ein faires Spiel.

Wenn Sie daran interessiert sind, Terraform zu lernen, sehen Sie sich diese Online-Kurse an.