Pulumi, Terraform oder CDK?
Die gleiche Infrastruktur auf drei Arten geschrieben, und was ich gelernt habe.
Die gleiche Infrastruktur auf drei Arten geschrieben, und was ich gelernt habe.

Infrastruktur als Code ist in zwei Lager aufgeteilt. Einer sagt, dass die Infrastruktur in einer deklarativen Konfigurationssprache beschrieben werden sollte, wie Terraforms HCL. Der andere sagt: Wir haben schon tolle Programmiersprachen, warum nicht sie benutzen? Das ist die Idee hinter Pulumi und dem AWS CDK.
Der beste Weg, sie zu vergleichen, ist, dasselbe in alle drei zu schreiben. Hier ist also ein einfacher S3-Eimer mit Versionenüberwachung in jedem.
resource "aws_s3_bucket" "assets" {
bucket = "acme-assets-prod"
tags = { environment = "production" }
}
resource "aws_s3_bucket_versioning" "assets" {
bucket = aws_s3_bucket.assets.id
versioning_configuration {
status = "Enabled"
}
}
output "bucket_name" {
value = aws_s3_bucket.assets.bucket
}
import * as aws from "@pulumi/aws";
const assets = new aws.s3.BucketV2("assets", {
bucket: "acme-assets-prod",
tags: { environment: "production" },
});
new aws.s3.BucketVersioningV2("assets", {
bucket: assets.id,
versioningConfiguration: { status: "Enabled" },
});
export const bucketName = assets.bucket;
import { Stack, StackProps, Tags, CfnOutput } from "aws-cdk-lib";
import * as s3 from "aws-cdk-lib/aws-s3";
import { Construct } from "constructs";
export class AssetsStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const assets = new s3.Bucket(this, "Assets", {
bucketName: "acme-assets-prod",
versioned: true,
encryption: s3.BucketEncryption.S3_MANAGED,
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
});
Tags.of(assets).add("environment", "production");
new CfnOutput(this, "BucketName", { value: assets.bucketName });
}
}
Die Beispiele sehen für einen einzelnen Eimer ähnlich aus. Die Unterschiede zeigen sich, wenn die Dinge wachsen.
HCL (Terraform, OpenTofu) ist absichtlich eingeschränkt. Es gibt Schleifen und Bedingungen (for_each, count, Ternären), aber es ist keine vollständige Programmiersprache. Das ist eine Eigenschaft: Konfigurationen sind leicht zu lesen, auch für Leute, die keine Entwickler sind, und es gibt weniger Platz für cleveren Code, den niemand versteht.
Pulumi Sie können TypScript, Python, Go, C#, Java oder YAML verwenden. Sie erhalten echte Schleifen, Funktionen, Klassen, Pakete, IDE-Auto-Vollständigung und Unit-Tests mit vertrauten Frameworks. Perfekt für komplexe Logik und für Entwickler, die keine andere Sprache lernen wollen. Das Risiko: Infrastrukturcode, der zu klug ist.
AWS CDK Die meisten der neuen Technologien werden in der Praxis auch mit echten Sprachen verwendet, aber ihre Stärke ist Konstruktionen: hochwertige Bausteine mit guten Standards. Beachten Sie, wie der CDK-Eimer oben verschlüsselt wurde und den öffentlichen Zugang fast kostenlos blockierte. Die Konstruktionen auf höherer Ebene können in wenigen Linien einen gesamten Last-Balance-Container-Service erzeugen. Es generiert CloudFormation darunter und ist Nur AWS.
HCL begrenzt, was du schreiben kannst. Wirkliche Sprachen beschränken nichts, was sowohl ihre Stärke als auch ihre Gefahr ist.
Wählen Sie Terraform oder OpenTofu Wenn: - Sie arbeiten über mehrere Clouds und SaaS-Anbieter hinweg (das Anbieterökosystem ist das größte). - In Ihrem Team sind Leute, die nicht hauptsächlich Entwickler sind. - Sie wollen das bekannteste Tool, mit den meisten Beispielen und Einstellungsmöglichkeiten.
Wählen Sie Pulumi Wenn: - Ihr Team Entwickler-schwer und bevorzugt TypeScript, Python oder Go. - Ihre Infrastruktur hat eine komplexe Logik, die in HCL schmerzhaft ist. - Sie wollen den Infrastrukturcode mit normalen Testwerkzeugen testen.
Wählen Sie AWS CDK Wenn: - Sie sind bei AWS und wollen dort bleiben. - Du magst hochwertige Konstruktionen mit guten Standards. - Ihr Team kennt CloudFormation bereits, oder kann sich darauf verlassen.
Drei Mal dieselbe Infrastruktur zu schreiben, machte eines klar: Die Sprache ist weniger wichtig als die Disziplin. Gutes Modul- oder Komponentendesign, kleine Zustandsgrenzen, konsistente Benennung, Tests und Reviews sind in allen drei Fällen wichtig.
Für die meisten Teams, mit denen ich arbeite, bleibt Terraform oder OpenTofu aufgrund seines Ökosystems und seiner Lesbarkeit der Standard. Aber für Entwickler-geführte Teams habe ich gesehen, dass Pulumi die Infrastruktur viel zugänglicher macht.
Mein Tipp: Wählen Sie das Werkzeug, das Ihr Team gerne lesen und pflegen wird. Infrastrukturcode wird viel öfter gelesen als geschrieben.
Desly