Getty Images/iStockphoto

AWS CloudFormation und Terraform im Vergleich

Wenn Infrastructure as Code als guter Ansatz für die eigene AWS-Umgebung identifiziert wurde, gilt es danach ein Tool auszuwählen. Dafür müssen die Anforderungen geklärt werden.

Wenn Sie eine Cloud-basierte Infrastruktur starten und verwalten, sind zuverlässige Tools zur Automatisierung des gesamten Prozesses unerlässlich. Vom Start der Umgebung über die Bereitstellung von Code bis hin zu regelmäßigen Infrastruktur-Updates spielt die Automatisierung eine Schlüsselrolle bei der Bereitstellung solider und effizienter Verfahren zum Start moderner Softwareanwendungen. Infrastructure as Code ist zu einem unverzichtbaren Ansatz geworden, um das zu erreichen.

Wenn Sie eine AWS-Umgebung nutzen und Infrastructure as Code (IaC) einsetzen möchten, sind AWS CloudFormation und Terraform zwei beliebte Optionen. Aber welche ist die passende Lösung für die eigenen Anforderungen? Lernen Sie die beiden IaC-Tools besser kennen und sehen Sie, wie sie sich in Bezug auf wichtige Funktionen wie Modularität, Vorlagenanpassung, Fehlerbehandlung und Support unterscheiden.

Wählen Sie das richtige IaC-Tool

IaC bietet einen codebasierten Ansatz für den Start und die Konfiguration von Infrastrukturressourcen wie Rechenleistung, Storage, Netzwerk und Sicherheit. IAC erfordert eine textbasierte Vorlage mit einer standardisierten Syntax für jede Infrastrukturressource. Das ermöglicht den Eigentümern von Anwendungen die Anwendung einer Versionskontrolle und die Minimierung manueller Eingriffe in den Freigabeprozess. IaC spart Softwareentwicklungsteams viel Zeit und sorgt für Konsistenz und Zuverlässigkeit in allen Anwendungsumgebungen. Außerdem wird die Prozesseffizienz durch die Wiederverwendbarkeit von Vorlagen und Konfigurationen innerhalb eines Unternehmens verbessert.

Was ist AWS CloudFormation?

AWS CloudFormation wurde 2011 eingeführt und ist ein IaC-Service, mit dem Benutzer AWS-Ressourcen mithilfe von Vorlagen modellieren und einrichten können. Der Service stellt diese Ressourcen in einer geordneten, wiederholbaren und vorhersehbaren Weise bereit und verwaltet sie. Die Lernkurve ist recht einfach, da die meisten Entwickler bereits mit der JSON- und YAML-Syntax vertraut sind. Bei der Verwendung von CloudFormation wird dringend empfohlen, YAML anstelle von JSON zu verwenden, da diese Syntax einfacher zu handhaben ist. Sie ist weniger ausführlich als JSON und ermöglicht das Hinzufügen von Kommentaren, was für Teammitglieder eine wichtige Funktion zur Überprüfung bestehender Vorlagen ist. Vier wichtige Konzepte bei der Verwendung von AWS CloudFormation sind Vorlagen, Stapel, Änderungssätze und Stapelsätze.

Abbildung 1: Das sind die Vor- und Nachteile von AWS CloudFormation.
Abbildung 1: Das sind die Vor- und Nachteile von AWS CloudFormation.

Was ist Terraform?

HashiCorp Terraform wurde 2014 veröffentlicht und ist ein Open-Source-Software-Tool, mit dem IT-Teams die Bereitstellung von Infrastrukturen mit wiederverwendbaren, gemeinsam nutzbaren und von Menschen lesbaren Konfigurationsdateien sowohl für lokale als auch für Cloud-Umgebungen automatisieren können. Terraform hat eine eigene Vorlagensyntax namens HashiCorp Configuration Language, besser bekannt als HCL. Die Einarbeitung in die HCL kann für Entwickler einige Zeit in Anspruch nehmen, da die Sprache  möglicherweise ungewohnt ist.

Abbildung 2: Das sind die Vor- und Nachteile von Terraform.
Abbildung 2: Das sind die Vor- und Nachteile von Terraform.

Vergleichen Sie die wichtigsten Funktionen

