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.
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.