Lexikon · I

Infrastructure as Code (IaC)

Server, Netzwerke und Cloud-Services über versionierte, maschinenlesbare Definitionen verwalten statt über manuelle Konfiguration.

Von Obseria-RedaktionAktualisiert

Definition

Infrastructure as Code (IaC) bezeichnet das Definieren und Bereitstellen von Infrastruktur wie Netzwerken, virtuellen Maschinen, Kubernetes-Clustern, Datenbanken und Cloud-Services über maschinenlesbare Dateien in der Versionsverwaltung. Tools wie Terraform, OpenTofu, Pulumi oder AWS CloudFormation gleichen diese Definition mit der Realität ab und setzen Änderungen um. Umgebungen werden so reproduzierbar, prüfbar und nachvollziehbar.

Was ist Infrastructure as Code?

Infrastructure as Code (IaC) ersetzt das Klicken durch Cloud-Konsolen und spontane Skripte durch Code, der die gewünschte Infrastruktur beschreibt. Eine VPC, eine Managed-Datenbank, eine IAM-Rolle oder ein Kubernetes-Cluster wird zu einem Textblock in einem Git-Repository. Änderungen durchlaufen denselben Workflow wie Anwendungscode: Pull Request, Review, ein automatischer Plan, der zeigt, was sich ändern wird, und ein Apply-Schritt in der CI.

Die Vorteile ergeben sich aus diesem Workflow. Umgebungen lassen sich identisch neu aufbauen, Staging und Produktion laufen nicht mehr auseinander, jede Änderung hat einen Autor und eine Historie, und wiederkehrendes manuelles Provisioning, eine klassische Form von Toil, entfällt. IaC ist außerdem ein Fundament des Platform Engineering, bei dem interne Plattformen wiederverwendbare Module statt Tickets anbieten.

Deklaratives und imperatives IaC

Es gibt zwei grundlegende Ansätze:

  • Deklarativ: Sie beschreiben den gewünschten Endzustand („drei Subnetze, ein Load Balancer“), und das Tool ermittelt die nötigen Schritte. So arbeiten Terraform, OpenTofu, CloudFormation und Kubernetes-Manifeste. Wird dieselbe Definition zweimal angewendet, ändert sich beim zweiten Mal nichts. Deklaratives IaC ist also idempotent.
  • Imperativ: Sie beschreiben die Schritte („Subnetz anlegen, dann Routing-Tabelle zuordnen“). Shell-Skripte und Cloud-CLIs sind imperativ, Configuration-Management-Tools wie Ansible arbeiten weitgehend prozedural und führen Tasks der Reihe nach aus.

Pulumi und das AWS CDK liegen dazwischen: Sie schreiben Code in einer Allzwecksprache mit Schleifen und Funktionen, das Ergebnis ist aber ein deklarativer Sollzustand, den eine Engine abgleicht.

Gängige Tools für Infrastructure as Code

ToolSpracheHinweise
TerraformHCLMulti-Cloud über Provider, State-Datei, plan/apply; seit 2023 unter der Business Source License
OpenTofuHCLOpen-Source-Fork von Terraform unter der Linux Foundation, MPL 2.0, weitgehend kompatibel
PulumiTypeScript, Python, Go, C#, Java, YAMLEchte Programmiersprachen, Tests mit Standard-Frameworks
AWS CloudFormationYAML oder JSONAWS-nativ, Stacks mit Change Sets und eingebauter Drift Detection; das AWS CDK erzeugt es
Azure Bicep / ARMBicep, JSONAzure-native Templates
CrossplaneKubernetes-RessourcenCloud-Ressourcen, verwaltet durch Kubernetes-Controller

Beispiel: eine Terraform-Ressource

resource "aws_sqs_queue" "orders_dlq" {
  name                      = "orders-dlq"
  message_retention_seconds = 1209600   # 14 Tage
  tags = { team = "payments", env = "prod" }
}

terraform plan (oder tofu plan) zeigt, dass eine Queue angelegt wird. Nach dem Review erstellt apply sie und vermerkt sie in der State-Datei. Ändert später jemand die Aufbewahrungsdauer in der Konsole, meldet der nächste Plan die Abweichung.

