AWS CDK und Terraform – Sie sind sich nicht sicher, was Sie wählen sollen? Dieser Artikel hilft Ihnen, eine fundierte Entscheidung zu treffen.

Cloud Computing hat die Welt der Information und Technologie revolutioniert. Von der Art und Weise, wie wir Anwendungen bereitstellen und warten, bis hin zu den Entwicklungspraktiken wurde alles stark von Cloud Computing beeinflusst. Alle neuen Anwendungen werden Cloud-nativ und mit Cloud-Diensten kompatibel entwickelt.

Cloud Computing hilft uns, hochverfügbare, skalierbare und effiziente Architekturen zu entwickeln, wodurch Cloud-Dienste immer gefragter werden. Mit diesem Boom des Cloud Computing ist es erforderlich, die Infrastruktur als Code zu verwalten. Die manuelle Verwaltung von Cloud-Ressourcen über die Konsole kann eine komplexe Aufgabe sein, die sehr schwer nachzuverfolgen ist.

Infrastruktur als Code, auch bekannt als IAC oder IAAC, löst dieses Problem. Durch die Verwendung von IAC können wir unsere Ressourcen als Code definieren und diesen Code verwenden, um Cloud-Dienste bereitzustellen. Die Verwendung von Infrastruktur als Code ermöglicht es mehreren Entwicklern, an der Infrastruktur zusammenzuarbeiten und die von Entwicklern vorgenommenen Änderungen zu verfolgen.

Infrastructure as a Code in AWS

AWS ist der größte und am weitesten verbreitete Cloud-Anbieter weltweit. Es verfügt über ein eigenes IAC-Tool, AWS CloudFormation oder AWS CDK, und ermöglicht auch IAC-Tools von Drittanbietern wie Terraform, Ressourcen bereitzustellen. Bei der Auswahl von IAC-Tools für AWS ist Terraform, ein Drittanbieter-Tool, eine solide Konkurrenz zu den von AWS verwalteten Tools AWS CloudFormation und AWS CDK.

Bei so vielen Auswahlmöglichkeiten und Funktionen, die jedes dieser Tools bietet, kann die Auswahl des richtigen IAC-Tools eine Herausforderung sein. In diesem Artikel werden wir den Unterschied zwischen AWS CDK und Terraform diskutieren. AWS CDK verwendet Cloudformation intern. Um einen tieferen Einblick in Cloudformation und Terraform zu erhalten, lesen Sie bitte den zugehörigen Artikel IAC-Tools verstehen: CloudFormation vs. Terraform.

Terraform

Terraform ist eine Open-Source-Infrastruktur als Code-Tool, das ursprünglich von Hashicorp entwickelt wurde. Es ist ein hochpräzises und ausgereiftes Tool, das nicht nur AWS, sondern auch andere Cloud-Anbieter unterstützt. Terraform unterstützt alle AWS-Services, und die Entwickler-Community nimmt jede neue Funktion, die AWS zu seinen Services hinzufügt, schnell auf. Es ermöglicht uns, Code in der von Hashicorp entwickelten Sprache (HCL) zu schreiben. HCL ist eine JSON-ähnliche Sprache zum Definieren von Infrastrukturressourcen.

AWS-CDK

AWS CDK ist ein Wrapper um AWS CloudFormation. Um die Funktionsweise des AWS CDK zu verstehen, sollten Sie ein wenig über AWS CloudFormation wissen. AWS CloudFormation ist ein von AWS verwaltetes Tool, mit dem wir die AWS-Infrastruktur im YML- oder JSON-Format definieren können. Obwohl das Lesen von JSON und YML einfach ist, handelt es sich nicht um echte Programmiersprachen. Es gibt keine native Unterstützung für Schleifen und Funktionen, was die Wartung großer Infrastrukturen immer schwieriger macht. Hier kommt AWS CDK ins Spiel.

AWS CDK ist ein Wrapper um AWS CloudFromation, mit dem Sie vertraute Programmiersprachen wie JAVA oder Python verwenden können, um Ihre Infrastruktur bereitzustellen. Dies erleichtert das Schreiben und Verwalten von Code.

Terraform vs. AWS CDK: Differences

# 1. Sprache und Benutzerfreundlichkeit

Sprache und Benutzerfreundlichkeit sind entscheidend, um den Unterschied zwischen dem AWS CDK und Terraform zu verstehen.

Lassen Sie uns zuerst über Terraform sprechen. Terraform verwendet eine JSON-ähnliche Sprache, um Ressourcen und andere Daten zu definieren, die HCL oder HashiCorp Configuration Language. Es ist ziemlich einfach und die Dokumentation ist selbst für Anfänger leicht zu verstehen und zu befolgen.

Sehen wir uns einen Code zum Erstellen eines S3-Buckets an.

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Der Code ist ziemlich einfach zu lesen, und Sie können andere Parameter sehen, die diese Ressource in der unterstützt Terraform-Dokumentation.

Wie bereits erwähnt, ist AWS CDK ein CloudFormation-Wrapper, mit dem wir unsere Ressourcen in Programmiersprachen definieren können. Sehen wir uns einen AWS CDK-Code zum Erstellen eines S3-Buckets an.

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

export class BucketStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: 'my-first-bucket',
    });
 }
}

Terraform-Code kann etwas ordentlicher aussehen als das CDK, aber sowohl Terraform- als auch CDK-Codes sind ziemlich einfach. Wenn Sie vorhaben, IAC für ein kleines Projekt zu verwenden, sind sowohl Terraform als auch CDK in Bezug auf Sprache und Benutzerfreundlichkeit großartige Optionen.

