Infrastructure as Code (IaC): Definition, Tools, Beispiele

Infrastructure as Code (IaC) verwaltet Server, Netzwerke und Cloud-Dienste über versionierten Code. Ablauf, wichtige Tools und typische Fehler.

Was ist Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) bedeutet, Infrastruktur wie Server, Netzwerke, Datenbanken, DNS-Einträge und Zugriffsrichtlinien in Code-Dateien zu beschreiben und sie durch ein Tool anzulegen oder zu ändern, statt in einer Konsole zu klicken. Die Dateien liegen in der Versionsverwaltung, werden wie Anwendungscode geprüft und aus einer Pipeline angewendet, meist als Teil von Continuous Delivery.

So funktioniert IaC

  1. Sie schreiben die gewünschte Infrastruktur als Template oder Programm und committen es in ein Repository.
  2. Das Tool vergleicht den Code mit dem Bestand. Terraform nennt diesen Schritt plan; AWS CloudFormation zeigt ihn als Change Set.
  3. Nach der Prüfung legt das Tool Ressourcen über die API des Anbieters an, ändert oder löscht sie.
  4. Das Tool hält fest, was es verwaltet, damit der nächste Lauf weiß, was zu ändern ist. Terraform speichert das in einer State-Datei.

AWS beschreibt CloudFormation ähnlich: Ein Template listet die gewünschten Ressourcen, und weil Templates Textdateien sind, lassen sich Änderungen wie bei Quellcode nachverfolgen und ein Template in mehreren Regionen wiederverwenden.

Deklarativ und imperativ

Deklarative Tools wie Terraform und CloudFormation beschreiben den Zielzustand und ermitteln die Schritte selbst. Tools mit Programmiersprachen wie Pulumi lassen Sie die Infrastruktur in einer echten Sprache schreiben; Pulumi nennt TypeScript, Python, Go, .NET, Java und YAML. Deklarativer Code lässt sich anhand eines Plans leichter prüfen; eine echte Sprache hilft bei Schleifen, Bedingungen und gemeinsamen Bibliotheken. Die meisten Teams wählen einen Stil und bleiben dabei.

Gängige Tools

  • Terraform von HashiCorp nutzt die eigene Sprache HCL und arbeitet mit vielen Anbietern. Am 10. August 2023 kündigte HashiCorp den Wechsel von der MPL 2.0 zur Business Source License für künftige Releases seiner Produkte an.
  • OpenTofu ist ein Terraform-Fork, den laut FAQ unter anderem Gruntwork, Spacelift, Harness, Env0 und Scalr als Reaktion auf diese Änderung gestartet haben und der heute unter der Linux Foundation läuft.
  • AWS CloudFormation ist der eigene Dienst von AWS. Templates werden in JSON oder YAML geschrieben und als Stacks ausgerollt.
  • Pulumi nutzt Programmiersprachen und gliedert die Arbeit in Stacks, zum Beispiel einen je Umgebung.

Wenn die Lizenz für Sie wichtig ist, lesen Sie die aktuellen Bedingungen des gewählten Tools; sie haben sich schon einmal geändert.

Beispiel

Diese Terraform-Datei deklariert einen S3-Bucket. plan zeigt, dass eine Ressource angelegt wird; apply legt sie an. Ein zweiter Lauf ändert nichts, weil der Bucket bereits dem Code entspricht.

# main.tf
provider "aws" {
  region = "eu-west-1"
}

resource "aws_s3_bucket" "website" {
  bucket = "my-marketing-site"
  tags = {
    Environment = "production"
  }
}
terraform init
terraform plan   # preview the changes
terraform apply  # make them

Warum Teams IaC nutzen

  • Wiederholbare Umgebungen. Dev, Staging und Produktion entstehen aus demselben Code.
  • Prüfbare Änderungen. Ein Pull Request zeigt, was sich ändern wird, bevor es passiert.
  • Nachvollziehbarkeit. Die Versionshistorie zeigt, wer wann was geändert hat.
  • Schnellere Wiederherstellung. Eine verlorene Umgebung lässt sich aus Code neu aufbauen, Daten brauchen aber eigene Backups.

