Infrastructure as Code

KAPITEL 08 · CLOUD & INFRASTRUKTUR

Infrastructure as Code (IaC)

Automatisieren Sie Ihre IT-Infrastruktur mit Code – von Terraform über Ansible bis zu GitOps. Erfahren Sie, wie moderne Unternehmen ihre Cloud-Infrastruktur reproduzierbar, versionierbar und skalierbar machen.

Terraform Ansible CloudFormation GitOps

Inhaltsverzeichnis

Schnellübersicht

Auf dieser Seite lernen Sie alles über Infrastructure as Code:

  • Definition: Was ist Infrastructure as Code und warum ist es wichtig?
  • Vorteile: Geschwindigkeit, Konsistenz, Versionierung und mehr
  • Tools: Terraform, Ansible, CloudFormation, Pulumi, Chef, Puppet
  • Workflow: Von Code zu produktiver Infrastruktur
  • GitOps: Git als Single Source of Truth
  • Best Practices: Modularität, State Management, Secrets
  • FAQ: Häufige Fragen und Antworten

1. Was ist Infrastructure as Code?

Definition

Infrastructure as Code (IaC) ist die Praxis, IT-Infrastruktur (Server, Netzwerke, Datenbanken, Load Balancer) durch maschinenlesbare Definitionsdateien zu verwalten und bereitzustellen – anstatt durch manuelle Konfiguration oder interaktive Tools.

Statt Server per Hand zu konfigurieren, schreiben Sie deklarativen Code, der beschreibt, wie Ihre Infrastruktur aussehen soll. Ein IaC-Tool (wie Terraform oder Ansible) sorgt dann dafür, dass die tatsächliche Infrastruktur diesem gewünschten Zustand entspricht.

Beispiel: Anstatt manuell einen Webserver zu installieren, eine Firewall zu konfigurieren und eine Datenbank einzurichten, schreiben Sie einen Terraform-Code, der all dies automatisch erledigt – reproduzierbar, versionierbar und in Minuten statt Stunden.

Warum IaC?

  • Manuelle Konfiguration: Fehleranfällig, nicht reproduzierbar, schwer zu dokumentieren
  • IaC: Reproduzierbar, versionierbar, testbar, automatisch dokumentiert
  • Skalierbarkeit: Von 1 Server auf 1000 Server in Minuten
  • DevOps-Prinzip: Infrastruktur wird wie Anwendungscode behandelt

2. Vorteile von Infrastructure as Code

IaC revolutioniert die Art und Weise, wie Unternehmen ihre IT-Infrastruktur verwalten. Hier die wichtigsten Vorteile:

Geschwindigkeit

Infrastruktur in Minuten statt Tagen bereitstellen. Automatisierung eliminiert manuelle, zeitaufwändige Tasks.

Konsistenz

Jede Umgebung (Dev, Staging, Prod) ist identisch. Keine "Works on my machine"-Probleme mehr.

Versionierung

Infrastruktur-Code wird in Git versioniert. Änderungen sind nachvollziehbar, Rollbacks möglich.

Kollaboration

Teams arbeiten gemeinsam an Infrastruktur-Code via Pull Requests, Code Reviews und Branches.

Testbarkeit

Infrastruktur kann getestet werden wie Anwendungscode: Unit Tests, Integration Tests, Security Scans.

Dokumentation

Der Code selbst ist die Dokumentation. Immer aktuell, nie veraltet.

3. IaC-Tools im Überblick

Es gibt verschiedene IaC-Tools, jedes mit eigenen Stärken und Einsatzgebieten.

Terraform

HashiCorp · Multi-Cloud

Das beliebteste IaC-Tool für Cloud-Infrastruktur. Deklarativ, provider-agnostisch, riesige Community.

  • HCL (HashiCorp Configuration Language)
  • Multi-Cloud (AWS, Azure, GCP, etc.)
  • State-Management
  • Große Provider-Bibliothek
resource "aws_instance" "web" { ami = "ami-12345" instance_type = "t3.micro" tags = { Name = "WebServer" } }

Ansible

Red Hat · Configuration Management

