CDKTF – CDK for Terraform

CDKTF – CDK for Terraform

Avatar von Max Tharr

Dieser Blogartikel beschäftigt sich mit dem Thema CDK for Terraform (CDKTF). Dabei handelt es sich um eine Technologie, die Terraform mit Konzepten des AWS CDK (Cloud Development Kit) kombiniert.

CDKTF soll Entwickelnden den Einstieg in Infrastructure-as-Code (IaC) erleichtern, indem es eine vertraute Programmiersprache und eine objektorientierte Struktur verwendet. Allerdings gibt es noch einige Einschränkungen, da derzeit nur TypeScript vollständig unterstützt wird. Python und andere Programmiersprachen haben weniger Beispiele und Tooling.

Stacks und Constructs

Ein Vorteil von CDKTF ist der Aufbau von Stacks, der das Kapseln und Wiederverwenden von Codeeinheiten übersichtlich gestaltet. Gerade die automatische Abbildung von Abhängigkeiten zwischen Ressourcen fällt hier auf.

Es ist besonders für mit objektorientierter Programmierung vertraute EntwicklerInnen gedacht, da ähnliche Denkstrukturen verwendet werden. Für erfahrene Terraform-CoderInnen ist der Vorteil gegenüber Modulen nur in besonderen Fällen vorhanden.

Unterschiede zu CDK

Eine ganz so flache Lernkurve wie bei CDK gibt es in CDKTF nicht:

    bucket.grantReadWrite(lambda); 

… reicht in CDK aus, um einem Lambda Lese- und Schreibzugriff auf einen Bucket zu geben. Im Hintergrund werden eine ServiceRole erstellt und Permissions vergeben. CDK teilt vor dem Deploy mit, was im Hintergrund passiert, der/die EntwicklerIn muss jedoch nicht vorher wissen, welche Ressourcen notwendig sind.

Für erfahrene Solution Architects ist dies vielleicht nicht mal wünschenswert, aber für EntwicklerInnen, die ihre ersten Schritte in Richtung Cloud-Deployments gehen, wird die Einstiegshürde enorm gesenkt.

CDKTF abstrahiert die Komplexität der Ressourcen nicht in dieser Form, hier ist die gewohnte Verbosität von Terraform der Fall. Als starkes Gegenargument jedoch unterstützt CDKTF das Einbinden von Terraform-Modulen, die viele komplexe AWS-Architekturen nach Best Practices abbilden. Diese können in einigen Fällen durchaus mächtiger sein als vergleichbare Abstraktion von CDK.

Es sollte auch erwähnt werden, dass CDK unter der Haube CloudFormation-Konfigurationen produziert, während CDKTF in Terraform-Code kompiliert wird. Beides hat seine Vor- und Nachteile: Cloudfront ist AWS-nativ und der State wird in AWS verwaltet, während Terraform ein Third-Party-Tool ist, dessen State vom User verwaltet wird. Dafür ist Terraform bei großen Applikationen häufig schneller in Deployments und in der selben Codebasis können Ressourcen für andere Clouds definiert werden.

Kompatibilität CDK – CDKTF

Eine Kompatibilität von CDK-Code mit CDKTF ist in absehbarer Zeit nicht zu erwarten. Es gibt einen Technical Preview zu einem Adapter, der allerdings noch weit davon entfernt ist, vollständig oder production-ready zu sein. Der Adapter wandelt CDK-Constructs in CDKTF-Constructs um, kann allerdings nicht mit ganzen Stacks umgehen und kennt auch viele Constructs noch nicht.

Die Interoperabilität von CDKTF und Terraform ist hingegen vollständig gegeben. Das gibt CDKTF im Vergleich zu CDK den Vorteil, auf bestehende Terraform-Codebasen aufzusetzen und von der großen Terraform Registry zu profitieren.

Der Status von CDKTF

CDKTF ist noch nicht stable. Wenn man sich die Code-Frequenz anschaut, war die größte Aktivität auf dem Repository im ersten Halbjahr 2022. Es ist also nicht völlig sicher, ob es jemals zur Version 1.0.0 kommen wird. Da die Aktivität trotzdem noch hoch ist und mehrere HashiCorp-Entwickler in Vollzeit daran arbeiten, würde ich es allerdings definitiv nicht abschreiben.

Entwicklungsverlauf in CDKTF
Im ersten Halbjahr 2022 ist viel passiert in CDKTF

Entscheidender ist jedoch, dass die Fallhöhe nicht besonders hoch ist, falls CDKTF eingestellt werden sollte. Man behält immer den vollwertigen Terraform-Code und kann notfalls ohne Unterbrechung in Terraform weiter machen.

Wer damit leben kann, muss sich meiner Ansicht nach nicht von dem 0.X.X-Status von CDKTF abschrecken lassen.

Meine Empfehlung

Ich sehe die Zielgruppe von CDKTF recht eindeutig in Software-EntwicklerInnen, die damit beginnen wollen, ihre Cloud-Ressourcen selbst als IaC zu schreiben (unabhängig davon in welcher Cloud – dank Terraform als Basis).

Gerade wer sich in TypeScript zu Hause fühlt, wird die familiäre Syntax und die objektorientierte Formulierung zu schätzen wissen – und eine niedrigere Einstiegshürde haben als bei einem Start direkt mit Terraform.

Die Möglichkeiten, jederzeit mit der generierten Terraform-Codebasis weiterzuarbeiten oder Deployment-Code in CDKTF auf in der Firma bestehende Infrastruktur (definiert in Terraform) aufzubauen, eignen sich gut, um den Einstieg in das Thema DevOps zu erleichtern.

Besonders interessant halte ich CDKTF für Teams, die ihre aktuellen Deployments in CDK definiert haben und zu Terraform wechseln wollen; zum Beispiel wegen langer Deploymentzeiten von CloudFormation. Die ähnlichen Muster und Strukturen – auch wenn die Ressourcen/Constructs sich im Aufbau unterscheiden – machen den Übergang sehr viel einfacher, als wenn das gleiche Team direkt zu Terraform wechseln würde. Ein späterer Umstieg auf Terraform ist einfach, dank Interoperabilität mit und Kompilierung zu Terraform-Code.

Avatar von Max Tharr

Kommentare

Schreibe einen Kommentar

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


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.