AWS CloudFormation und Terraform verwenden das Konzept eines Stacks, das heißt einer Gruppierung von Cloud-Komponenten, die als Bereitstellungseinheit verwaltet werden. Stacks können Anwendungen, Umgebungen und jede Gruppierung anordnen, die für eine bestimmte Organisation relevant ist. Parameter definieren Cloud-Ressourcen, die für den Typ der zu startenden Cloud-Komponenten spezifisch sind. Beide Tools verwenden dynamische Parameter, die für einen Start relevant sind, zum Beispiel das Starten unterschiedlicher Amazon-EC2-Instance-Typen für eine Entwicklungsumgebung und eine Produktionsumgebung.

Wir werden uns diese vier Bereiche genauer ansehen:

  • Modularität
  • Template-Anpassungen
  • Behandlung von Fehlern
  • Support

Modularität

Modularität ist die Fähigkeit, gemeinsame Komponenten zu erstellen, die über mehrere Bereitstellungen hinweg wiederverwendet werden können. AWS CloudFormation bietet die Funktion Module, bei der es sich um Bausteine handelt, die zu einer gemeinsamen Registry hinzugefügt und über mehrere Stacks innerhalb eines einzigen Kontos oder über mehrere AWS-Konten hinweg wiederverwendet werden.

Terraform verfügt über eine ähnliche Funktion, die ebenfalls Module genannt wird und mit der gemeinsame Konfigurationen wiederverwendet und entweder lokal oder remote in benutzerdefinierten Registries oder Git-Repositories verwaltet werden.

Vorlagenanpassung

Was die Anpassung von Vorlagen angeht, so bietet Terraform im Vergleich zu AWS CloudFormation eine größere Auswahl an integrierten Funktionen. In vielen Fällen ist es äußerst nützlich, dynamische Konfigurationen auf einen Stack anzuwenden, die auf Bedingungen und benutzerdefinierter Logik basieren. In diesem Bereich bietet Terraform mehr Flexibilität, da die Palette der in AWS CloudFormation integrierten Funktionen begrenzt ist. AWS CloudFormation bietet jedoch eine integrierte Integration mit benutzerdefinierten Lambda-Funktionen, die vom Stack-Eigentümer erstellt werden und komplexe Logik während Stack-Aktualisierungen ausführen können.

Behandlung von Fehlern

Es ist nicht ungewöhnlich, dass Aktualisierungen aus verschiedenen Gründen – von falschen Konfigurationen bis hin zu externen Fehlern – nicht angewendet werden. AWS CloudFormation bietet einen zuverlässigen Mechanismus zur Fehlerbehandlung, der es Entwicklern ermöglicht, Ressourcen, die mit einer fehlgeschlagenen Stack-Erstellung oder -Aktualisierung verbunden sind, entweder beizubehalten, zu aktualisieren oder zurückzusetzen. Terraform bietet keine native Rollback-Funktion, was bedeutet, dass Entwickler die nächsten Schritte speziell anwenden müssen, um die betroffenen Ressourcen entweder zu entfernen oder zu aktualisieren.

Die Änderungssätze von AWS CloudFormation bieten Entwicklern eine High-Level-Visualisierung von Ressourcen-Updates, bevor sie auf einen Stack angewendet werden und den Vorgang entweder fortsetzen oder abbrechen. Terraform verfügt über eine ähnliche Funktion namens Plan, die die Wahrscheinlichkeit verringert, dass unerwünschte, potenziell zerstörerische Aktualisierungen auf einen Stack angewendet werden.

Support

Ein wichtiger Unterschied zwischen den beiden IaC-Tools besteht darin, dass Terraform mehrere Cloud-Anbieter unterstützt, zum Beispiel AWS, Azure, Google Cloud Plattform, Oracle und Digital Ocean, während CloudFormation nur AWS unterstützt. Für einen Multi-Cloud-Ansatz ist Terraform definitiv eine empfehlenswerte Option. Denken Sie daran, dass jeder Cloud-Anbieter einen anderen Satz von Parametern und Konfigurationen benötigt, die Benutzer in Terraform angeben müssen, was zu einem komplexen Satz von Vorlagen führen kann.

Da Terraform kein Tool ist, das von einem Cloud-Anbieter veröffentlicht wird, sind neue Funktionen einer bestimmten Plattform nicht unbedingt in Terraform verfügbar. Im Falle von AWS hat CloudFormation im Vergleich zu Terraform einen kürzeren Zeitrahmen, bevor neue AWS-Funktionen und -Services für die Einführung mit IaC verfügbar sind. Bei der Verwendung von CloudFormation gibt es die Möglichkeit, den AWS-Support bei möglichen Problemen einzuschalten. Terraform bietet keinen direkten Support von Cloud-Anbietern, sondern nur von HashiCorp und Online Communities.

Erfahren Sie mehr über Cloud-Software