Agentless Configuration Management. Ideal für Server-Konfiguration, Software-Installation, Orchestrierung.

  • YAML-Playbooks
  • Agentless (SSH-basiert)
  • Idempotent
  • Große Modul-Bibliothek
- name: Install Nginx hosts: webservers tasks: - apt: name: nginx state: present - service: name: nginx state: started

CloudFormation

AWS · Native IaC

AWS-eigenes IaC-Tool. Tief in AWS integriert, unterstützt alle AWS-Services nativ.

  • JSON oder YAML Templates
  • Nur AWS (kein Multi-Cloud)
  • StackSets für Multi-Account
  • Drift Detection
Resources: WebServer: Type: AWS::EC2::Instance Properties: ImageId: ami-12345 InstanceType: t3.micro Tags: - Key: Name Value: WebServer

Pulumi

Modern IaC · Programmiersprachen

IaC mit echten Programmiersprachen (TypeScript, Python, Go). Ideal für Entwickler, die keine DSL lernen wollen.

  • TypeScript, Python, Go, C#
  • Multi-Cloud
  • Keine DSL nötig
  • IDE-Unterstützung
import * as aws from "@pulumi/aws"; const server = new aws.ec2.Instance("web", { ami: "ami-12345", instanceType: "t3.micro", tags: { Name: "WebServer" } });

Chef

Progress Chef · Enterprise

Enterprise Configuration Management. Ruby-basiert, Client-Server-Architektur, stark in großen Umgebungen.

  • Ruby DSL (Cookbooks, Recipes)
  • Client-Server-Architektur
  • Enterprise-Features
  • Große Community
package 'nginx' do action :install end service 'nginx' do action [:enable, :start] end

Puppet

Puppet Inc · Enterprise

Enterprise Configuration Management. Deklarativ, Agent-basiert, stark in regulierten Umgebungen.

  • Puppet DSL (deklarativ)
  • Agent-basiert
  • Enterprise-Features
  • Compliance-Tools
package { 'nginx': ensure => installed, } service { 'nginx': ensure => running, enable => true, }

4. Tool-Vergleich

Tool Sprache Multi-Cloud Agent Hauptanwendung
Terraform HCL Ja Nein Cloud-Infrastruktur (Provisioning)
Ansible YAML Ja Nein (SSH) Configuration Management
CloudFormation JSON/YAML Nein (nur AWS) Nein AWS-Infrastruktur
Pulumi TS/Python/Go/C# Ja Nein Cloud-Infrastruktur (für Entwickler)
Chef Ruby Ja Ja Configuration Management (Enterprise)
Puppet Puppet DSL Ja Ja Configuration Management (Enterprise)

Welches Tool für welchen Zweck?

  • Cloud-Infrastruktur provisionieren: Terraform oder Pulumi
  • Server konfigurieren: Ansible, Chef oder Puppet
  • Nur AWS: CloudFormation
  • Entwicklerfreundlich: Pulumi (echte Programmiersprachen)
  • Kombination: Terraform für Infrastruktur + Ansible für Konfiguration

5. IaC-Workflow

Ein typischer IaC-Workflow folgt diesen Schritten:

Von Code zu Produktion

1
Code schreiben

Infrastruktur-Code in Terraform/Ansible/etc.

2
Versionieren

Code in Git committen

3
Pull Request

Code Review durch Team

4
Testen

Plan, Validate, Security Scan

5
Apply

Infrastruktur bereitstellen

6
Monitor

Infrastruktur überwachen

6. GitOps

GitOps ist eine Weiterentwicklung von IaC, bei der Git die Single Source of Truth für Infrastruktur und Anwendungen ist.

GitOps-Prinzipien

Declarative

Die gesamte Infrastruktur und Anwendung wird deklarativ beschrieben (gewünschter Zustand, nicht Schritte).

Versioned & Immutable

Git ist die Single Source of Truth. Alle Änderungen werden versioniert und sind unveränderlich.

Automatically Applied

Änderungen in Git werden automatisch auf die Infrastruktur angewendet (Pull-basiert oder Push-basiert).

Continuously Reconciled

