Repository schneiden: zwei Ordner, eine Grenze
Die meisten Streitfälle lösen sich, sobald der Ordnerbaum die Grenze abbildet. Alles, was einen Erzeugungs- und einen Löschzeitpunkt hat, gehört nach Terraform. Alles, was einen dauerhaften Sollzustand beschreibt, gehört nach Ansible.
infra/
├── terraform/
│ ├── envs/
│ │ ├── prod/ # eigener State je Umgebung, nie ein gemeinsamer
│ │ └── stage/
│ └── modules/
│ └── app-node/ # nur Ressourcen, keine Softwarelogik
└── ansible/
├── inventories/
│ └── prod/
├── roles/
│ └── webserver/
├── requirements.yml
└── site.ymlGetrennte Verzeichnisse je Umgebung sind wichtiger als getrennte Workspaces: Ein eigener State je Umgebung verhindert, dass ein falsch gesetzter Workspace einen Produktiv-Apply auslöst.
Die Grenze am Lebenszyklus, an konkreten Aufgaben durchgespielt
| Aufgabe | Werkzeug | Warum dort |
|---|---|---|
| Netz, Subnetz, Security Group | Terraform | Existiert oder existiert nicht, klarer Lebenszyklus |
| Maschine erzeugen und wieder löschen | Terraform | Der State muss wissen, welche Instanz ihm gehört |
| Pakete, Dienste, Konfigurationsdateien | Ansible | Ändert sich viel häufiger als die Maschine darunter |
| Zertifikate ausrollen und erneuern | Ansible | Wiederkehrender Sollzustand, kein einmaliger Erzeugungsakt |
| Benutzer und SSH-Schlüssel auf den Hosts | Ansible | Muss auch auf Maschinen wirken, die Terraform nie angefasst hat |
| Datenbankschema migrieren | Weder noch | Gehört in die Pipeline der Anwendung, nicht in die Infrastruktur |