Häufige Fehler

  • Manuelle Änderungen in der Konsole. Sie verursachen Drift: Die Realität weicht vom Code ab, und der nächste Plan versucht, sie rückgängig zu machen.
  • State in Git. Der State kann Geheimnisse enthalten. Nutzen Sie ein Remote-Backend. Bei Terraform auf S3 ist das Locking optional über use_lockfile, und laut Dokumentation ist DynamoDB-basiertes Locking veraltet.
  • Ein State für alles. Ein einziger Fehler betrifft dann jede Umgebung. Teilen Sie nach Umgebung und System.
  • Anwenden ohne den Plan zu lesen. Achten Sie besonders auf alles, was zum Löschen oder Ersetzen markiert ist.
  • Geheimnisse im Code. Verweisen Sie stattdessen auf einen Secrets-Manager.
  • Nicht fixierte Versionen. Fixieren Sie Tool- und Provider-Versionen, damit ein neues Release keinen Plan verändert.

IaC, Tests und Monitoring

IaC macht eine Änderung einfach, nicht sicher. Ein neuer Instanztyp, eine geänderte Skalierungsregel oder eine zusätzliche Region können das Verhalten unter Last verändern. Führen Sie daher einen Lasttest gegen die neue Umgebung aus, bevor Sie sich darauf verlassen; die Anleitung zur Validierung von Infrastruktur-Auto-Scaling zeigt die Idee, und CI/CD Best Practices erklärt, wo solche Prüfungen in der Pipeline stehen. Nach dem Release zeigen Infrastruktur-Monitoring und Synthetic Monitoring, ob alles weiter funktioniert.

LoadFocus stellt keine Infrastruktur bereit. Die Seite Monitoring as Code beschreibt, Monitore als YAML oder typisiertes JavaScript in Git zu halten und per @loadfocus/monitoring-Kommandozeilentool aus der CI auszurollen. Sie nennt API-, Browser-, Multistep-, TCP- und Heartbeat-Checks sowie Alert-Kanäle, Wartungsfenster und Statusseiten als so verwaltbare Ressourcen.

Häufige Fragen: Infrastructure as Code

Was ist der Unterschied zwischen IaC und Konfigurationsmanagement?

IaC stellt Infrastruktur wie Netzwerke, Datenbanken und Server bereit. Konfigurationsmanagement-Tools wie Ansible richten die Software auf bereits vorhandenen Maschinen ein. Die Grenze ist fließend, und manche Tools machen beides.

Terraform, OpenTofu oder CloudFormation?

CloudFormation passt zu Teams, die nur AWS nutzen und einen verwalteten Dienst wollen. Terraform und OpenTofu eignen sich für Teams mit mehreren Anbietern. Prüfen Sie die Lizenzbedingungen, bevor Sie sich zwischen den beiden entscheiden.

Was ist Drift?

Drift bedeutet, dass die echte Infrastruktur vom deklarierten Code abweicht, meist nach einer manuellen Änderung. Führen Sie regelmäßig einen Plan aus, um sie zu erkennen, und passen Sie dann den Code an oder setzen Sie die Ressource zurück.

Wo speichere ich den Terraform-State?

In einem Remote-Backend mit Locking, etwa einem S3-Bucket mit aktiviertem use_lockfile, nicht in Git und nicht auf einem Laptop.

Kann ich IaC für Kubernetes nutzen?

Ja. Kubernetes ist bereits deklarativ, Manifeste sind also eine Form von IaC, und Tools wie Terraform oder Pulumi können Cluster und die umgebenden Cloud-Ressourcen verwalten.

Wie schnell ist Ihre Website?

Steigern Sie ihre Geschwindigkeit und SEO nahtlos mit unserem kostenlosen Geschwindigkeitstest.

Kostenloser Websitespeed-Test

Analysieren Sie die Ladegeschwindigkeit Ihrer Website und verbessern Sie ihre Leistung mit unserem kostenlosen Seitengeschwindigkeits-Checker.