Infrastructure as Code: AWS CloudFormation vs. Terraform

15.02.2023

Durch „Infrastructure as Code“ (IaC) können IT-Infrastrukturen im Vergleich zum manuellen Infrastrukturmanagement einfach gewartet, konfiguriert und automatisch bereitgestellt werden. Auf Basis von Code wird so die gesamte IT-Infrastruktur definiert.

Im Cloud-Umfeld wird zur Umsetzung von IaC zum Beispiel auf die Tools „AWS CloudFormation“ oder „Terraform“ zurückgegriffen. Doch welches dieser IaC-Tools sollte im IT-Projektumfeld gewählt werden?

 

Was ist „AWS CloudFormation“?

Quelle: https://aws.amazon.com/de/architecture/icons/

AWS CloudFormation ist die offizielle Infrastructure as Code (IaC) Lösung von Amazon Web Services (AWS).
Sie orchestriert und automatisiert das Anlegen, Aktualisieren und Löschen von AWS Ressourcen auf Basis von Templates.

Dies ermöglicht die Dokumentation, Versionierung und Speicherung der Infrastruktur in Form von Textdateien.

Die Hauptkomponenten von CloudFormation sind:

  • Templates/Vorlagen: deklarative Skripte, die definieren, wie die Infrastruktur aussehen soll
  • Stacks: Instanziierungen eines Templates/einer Vorlage
  • StackSets: Verwaltung von Stacks über Accounts und Regionen hinweg

Die Templates können mit dem AWS CloudFormation Designer erstellt und zum Anlegen eines Stacks verwendet werden. Nach dem Anlegen eines Stacks kann dieser über die AWS Konsole anschließend verwaltet, z.B. aktualisiert oder gelöscht werden.

 

Was ist „Terraform“?

Terraform Logo
Quelle: https://www.hashicorp.com/brand

Terraform ist die Infrastructure as Code (IaC) Lösung von HashiCorp.
Sie automatisiert das Anlegen und Managen von Cloud Ressourcen verschiedener Cloud-Anbieter.

Die Hauptkomponenten von Terraform sind:

  • Konfigurationsdateien (.tf-Datei): deklarative Skripte, die die Konfigurationsinformationen der anzulegenden Cloud Ressourcen beinhalten (Auslagerung von Variablen in weitere Konfigurationsdateien möglich)
  • eine Statusdatei (terraform.tfstate-Datei): aktuelle Version der Infrastruktur

Die Konfigurationen können über verschiedene Befehle angewendet bzw. ausgeführt werden:

  • (optional) terraform refresh: Aktuelle Infrastruktur abfragen
  • (optional) terraform plan: Anlegen eines Plans auf Basis der Konfigurationsdateien inkl. Auflistung der auszuführenden Schritte
  • terraform apply: Ausführung des Plans und Umsetzung der Änderungen (Anlegen/Modifizieren der Ressourcen)
  • terraform destroy: Löschen von Ressourcen oder der gesamten Infrastruktur

 

 

Welche Vorteile oder Nachteile haben AWS CloudFormation und Terraform im Vergleich?

Multi-Cloud Unterstützung:

AWS CloudFormation ist auf die Orchestrierung von AWS Ressourcen spezialisiert, ermöglicht aber auch die Integration weiterer Cloud-Anbieter. Terraform agiert Cloud-neutral und unterstützt eine Vielzahl von Cloud-Anbietern wie z.B. Google Cloud oder Azure.

Lizenz und Supportangebot:

AWS CloudFormation kann innerhalb von AWS kostenlos genutzt werden. Der AWS Support wird je nach gebuchtem Support-Plan zur Verfügung gestellt. Terraform ist ein reines Open-Source IaC-Tool. Ein Support wird auch von HashiCorp angeboten, jedoch ohne Support-SLAs (Service-Level-Agreement).

Integration von Services und Funktionen:

Sowohl AWS CloudFormation als auch Terraform zielen auf eine schnelle Integration neuer AWS Services und Funktionen ab. Die flexiblere und modularere Architektur von Terraform, kann allerdings manchmal eine schnellere Integration neuer Funktionen ermöglichen. Da es sich bei Terraform um ein Open-Source-Tool handelt, kann zudem auf eine große Entwicklergemeinschaft zurückgegriffen werden, die gemeinsam an der Integration arbeiten kann. Dennoch wird AWS CloudFormation von AWS selbst entwickelt und gewartet, was zu einer umfassenderen und konsistenteren Integration führt.

Konfiguration / Programmierung:

