Navigation
Tool / Framework

Infrastructure as Code mit Terraform und Ansible

Infrastructure as Code beschreibt Zielzustände versioniert, prüfbar und wiederholbar. Terraform eignet sich für Provisionierung, Ansible für Konfiguration und Orchestrierung.

Diagramm Infrastructure as Code mit Terraform und Ansible

Fachliches Bild

IaC reduziert Wartezeiten, Fehler und Abhängigkeit von Einzelpersonen. Statt Tickets mit Freitext entstehen überprüfbare Pull Requests: Welche Infrastruktur wird geändert, warum, von wem und mit welchem Risiko?

Terraform-Modell

Terraform beschreibt Ressourcen deklarativ. Plan zeigt Änderungen, Apply setzt sie um, State verbindet Code mit realer Infrastruktur. Module kapseln Standards.

Ansible-Modell

Ansible führt Playbooks aus, um Systeme zu konfigurieren, Software zu installieren, Dateien zu verteilen oder Betriebsaufgaben auszuführen. Rollen strukturieren wiederverwendbare Automatisierung.

Pipeline und Kontrolle

Enterprise-IaC braucht Review, Policy-as-Code, Secrets-Management, Remote-State, Locking, Drift-Erkennung, Tests und getrennte Umgebungen.

Grenzen

IaC ersetzt kein Architekturdenken. Schlechter Code automatisiert schlechte Entscheidungen schneller. Außerdem sind Secrets, State-Dateien und Provider-Berechtigungen hochsensibel.

Ausführliche Beispiele

Terraform-Netzwerkmodul

module "prod_app_network" {
  source = "./modules/network-segment"

  name        = "prod-app"
  cidr        = "10.42.20.0/24"
  environment = "prod"
  firewall_rules = [
    {
      name        = "allow-lb-to-app"
      source      = "prod-lb"
      destination = "prod-app"
      port        = 8443
      protocol    = "tcp"
    }
  ]
}

Ansible-Rolle für App-Server

- name: Configure application VM
  hosts: order_app_servers
  become: true
  roles:
    - os_baseline
    - java_runtime
    - monitoring_agent
    - certificate_bundle
  tasks:
    - name: Render application config
      template:
        src: order-api.yml.j2
        dest: /etc/order-api/application.yml
        owner: orderapi
        mode: '0640'
      notify: restart order-api

Policy-Check als Pseudocode

deny[msg] {
  input.resource.type == "virtual_machine"
  not input.resource.tags.owner
  msg := "VM muss owner-Tag besitzen"
}

deny[msg] {
  input.resource.environment == "prod"
  input.resource.public_ip == true
  msg := "Produktive VM darf keine direkte Public IP haben"
}

Typische Stolperfallen

  • State-Dateien enthalten sensible Informationen.
  • Manuelle Hotfixes erzeugen Drift.
  • Module werden kopiert statt versioniert.
  • IaC-Review prüft Syntax, aber nicht Risiko.
  • Provider-Rechte sind zu breit.

Prüf- und Verständnis-Checkliste

  • Remote-State ist geschützt und gelockt.
  • Änderungen laufen über Pull Request.
  • Module sind versioniert.
  • Policy-as-Code prüft Mindestregeln.
  • Drift wird regelmäßig erkannt.

Merksatz

Eine Infrastrukturkomponente ist erst enterprise-tauglich, wenn sie geplant, automatisiert, überwacht, geschützt, wiederherstellbar und fachlich begründet ist.