Software Agents überwachen kontinuierlich, ob der tatsächliche Zustand dem gewünschten Zustand entspricht.

GitOps-Tools

  • ArgoCD: Beliebtes GitOps-Tool für Kubernetes
  • Flux: CNCF-Projekt, GitOps für Kubernetes
  • Jenkins X: GitOps für CI/CD auf Kubernetes
  • Spacelift: GitOps für Terraform und andere IaC-Tools

7. Best Practices

Modularität

  • Wiederverwendbare Module erstellen
  • DRY-Prinzip (Don't Repeat Yourself)
  • Module versionieren und teilen
  • Klare Schnittstellen definieren

State Management

  • Remote State Storage (S3, Azure Blob)
  • State Locking (DynamoDB)
  • State nicht in Git committen
  • State regelmäßig sichern

Secrets Management

  • Niemals Secrets im Code hardcoden
  • Vault, AWS Secrets Manager, Azure Key Vault
  • Environment Variables für Secrets
  • Secrets rotieren regelmäßig

Testing

  • Terraform Plan vor Apply
  • Linting (tflint, ansible-lint)
  • Security Scans (Checkov, tfsec)
  • Integration Tests in Staging

Weitere Best Practices

  • Naming Conventions: Konsistente Benennung von Ressourcen
  • Tagging: Alle Ressourcen mit Tags versehen (Owner, Environment, Cost Center)
  • Environments: Separate State-Files für Dev, Staging, Prod
  • Immutability: Infrastruktur nicht manuell ändern, nur via Code
  • Documentation: README für jedes Modul, Beispiele bereitstellen
  • Code Reviews: Pull Requests für alle Infrastruktur-Änderungen

FAQ – Häufige Fragen & Antworten

Häufige Fragen zu Infrastructure as Code

Was ist der Unterschied zwischen deklarativem und imperativem IaC?

Deklarativ: Sie beschreiben den gewünschten Endzustand ("Ich will einen Server mit 4 CPUs"). Das Tool figuring out die Schritte selbst.

  • Beispiele: Terraform, CloudFormation, Kubernetes YAML
  • Vorteil: Idempotent, einfacher zu verstehen

Imperativ: Sie beschreiben die Schritte ("Erstelle einen Server, dann installiere Nginx, dann konfiguriere die Firewall").

  • Beispiele: Shell Scripts, Ansible (teilweise)
  • Nachteil: Nicht idempotent, schwerer zu debuggen
Warum sollte ich Terraform statt CloudFormation verwenden?

Terraform Vorteile:

  • Multi-Cloud: Funktioniert mit AWS, Azure, GCP, und 100+ Providern
  • Einheitliche Sprache (HCL) für alle Clouds
  • Größere Community und mehr Dokumentation
  • State Management mit Remote Backends

CloudFormation Vorteile:

  • Tiefe AWS-Integration
  • Keine zusätzlichen Tools nötig
  • Automatische Drift Detection

Empfehlung: Terraform für Multi-Cloud, CloudFormation für reine AWS-Umgebungen.

Was ist Terraform State und warum ist er wichtig?

Terraform State ist eine JSON-Datei, die den aktuellen Zustand Ihrer Infrastruktur speichert. Terraform vergleicht diesen State mit Ihrem Code, um zu entscheiden, welche Änderungen nötig sind.

  • Wichtig: State enthält sensitive Daten (Passwörter, Keys)
  • Niemals in Git committen!
  • Remote Storage: S3, Azure Blob, GCS, Terraform Cloud
  • State Locking: Verhindert gleichzeitige Änderungen (DynamoDB)

Best Practice: Remote State mit Locking verwenden, State regelmäßig sichern.

Wie gehe ich mit Secrets in IaC um?

Niemals Secrets direkt im Code hardcoden!

  • Environment Variables: export TF_VAR_db_password="secret"
  • Secrets Manager: AWS Secrets Manager, Azure Key Vault, HashiCorp Vault
  • Encrypted Files: SOPS, git-crypt für verschlüsselte Dateien in Git
  • Terraform Cloud: Sensitive Variables in Terraform Cloud

Best Practice: Secrets rotieren, least privilege, audit logging.

Was ist der Unterschied zwischen IaC und Configuration Management?

IaC (Infrastructure as Code): Provisioniert Infrastruktur (Server, Netzwerke, Datenbanken).

  • Tools: Terraform, CloudFormation, Pulumi
  • Beispiel: "Erstelle einen EC2-Instance mit 4 CPUs"

Configuration Management: Konfiguriert bereits existierende Infrastruktur (Software installieren, Config-Files schreiben).

  • Tools: Ansible, Chef, Puppet
  • Beispiel: "Installiere Nginx auf diesem Server und konfiguriere die Firewall"

Kombination: Terraform für Infrastruktur + Ansible für Konfiguration ist eine häufige Kombination.

Wie teste ich IaC-Code?

Mehrere Test-Ebenen:

  • Static Analysis: tflint, ansible-lint für Syntax und Best Practices
  • Security Scans: Checkov, tfsec für Security Misconfigurations
  • Plan: terraform plan zeigt Änderungen vor dem Apply
  • Integration Tests: In Staging-Umgebung deployen und testen
  • Unit Tests: Terratest für Terraform-Module

Best Practice: CI/CD Pipeline mit automatischen Tests vor dem Deploy.

Was ist GitOps und wie unterscheidet es sich von traditionellem IaC?

Traditionelles IaC: CI/CD Pipeline führt terraform apply aus (Push-basiert).

GitOps: Ein Agent im Cluster überwacht Git und pulled automatisch Änderungen (Pull-basiert).

  • Git ist die Single Source of Truth
  • Agent reconciliert kontinuierlich Ist- und Soll-Zustand
  • Besser für Kubernetes und Cloud-native Anwendungen

Tools: ArgoCD, Flux für Kubernetes, Spacelift für Terraform.

Wie gehe ich mit Drift um (manuelle Änderungen an Infrastruktur)?

Drift entsteht, wenn jemand Infrastruktur manuell ändert (nicht via Code).

  • Detection: terraform plan zeigt Drift, CloudFormation Drift Detection
  • Prevention: IAM Permissions einschränken, nur CI/CD darf ändern
  • Reconciliation: Regelmäßig terraform apply ausführen, um Drift zu korrigieren
  • GitOps: Agent reconciliert automatisch

Best Practice: Immutability-Prinzip – Infrastruktur nur via Code ändern, manuelle Änderungen verbieten.

Zusammenfassung

Die wichtigsten Punkte

  • IaC Definition: Infrastruktur durch Code verwalten statt manuell konfigurieren
  • Vorteile: Geschwindigkeit, Konsistenz, Versionierung, Kollaboration, Testbarkeit
  • Tools: Terraform (Multi-Cloud), Ansible (Configuration), CloudFormation (AWS), Pulumi (Developer-friendly)
  • Workflow: Code → Git → Review → Test → Apply → Monitor
  • GitOps: Git als Single Source of Truth, automatische Reconciliation
  • Best Practices: Modularität, Remote State, Secrets Management, Testing
  • Kein Drift: Infrastruktur nur via Code ändern, manuelle Änderungen vermeiden

Nächste Schritte

Infrastructure as Code ist ein fundamentaler Bestandteil moderner DevOps-Praxis. Beginnen Sie mit Terraform für Cloud-Infrastruktur und Ansible für Server-Konfiguration. Implementieren Sie GitOps für Kubernetes-Umgebungen. Nutzen Sie CI/CD Pipelines für automatisiertes Testing und Deployment.

Weiter zu Cloud Security

Weiterführende Themen

Cloud Computing

IaaS, PaaS, SaaS – die Grundlagen der Cloud.

Zu Cloud Computing
Virtualisierung

VMs, Hypervisor, VMware, Proxmox – Virtualisierung verstehen.

Zu Virtualisierung
Container & Orchestration

Docker, Kubernetes, Container-Orchestration im Detail.

Zu Container & Orchestration
Cloud Security

Sicherheit in der Cloud – IAM, Encryption, Compliance.

Zu Cloud Security