Drift Detection

Drift ist jede Abweichung zwischen Code und tatsächlich laufender Infrastruktur, verursacht durch manuelle Hotfixes, Änderungen in der Konsole oder andere Automatisierung. Drift untergräbt das zentrale Versprechen von IaC, denn das Repository beschreibt die Realität nicht mehr. Bewährte Gegenmittel: regelmäßige Läufe von terraform plan -refresh-only oder pulumi preview in der CI, die bei Abweichungen alarmieren, Drift Detection für CloudFormation-Stacks, eingeschränkte Schreibrechte in Produktion, damit Änderungen über die Pipeline laufen, sowie GitOps-Controller, die Kubernetes-Ressourcen fortlaufend abgleichen.

Observability as Code

Dasselbe Prinzip gilt für das Monitoring. Observability as Code heißt, dass Dashboards, Alarmregeln, SLO-Definitionen, synthetische Checks und Konfigurationen des OpenTelemetry Collectors in Git liegen und über die Pipeline ausgerollt werden. Neue Services erhalten so automatisch Standard-Dashboards und -Alarme, Schwellenwerte werden wie Code reviewt, und ein gelöschtes Dashboard lässt sich aus der Historie wiederherstellen. Einheitliche Tags für jede Ressource (Service, Team, Umgebung) zahlen sich auch in der Observability aus, weil dieselben Tags zu filterbaren Attributen werden. Ein pragmatischer Einstieg: Legen Sie Alarmregeln für Prometheus oder OpenTelemetry sowie die Collector-YAML im selben Repository wie den Service ab und validieren Sie beides in der CI vor dem Rollout. So erreicht eine fehlerhafte Pipeline-Konfiguration die Produktion nie ungeprüft, und jede Änderung an einem Schwellenwert bleibt nachvollziehbar.

Best Practices und typische Fehler

  • State remote speichern und sperren; State-Dateien nie committen, da sie Secrets enthalten können.
  • Kleine, wiederverwendbare Module mit klaren Eingaben statt einer riesigen Konfiguration.
  • Secrets aus dem Code heraushalten und auf einen Secrets Manager verweisen.
  • Pläne prüfen, nicht nur Diffs; eine einzeilige Änderung kann eine Datenbank ersetzen.
  • Manuelle und codierte Änderungen nicht mischen, zumindest nicht an denselben Ressourcen.
  • Offene Formate bevorzugen, um Vendor-Lock-in bei Infrastruktur und Telemetrie zu begrenzen.

Wie Obseria hilft

Obseria bietet eine API und eine CLI, um Konfiguration programmatisch zu verwalten, und mit Automation definieren Sie Workflows als Code. Deployment-Ereignisse aus Ihren Pipelines lassen sich mit Metriken, Logs und Traces korrelieren. Eine Infrastrukturänderung, die einen Service verschlechtert, erscheint so direkt neben ihrer Auswirkung.

Häufig gestellte Fragen

OpenTofu ist ein Fork von Terraform, der entstand, nachdem HashiCorp Terraform 2023 unter die Business Source License gestellt hatte. Er wird unter der Linux Foundation mit der Open-Source-Lizenz MPL 2.0 gepflegt und ist mit Terraform-Konfigurationen weitgehend kompatibel.

Pulumi-Programme werden in Allzwecksprachen geschrieben, erzeugen aber einen deklarativen Sollzustand. Die Pulumi-Engine vergleicht ihn mit dem Ist-Zustand und gleicht ihn ab, ähnlich wie Terraform.

Drift ist eine Abweichung zwischen der im Code definierten und der tatsächlich vorhandenen Infrastruktur, meist verursacht durch manuelle Änderungen. Regelmäßige Plan-Läufe und Drift-Detection-Funktionen machen sie sichtbar.

Dashboards, Alarmregeln, SLOs, synthetische Checks und die Konfiguration von Telemetrie-Collectoren werden als versionierter Code verwaltet, reviewt und über die CI ausgerollt, statt sie von Hand in einer Oberfläche zu bearbeiten.

Setzen Sie das Wissen in die Praxis um

Testen Sie Obseria 14 Tage kostenlos, mit OpenTelemetry und ohne proprietäre Agenten.