Bei der Auswahl des richtigen IAC-Tools für ein großes Projekt mit vielen Entwicklern hat Terraform jedoch einen Nachteil. So einfach Terraform auch ist, es ist eine neue Sprache, und Sie müssen Ihre Entwickler in einer völlig neuen Sprache schulen, die den anderen verwendeten Programmiersprachen nicht ähnlich ist. Noch wichtiger ist, dass die Datenmanipulation in Terraform nicht so einfach ist wie in anderen Programmiersprachen. Beispielsweise ist das Durchlaufen von Listen und Objekten und das Transformieren von Werten nicht so einfach, insbesondere für Anfänger.

Persönlich würde ich AWS CDK Terraform vorziehen, wenn ich die Benutzerfreundlichkeit bedenke. Bei der Verwendung von Terraform musste ich manchmal Problemumgehungen oder komplizierte Skripte verwenden, um die gewünschten Ergebnisse zu erzielen. Die Kontrolle, die wir über Daten haben, und die Möglichkeit, Daten in AWS CDK-Sprachen einfach zu manipulieren, ist ein großer Gewinn für AWS CDK.

# 2. Geltungsbereich

Terraform ist ein Multi-Cloud-IAC-Tool, was bedeutet, dass Sie Terraform nicht nur mit AWS, sondern auch mit anderen Cloud-Anbietern wie Azure oder GCP verwenden können. Terraform ist ein großartiges Tool, um Multi-Cloud-Bereitstellungen zu erstellen und eine beliebige Anzahl von Cloud-Anbietern für Ihre Anwendung zu haben.

Es gab Zeiten, in denen weit verbreitete globale Plattformen aufgrund eines Problems in den Diensten des Cloud-Anbieters ausfielen. In der heutigen Zeit ist es eine kluge Entscheidung, mehr als einen Cloud-Anbieter für Ihre Anwendungen zu haben.

AWS CDK ist ein AWS-Angebot für IAC. So leistungsfähig und ausgereift das CDK auch sein mag, es ist nur auf AWS Cloud beschränkt.

Wenn man den Umfang der IAC-Tools betrachtet, ist Terraform der offensichtliche Gewinner der beiden. Es ist sehr sinnvoll, wenn Ihre Entwickler ein einziges Tool für alle Cloud-Plattformen verwenden.

# 3. LEISTUNG

Leistung ist normalerweise nicht das wichtigste Kriterium bei der Auswahl des richtigen IAC-Tools, kann aber in großen Projekten von Bedeutung sein. Terraform stellt Ressourcen mithilfe des AWS SDK bereit, während der CDK-Code zuerst in CloudFormation-Vorlagen konvertiert und dann angewendet wird.

Terraform würde etwas schneller arbeiten als AWS CDK, insbesondere wegen der Zeit, die CDK benötigt, um Code in die CloudFormation-Vorlage zu konvertieren.

# 4. Modularität

Sowohl Terraform als auch AWS CDK können zum Erstellen von Modulen verwendet werden. Terraform bietet native Unterstützung für Module. Sie können Ihre eigenen Module erstellen und sie in einer privaten Modulregistrierung zur Verwendung in Ihrer Organisation hosten. Terraform verfügt auch über eine öffentliche Modulregistrierung zum Hosten und Verwenden öffentlicher Module.

In AWS CDK können Sie wiederverwendbare Funktionen und Klassen erstellen und diesen Code innerhalb Ihrer Organisation freigeben, um das gleiche Ergebnis zu erzielen. Dies ist ein großes Plus in AWS CDK als dem anderen AWS IAC-Tool – CloudFormation erlaubt Ihnen nicht, Code als Module zu erstellen und wiederzuverwenden. Sie können verschachtelte Stacks in CloudFormation verwenden, um diese Anforderung zu erfüllen, aber die Verwendung von AWS CDK ist eine viel geeignetere Alternative.

Alles in allem sind sich beide Tools in diesem Aspekt ähnlich.

# 5. Kontrolle und Governance

Letztendlich wird der gesamte Zugriff auf die AWS-Konsole von IAM, dem Identity Management Service von AWS, kontrolliert. Sie können IAM-Richtlinien sowohl mit AWS CDK als auch mit Terraform verwenden, um bestimmte Aktionen zuzulassen oder abzulehnen. Mit IAM können Sie genau steuern, welche Aktionen für Ihr Konto ausgeführt werden können.

Neben der Verwendung von IAM zur Steuerung des Zugriffs auf Kontoressourcen bietet Terraform eine Richtlinie als Code-Framework, Wache. Mit Sentinel können Sie fein abgestimmte Richtlinien schreiben, um die Aktionen eines Benutzers über Terraform korrekt zu steuern.

Fazit

Da AWS CDK intern CloudFormation verwendet, schlage ich vor, dass Sie die CloudFormation vs. Terraform Artikel, um die Unterschiede zwischen AWS CDK und Terraform besser zu verstehen.

Insgesamt sind sowohl AWS CDK als auch Terraform ausgereifte und leistungsstarke Tools. Einen leichten Nachteil hat Terraform bei der Datenmanipulation. Meiner Erfahrung nach wird es jedoch einfacher, Workarounds zu verwenden und Datentransformationen durchzuführen, sobald Sie sich mit dem Schreiben von Terraform vertraut gemacht haben. Für Multi-Cloud-Operationen ist Terraform eine offensichtliche Wahl; Wenn Sie jedoch AWS als Cloud-Anbieter verwenden möchten, ist AWS CDK eine hervorragende Alternative.