MAISON CODE .
/ DevOps · Terraform · AWS · IaC

Infrastruktur als Code: Terraform vs. Pulumi

Das Klicken auf Schaltflächen in der AWS-Konsole ist eine technische Schuld. So verwalten Sie Ihre Headless-Infrastruktur mithilfe von Code, Statusdateien und Git.

AB
Alex B.
Infrastruktur als Code: Terraform vs. Pulumi

Sie richten Ihren AWS S3-Bucket manuell ein. Sie haben CORS manuell aktiviert. 6 Monate später müssen Sie eine Staging-Umgebung starten. Können Sie sich genau erinnern, welche Kästchen Sie angekreuzt haben? Nein. Infrastructure as Code (IaC) löst dieses Problem. Wir definieren unsere Server, Datenbanken und DNS-Einträge in Textdateien. Wir übergeben sie an Git. Wir wenden sie deterministisch an.

Warum Maison Code darüber spricht

Bei Maison Code Paris fungieren wir als das architektonische Gewissen unserer Kunden. Wir übernehmen oft „moderne“ Stacks, die ohne grundlegendes Verständnis für Skalierung gebaut wurden.

Wir diskutieren dieses Thema, weil es einen kritischen Wendepunkt in der technischen Reife darstellt. Die korrekte Implementierung unterscheidet ein fragiles MVP von einer widerstandsfähigen Plattform auf Unternehmensniveau.

Das deklarative Modell (Terraform)

Terraform ist der Industriestandard. Es verwendet HCL (HashiCorp Configuration Language). Sie beschreiben den Endzustand. Terraform findet heraus, wie man dorthin gelangt.

„hcl

main.tf

Anbieter „aws“ { Region = “us-east-1” }

