ADMIN

2024

06

2024-05-30T12:00:00

Datenbanken

PRAXIS

041

Automatisierung

Ansible

Terraform

Ansible und Terraform zusammen einsetzen

Im Tandem

von Philip Lorenz

Veröffentlicht in Ausgabe 06/2024 - PRAXIS

Infrastructure-as-Code ermöglicht es, IT-Umgebungen via Code zu verwalten und zu provisionieren, was eine schnellere Bereitstellung und eine höhere Reproduzierbarkeit gewährleistet. In diesem Kontext haben sich Ansible und Terraform als Standards etabliert. Beide Tools sind leistungsstarke Werkzeuge für das IT-Management und die Automatisierung. Doch stellt sich oft die Frage, welches der beiden am besten für die spezifischen Anforderungen eines Projekts geeignet ist – oder ob sie zusammen die beste Arbeit leisten.

Obwohl sich der Funktionsumfang von Ansible und Terraform überschneidet und die Einsatzszenarien nicht immer klar voneinander abgegrenzt sind, zeichnet sich jedes der beiden Tools durch unterschiedliche Praktiken und Stärken aus. Interessanterweise können diese Unterschiede, richtig genutzt, zu einem kraftvollen Synergieeffekt führen, wenn beide Tools im Tandem arbeiten.
Dazu werfen wir einen kurzen Blick auf die Kernaspekte von Ansible und Terraform. Wir beleuchten, was jedes Tool auszeichnet, wann es sinnvoll ist, eines über das andere zu wählen, und wie eine Kombination beider Ansätze nicht nur möglich, sondern auch äußerst vorteilhaft sein kann. Ziel ist es, Ihnen ein besseres Verständnis dafür zu vermitteln, wie sich Ansible und Terraform gemeinsam nutzen lassen, um die Effizienz und Effektivität der Infrastrukturautomatisierung zu maximieren.
Terraform definiert Infrastrukturverwaltung neu
Terraform dreht das konventionelle Infrastrukturmanagement auf links, indem es manuelle Prozesse und individuelle, prozedurale Skripte durch einen effizienteren und codebasierten Ansatz ersetzt. Dieses Konzept, bekannt als Infrastruc-ture-as-Code (IaC), ermöglicht es IT-Teams, Umgebungen präzise zu definieren, zu verwalten und zu versionieren – alles durch Code.
Obwohl sich der Funktionsumfang von Ansible und Terraform überschneidet und die Einsatzszenarien nicht immer klar voneinander abgegrenzt sind, zeichnet sich jedes der beiden Tools durch unterschiedliche Praktiken und Stärken aus. Interessanterweise können diese Unterschiede, richtig genutzt, zu einem kraftvollen Synergieeffekt führen, wenn beide Tools im Tandem arbeiten.
Dazu werfen wir einen kurzen Blick auf die Kernaspekte von Ansible und Terraform. Wir beleuchten, was jedes Tool auszeichnet, wann es sinnvoll ist, eines über das andere zu wählen, und wie eine Kombination beider Ansätze nicht nur möglich, sondern auch äußerst vorteilhaft sein kann. Ziel ist es, Ihnen ein besseres Verständnis dafür zu vermitteln, wie sich Ansible und Terraform gemeinsam nutzen lassen, um die Effizienz und Effektivität der Infrastrukturautomatisierung zu maximieren.
Terraform definiert Infrastrukturverwaltung neu
Terraform dreht das konventionelle Infrastrukturmanagement auf links, indem es manuelle Prozesse und individuelle, prozedurale Skripte durch einen effizienteren und codebasierten Ansatz ersetzt. Dieses Konzept, bekannt als Infrastruc-ture-as-Code (IaC), ermöglicht es IT-Teams, Umgebungen präzise zu definieren, zu verwalten und zu versionieren – alles durch Code.
Terraform zeichnet sich dabei durch verschiedene Eigenschaften aus, die erste ist "Declarative Configuration". Dieses Kernprinzip des Werkzeugs erlaubt IT-Verantwortlichen, lediglich den gewünschten Endzustand ihrer Infrastruktur in Konfigurationsdateien zu beschreiben. Terraform übernimmt anschließend die Arbeit, indem es die notwendigen Schritte ausführt, um diesen Zustand zu erreichen oder zu erhalten. Diese Herangehensweise minimiert das Risiko von menschlichen Fehlern und sorgt zudem für eine hohe Reproduzierbarkeit der erstellten Infrastrukturkonfigurationen.
Ein weiteres Grundprinzip und eine der großen Stärken von Terraform ist seine umfangreiche Providerarchitektur. Diese ermöglicht die Verwaltung einer breiten Palette von Ressourcen verschiedener Anbieter, einschließlich führender Clouddienste wie AWS, Azure und Google Cloud. Darüber hinaus unterstützt Terraform auch SaaS-Produkte sowie die Verwaltung von On-Premises-Infrastrukturen mit Providern für Nutanix, VM-ware, CheckPoint, Cisco und viele andere. Diese Vielseitigkeit macht Terraform zu einem Werkzeug für nahezu jedes Infrastrukturprojekt.
Terraform geht jedoch über die bloße Ressourcenverwaltung hinaus. Mit seinem "State Management" behält Terraform den Überblick über den Zustand der Infrastruktur sowie über die durchgeführten Änderungen und Abhängigkeiten. Dieses Wissen ermöglicht es der Software, Infrastrukturen konsistent zu halten und präzise Anpassungen vorzunehmen, ohne unbeabsichtigte Konsequenzen zu riskieren.
Ein weiteres wichtiges Merkmal von Terraform ist die Idempotenz seiner Konfigurationen. Das bedeutet, dass das wiederholte Ausführen von Terraform-Konfigura- tionen keine Änderungen bewirkt, sofern der definierte gewünschte Zustand bereits erreicht ist. Diese Eigenschaft stellt sicher, dass Terraform-Konfigurationen sicher und vorhersagbar sind, was in komplexen IT-Landschaften von großem Wert ist.
Bild 1: Mit Terraform lassen sich komplexe IT-Umgebung deklarativ beschreiben und automatisiert aufbauen.
Ansible steht für effizientes Konfigurationsmanagement
Ansible unterstützt Organisationen bei der Automatisierung der Softwarebereitstellung und des Konfigurationsmanagements. Dabei setzt die Anwendung auf Einfachheit und Effizienz, um IT-Prozesse zu beschleunigen und zu vereinfachen. Einer der Hauptvorteile von Ansible ist seine agentenlose Architektur. Für die Kommunikation mit den Zielmaschinen nutzt es SSH für Linux/ Unix-Systeme oder WinRM für Win-dows. Diese Methode macht die Installation von zusätzlicher Software auf den Zielmaschinen durch den Admin überflüssig, vereinfacht die Einrichtung und erhöht die Sicherheit.
Mit Ansible definieren Nutzer den gewünschten Zustand ihrer Systeme in Playbooks mit einer einfachen, deklarativen Sprache basierend auf YAML. Dies ermöglicht es selbst Admins ohne tiefgehende Programmierkenntnisse, komplexe Automatisierungsabläufe effizient zu gestalten und zu verwalten. Playbooks werden dabei prozedural, also von oben nach unten, ausgeführt.
Ähnlich wie Terraform gewährleistet Ansible durch Idempotenz, dass das wiederholte Ausführen von Playbooks keine unnötigen Änderungen verursacht, wenn der definierte Zustand bereits erreicht ist. Diese Eigenschaft sorgt für Zuverlässigkeit und Stabilität in der Automatisierung von IT-Prozessen. Ansible erleichtert zudem die Verwaltung von Zielsystemen durch den Einsatz von Inventardateien. Diese definieren Gruppen von Hosts, wodurch die Konfiguration und das Management von Systemen übersichtlich und zentralisiert erfolgen kann.
Einsatzgebiete von Ansible und Terraform
Bei der Modernisierung und Verwaltung von IT-Infrastrukturen stehen Admins oft vor der Herausforderung, das passende Automatisierungstool auszuwählen. Ansible und Terraform bieten leistungsstarke Funktionen, deren Einsatzgebiete sich jedoch teilweise überschneiden. Um die Auswahl zu vereinfachen, ist es hilfreich, die Konzepte von Day 0, Day 1 und Day 2 zu betrachten. Diese Phaseneinteilung hilft dabei, die Rollen von Terraform und Ansible im Lebenszyklus der IT-Infrastruktur zu verstehen:
- Day 0 bezieht sich auf die Planungs- und Erstellungsphase einer Infrastruktur.
- Day 1 umfasst die Inbetriebnahme und das Konfigurationsmanagement.
- Day 2 und darüber hinaus beinhalten den fortlaufenden Betrieb und die Anpassungen der Umgebung.
Terraform glänzt in der Phase des Day 0, der Planung und dem Aufbau der Infrastruktur. Mit seinem deklarativen Ansatz ermöglicht Terraform die präzise Definition des gewünschten Zustands der Umgebung, bevor diese überhaupt erstellt wird. Die Fähigkeit, IT-Landschaften von Grund auf zu planen und zu implementieren, macht Terraform zum idealen Werkzeug für den Startpunkt der Infrastrukturentwicklung.
Sobald die Systeme stehen, kommt Ansible ins Spiel. Für Day 1 und die folgenden Phasen ist das Tool mit seinem agentenlosen Ansatz und der Fähigkeit, komplexe Konfigurationen zu verwalten, bestens gerüstet. Ansible erleichtert das Konfigurationsmanagement, die Automatisierung von wiederkehrenden Aufgaben und die Anpassung bestehender Systeme. Seine Flexibilität und Einfachheit im Umgang mit bereits bestehenden Infrastrukturen unterstützen den langfristigen Betrieb und die fortlaufende Pflege.
Mögliche Kombinationen
Ein klassischer Anwendungsfall, bei dem beide Technologien kombiniert werden können, ist beispielsweise Terraform zu nutzen, um eine neue Cloudinfrastruktur in AWS zu erstellen, die Netzwerke, VMs und Speicher umfasst. Die deklarative Konfiguration definiert genau, was und in welchem Sizing benötigt wird, und Terraform sorgt für die Umsetzung dieser Vorgabe. Ansible kommt zum Zug, wenn es darum geht, Software auf diesen VMs zu installieren, Konfigurationen anzupassen und sicherzustellen, dass die Systeme gemäß den Unternehmensrichtlinien konfiguriert sind. Die agentenlose Architektur und die einfachen YAML-Playbooks von Ansible machen diese Aufgaben effizient und wiederholbar.
Für die Kombination der beiden Tools existieren unterschiedliche Ansätze, die sich je nach Anwendungsfall oder bestehender Prozesse besser oder schlechter eignen. Unabhängig von der technischen Verzahnung der beiden Werk- zeuge steht eines in der Regel fest: Terraform übernimmt die Gestaltung in der initialen Phase und wird vor Ansible ausgeführt. So entstehen zuerst die notwendigen Komponenten, bevor Ansible diese konfiguriert. Für die technische Integration der beiden Tools existieren die folgenden Methoden:
- Dynamisches Auslösen von Ansible-Playbooks durch Terraform: Diese Methode ermöglicht es Terraform, unmittelbar nach der Bereitstellung der Infrastruktur die Konfiguration durch Ansible-Playbooks zu initiieren.
- Steuerung von Terraform durch Ansible: Hierbei wird Ansible genutzt, um Terraform-Aktionen zu starten, was eine flexible Anpassung der Umgebung und deren Konfiguration ermöglicht.
- Nahtlose Prozessintegration durch CI/CD und Infrastructure as Code: Eine Integration beider Tools in CI/CD-Pipelines oder die Nutzung von IaC-Plattformen fördert eine durchgehend automatisierte und effiziente Infrastrukturverwaltung.
CI/CD und IaC
Eine der anpassungsfähigsten Möglichkeiten zur Integration der beiden Technologien sind zusätzliche Tools. So gibt es IaC-Werkzeuge wie beispielsweise Spacelift, die sowohl Ansible als auch Terraform unterstützen. Somit können beide Ansätze von einer zentralen Plattform starten, während die relevanten Daten zentral gespeichert und bei Bedarf an die Tools weitergegeben werden können. Auch klassische CI/CD-Anwendungen wie Azure DevOps, GitHub Actions oder Jenkins verfügen über Optionen, beide Technologien anzusprechen und Daten über einen Pipeline-Run vorzuhalten.
Starten von Playbooks aus Terraform
Bei dieser Methode laufen Terraform und Ansible separat voneinander. Die Schnittstelle zwischen den beiden Tools besteht dabei lediglich aus Ansibles Inventory-File. Dieses bildet die verschiedenen Hosts und Gruppen ab, die es zu konfigurieren gilt. Eine Gruppe könnte beispielsweise "webserver" heißen und auf allen Hosts, die der Gruppe angehören, durch Ansible den nginx-Webserver installieren und einrichten.
Insbesondere bei Cloudprovidern sind IP-Adressen oder Hostnames zufällig (beziehungsweise zumindest ohne erkennbares Muster) und so nicht unbedingt vorhersehbar. Nachdem Terraform die Ressourcen aber angelegt hat, kennt es jedoch alle relevanten Informationen zu ihnen. Neben der IP-Adresse oder FQDN sind auch zufällig erstellte Credentials oder Schlüsselinformationen für Ansible von Bedeutung.
Der noch recht junge Terraform-Provider "ansible" ist in der Lage, ein Ansible-Inventory anzulegen. Ein einfaches Beispiel sieht wie folgt aus:
resource "ansible_host" "<Host>" {
   name    = "<Name des Hosts>"
   groups = ["<Gruppenname>"]
   variables = {
      var1  = "<Variable 1>"
   }
}
Über die Playbook-Ressource ist es außerdem möglich ein Ansible-Playbook zu triggern:
resource "ansible_playbook" "<Playbook>" {
   playbook    = "<Playbook.yml>"
   name          = "<Host-1.bei-    spiel.com>"
   replayable = true
   extra_vars = {
      var_a = "<Variable A>"
      var_b = "<Variable B>"
   }
}
Bild 2: Ansible automatisiert in seinen Playbooks das Konfigurationsmanagement.
Initiierung von Terraform durch Ansible
Die ebenfalls recht junge Ansible-Collec-tion "cloud.terraform" ermöglicht die Interaktion zwischen Ansible und Terraform mit Ansible als Initiator. Gleich bleibt hierbei der Ansatz, dass Terraform-Instruktionen vor den eigentlichen Ansible-Playbooks laufen. Gerade aber Admins, die sich mit Ansible wohl fühlen, haben den Vorteil, die Steuerung aus diesem durchzuführen. Auch in Hinblick auf AWX oder die Ansible Automation Platform kann es durchaus sinnvoll für die Abfolge der Automation Workflows sein, Terraform-Konfigurationen über Ansible anzustoßen. Ein Beispiel für das Initiieren von Terraform über Ansible:
- name: Create VM
   community.general.terraform:
      project_path: '{{ project_dir }}'
      state: present
      complex_vars: true
      variables:
         vm_name: "{{       inventory_hostname }}"
         vm_vcpus: 2
         vm_mem: 2048
Fazit
Die Kombination von Ansible und Terraform bietet eine leistungsstarke Lösung für das Infrastrukturmanagement. Durch die strategische Nutzung beider Tools können IT-Teams das Erstellen, Konfigurieren und Verwalten ihrer Umgebungen optimieren. Die Auswahl des richtigen Integrationsansatzes hängt von den spezifischen Anforderungen des Projekts und den bevorzugten Arbeitsabläufen ab. Mit den richtigen Praktiken arbeiten Ansible und Terraform zusammen, um die Automatisierung auf die nächste Stufe zu heben.
(jp)