AWS CloudFormation kann über eine Benutzeroberfläche oder CLI gesteuert werden. Die Konfiguration der IT-Infrastruktur erfolgt in AWS CloudFormation über JSON und YAML basierte Templates. Eine Codeanalyse wird über CloudFormation Linter unterstützt. Sollen gängige Programmiersprachen verwendet werden, kann IaC auch über das „AWS Cloud Development Kit“ (AWS CDK) definiert werden.
Terraform ist ein rein CLI-basiertes Tool. Die Terraform-Templates basieren auf der „Hashicorp Configuration Language“ (HCL). Dieses Format ist dem JSON Format sehr ähnlich. Eine Codeanalyse dieser Templates kann mit TFLint oder Chekov durchgeführt werden. Auch Terraform bietet über das IaC-Tool „Pulumi“ die Möglichkeit, gängige Programmiersprachen zu verwenden. Ebenso kann das Tool „Cloud Development Kit for Terraform“ (CDKTF) genutzt werden, welches in Kooperation von AWS und Terraform entstanden ist.

Module / Ressourcen / Parameter:

AWS CloudFormation ermöglicht die Konfiguration von Modulen und Ressourcen. Über Cross-Stacks-Referenzen können Ausgabeparameter in AWS CloudFormation generiert und als Eingabeparameter in anderen Stacks verwendet werden. In Terraform stehen ebenfalls mehrere Module und Ressourcen zur Verfügung, die je nach Bedarf zusammengestellt werden können. Auch Template-Werte können exportiert und so als Ausgabe- bzw. Eingabeparameter für andere Ressourcen genutzt werden.

Import von Ressourcen:

Über AWS CloudFormation können eine Reihe definierter Ressourcen importiert werden. Es ist auch möglich, bestehende Ressourcen über Terraform zu importieren, selbst wenn diese nicht über Terraform erstellt wurden.

Zustandsverwaltung:

Die Verwaltung des aktuellen Status ist in AWS CloudFormation über Stacks möglich. Widersprüchliche Änderungen und parallele Bearbeitungen werden so vermieden. Die Statusinformationen von Terraform werden in .tfstate-Dateien gespeichert. Durch die Konfiguration von „remote state“ stellt AWS die Speicherung dieser Statusinformationen z.B. über einen AWS S3 Bucket sicher. Eine parallele Bearbeitung und Ausführung von Terraform kann durch „remote locking“ verhindert werden.

Änderungsverwaltung:

Sowohl in AWS CloudFormation, als auch in Terraform, können Änderungen nachträglich vorgenommen werden.
Mit Hilfe von Change-Sets erstellt AWS CloudFormation eine Änderungshistorie der zuletzt eingespielten Templates (SOLL-Zustand) zu den neu geplanten Änderungen. Um Änderungen zu ermitteln, die außerhalb von AWS CloudFormation durchgeführt wurden, sollte eine „Drift Detection“ genutzt werden. Damit können geänderte Ressourcen identifiziert werden, die im Stack Template aktualisiert werden müssen, um einen konsistenten Betrieb zu gewährleisten.
In Terraform werden via „terraform plan“ alle geplanten Änderungen aus der Konfigurationsdatei des IST-Zustandes der Infrastruktur ermittelt. Diese Übersicht beinhaltet automatisch auch die Änderungen, die nicht über Terraform durchgeführt wurden.

Fehlerbehandlung und Rollback:

Tritt ein Fehler auf, erfolgt in AWS CloudFormation ein automatischer Rollback auf den letzten funktionsfähigen Zustand. Ein solcher automatischer Rollback ist in Terraform nicht möglich. Die .tf-Datei muss manuell angepasst und erneut ausgerollt werden, um eine funktionierende Infrastruktur bereitzustellen.

 

AWS CloudFormation oder Terraform?

Wenn das IT-Projektteam bereits Erfahrung mit AWS CloudFormation oder Terraform hat, kann es einfacher sein, das bereits vertraute IaC-Tool zu verwenden.
Generell hängt die Wahl des Tools stark von den spezifischen Anforderungen und Einschränkungen des IT-Projekts ab.
Soll beispielsweise die Zielinfrastruktur und damit deren Ressourcen und Funktionalitäten hauptsächlich im AWS-Ökosystem liegen, ist AWS CloudFormation die bessere Wahl. Sollen hingegen Ressourcen für mehrere Cloud-Provider orchestriert werden, sollte auf Terraform zurückgegriffen werden.

 

Quellen:
https://aws.amazon.com/de/cloudformation/
https://developer.hashicorp.com/terraform/cli
https://cloudonaut.io/cloudformation-vs-terraform/
https://www.toptal.com/terraform/terraform-vs-cloudformation

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*