Ressource „aws_s3_bucket“ „assets“ { Bucket = „maison-code-assets-prod“ acl = „public-read“

cors_rule { erlaubte_headers = [”*”] erlaubte_methods = [“GET”] erlaubt_origins = [“https://maisoncode.paris”] } } „

Durch Ausführen von „terraform apply“ wird der Bucket erstellt. Wenn ich „allowed_methods“ in „[“GET“, „HEAD“]“ ändere und „Apply“ erneut ausführe, aktualisiert Terraform die Bucket-API. Es ermöglicht CI/CD für die Infrastruktur.

Das Imperativmodell (Pulumi)

Terraform ist großartig, aber HCL ist eine dedizierte Sprache. Mit Pulumi können Sie Infrastruktur in TypeScript schreiben. Dadurch erhalten Sie Schleifen, Funktionen und eine eindeutige Logik.

„Typoskript // index.ts

  • als aws aus „@pulumi/aws“ importieren;

const Bucket = new aws.s3.Bucket(“assets”, { acl: „public-read“, corsRules: [{ erlaubte Header: [”*”], erlaubte Methoden: [“GET”], erlaubtOrigins: [“https://maisoncode.paris”], }], });

export const BucketName = Bucket.id; „

Staat verwalten

IaC-Tools speichern den „Zustand“ der Welt in einer Datei („terraform.tfstate“). Diese Datei ordnet Ihren Code der realen Welt (der AWS-Ressourcen-ID) zu. Gefahr: Speichern Sie den Status niemals lokal. Wenn Ihr Laptop kaputt geht, verlieren Sie den Zugriff auf die Infrastruktur. Speichern Sie den Status in einem Remote-Backend (S3-Bucket mit Sperre oder Terraform Cloud).

Drifterkennung

„Drift“ tritt auf, wenn sich ein Junior-Entwickler bei der AWS-Konsole anmeldet und manuell eine Firewall-Regel löscht, um „einen Fehler zu beheben“. Der Code besagt, dass die Firewall eingeschaltet ist. Die Realität besagt, dass die Firewall ausgeschaltet ist. Wir führen täglich einen „Terraform-Plan“-Cronjob durch. Wenn es Änderungen erkennt (Drift), benachrichtigt es uns auf Slack. „Warnung: Infrastrukturdrift auf Sicherheitsgruppe sg-123 erkannt.“

Unveränderliche Infrastruktur

Früher haben wir SSH-Verbindungen zu Servern hergestellt, um PHP zu aktualisieren. In der IaC-Welt behandeln wir Server als Vieh, nicht als Haustiere. Um die App zu aktualisieren, zerstören wir den alten Server und starten einen neuen mit dem neuen Image. Dadurch wird sichergestellt, dass sich im Laufe der Jahre keine „Konfigurationsdrift“ oder versteckten Artefakte ansammeln.

Multi-Cloud-Strategie

Shopify ist auf Google Cloud. Ihre Bilder befinden sich auf AWS S3. Ihre Edge-Funktionen sind auf Cloudflare. IaC verwaltet sie alle in einer Datei. Sie können die Ausgabe einer (AWS CloudFront-URL) als Eingabe an eine andere (Cloudflare-DNS-Eintrag) übergeben.

9. Geheimverwaltung: Keine Passwörter in Git

Sie müssen das Datenbankkennwort an die Lambda-Funktion übergeben. Schreiben Sie es NIEMALS in „main.tf“. NIEMALS „.env“ festschreiben. Lösung: AWS Secrets Manager + Terraform-Datenquellen.

  1. Erstellen Sie ein Geheimnis in der AWS-Konsole (oder über die CLI).
  2. Terraform verweist darauf: „data.aws_secretsmanager_secret_version.db_pass.secret_string“.
  3. Terraform fügt es zum Zeitpunkt der Bereitstellung als Umgebungsvariable in Lambda ein. Das Geheimnis existiert während der Bereitstellung nur im RAM. Es berührt niemals die Festplatte.

10. Richtlinie als Kodex (Sentinel / OPA)

Wie verhindern Sie, dass ein Junior-Entwickler eine GPU-Instanz für 5.000 US-Dollar pro Monat hochfährt? Richtlinie als Kodex. Wir verwenden Open Policy Agent (OPA), um den Terraform-Plan vor der Anwendung zu scannen. `verweigern, wenn Instanztyp nicht in [“t3.micro”, “t3.small”] ist. Wenn der Code gegen die Richtlinie verstößt, schlägt die CI-Pipeline fehl. Hier geht es um „Leitplanken, nicht um Gatekeeper“.

11. Blau-Grüne Bereitstellungsinfrastruktur

IaC ermöglicht es uns, eine doppelte Umgebung einzurichten.

  1. Live ist „Grün“ (v1).
  2. Terraform startet „Blue“ (v2).
  3. Wir führen E2E-Tests auf Blue durch.
  4. Terraform aktualisiert den Load Balancer (ALB) so, dass er auf Blue verweist.
  5. Wenn Alarme ausgelöst werden, setzt Terraform den ALB sofort auf Grün zurück.
  6. Sobald Terraform stabil ist, zerstört es Green. Dies bietet Sicherheit, die manuelle Bereitstellungen niemals bieten können.

12. Rotation der Datenbankanmeldeinformationen

Bei Compliance heißt es: „Passwörter alle 30 Tage wechseln“. Menschen hassen das. Terraform liebt es. Wir konfigurieren „aws_secretsmanager_secret_rotation“. Es dreht ein Lambda hoch, das:

  1. Melden Sie sich bei RDS an.
  2. Erstellen Sie Benutzer B.
  3. Geheimnis aktualisieren.
  4. App aktualisieren.
  5. Löschen Sie Benutzer A. Keine Ausfallzeiten. Keine menschliche Beteiligung.

14. Disaster Recovery (DR) als Code

Was passiert, wenn „us-east-1“ ausfällt? (Es passiert). Bei IaC ist DR ein Skript. terraform apply -var="region=us-west-2". In 15 Minuten wird Ihre gesamte Infrastruktur (Load Balancer, EC2, Datenbanken) auf der anderen Seite des Landes repliziert. Wir überprüfen dies vierteljährlich durch die Durchführung von „Game Days“. Wir überprüfen, ob wir den Stack in einem leeren AWS-Konto von Grund auf neu starten können. Wenn Sie auf die Schaltflächen in der Konsole klicken, ist DR nicht möglich. Du wirst tagelang ausfallen. Mit IaC sind Sie minutenlang ausgefallen.

15. Warum Maison Code?

Bei Maison Code glauben wir, dass Infrastruktur ein Produkt ist. Wir stellen keine „Systemadministratoren“ ein. Wir stellen DevOps-Ingenieure ein. Wir bauen eine selbstheilende, automatisch skalierende und unveränderliche Infrastruktur auf. Wir geben Ihnen die Schlüssel (das Git Repo), keine Blackbox. Wir ermöglichen Ihrem Team, 10-mal am Tag bereitzustellen, ohne befürchten zu müssen, dass das Netzwerk beschädigt wird. Denn Geschwindigkeit erfordert Sicherheit.

16. Fazit

Infrastructure as Code ist der Unterschied zwischen einem „Hobby-Projekt“ und einer „Enterprise-Plattform“. Es verwandelt „Ops“ in Software-Engineering. Es bietet Ihnen Überprüfbarkeit, Geschwindigkeit und Sicherheit. Hören Sie auf, auf Standardschaltflächen zu klicken. Beginnen Sie mit dem Schreiben von Code.


Haben Sie genug von der manuellen Servereinrichtung?

Wir migrieren die manuelle Infrastruktur auf robuste, überprüfbare Terraform/Pulumi-Pipelines. Beauftragen Sie unsere Architekten.