Die Art und Weise, wie DevOps als Kultur an Dynamik gewinnt, Tools wie Ansible und Terraform zeugen von einer enormen Nachfrage und Popularität.
Beide Tools gelten als Infrastructure as Code (IaC) Lösungen, die bei der Bereitstellung von Code und Infrastruktur helfen. Während Ansible als Konfigurationsmanagementlösung fungiert, die allgemein als „CM“ abgekürzt wird, ist Terraform ein Service-Orchestrierungs- oder Bereitstellungstool.
Beachten Sie, dass es Überschneidungen gibt und sich diese Begriffe nicht unbedingt gegenseitig ausschließen. Das verwirrt die Leute und deshalb werde ich Ansible und Terraform vergleichen.
Ich werde erklären, wofür diese Tools verwendet werden, was ihre Vor- und Nachteile sind. Dies hilft Ihnen bei der Entscheidung, ob Sie Ansible oder Terraform in Ihren Projekten verwenden sollten.
Ansible und Terraform:Was sind diese Tools?
Werfen wir zunächst einen kurzen Blick auf diese beliebten DevOps-Tools.
Was ist Ansible?
Ansible ist ein IT-Automatisierungstool. Es kann Systeme konfigurieren, Software bereitstellen und erweiterte IT-Aufgaben wie kontinuierliche Bereitstellungen oder rollierende Updates ohne Ausfallzeit ausführen.
Was ist Terraform?
Terraform ist ein Tool zum sicheren und effizienten Erstellen, Ändern und Versionieren von Infrastrukturen. Terraform kann bestehende und beliebte Dienstanbieter sowie benutzerdefinierte Inhouse-Lösungen verwalten.
Bevor wir die Unterschiede zwischen diesen beiden Tools hervorheben, wollen wir zunächst verstehen, was Configuration Management and Orchestration ist.
Konfigurationsmanagement vs. Orchestrierung
Das Konfigurationsmanagement besteht aus festgelegten Prozessen und Verfahren, die sicherstellen, dass der gewünschte und konsistente Zustand Ihrer Infrastruktur, einschließlich Server und Software, immer erreicht wird. Mit anderen Worten, es ist eine Möglichkeit sicherzustellen, dass ein System die erwartete Leistung erbringt, wenn im Laufe der Zeit Änderungen vorgenommen werden.
CM-Tools stellen sicher, dass IT-Bereitstellungen schneller, inkrementell, wiederholbar, skalierbar und vorhersehbar sind und den gewünschten Zustand beibehalten, wodurch verwaltete Assets in einen erwarteten Zustand gebracht werden.
Tools wie Ansible werden für das Konfigurationsmanagement verwendet.
Bei der Orchestrierung können Sie mit den Orchestrierungstools nicht nur Server bereitstellen, sondern auch Datenbanken, Caches, Load Balancer, Warteschlangen, Überwachung, Subnetzkonfiguration, Firewall-Einstellungen, Routing-Regeln, SSL-Zertifikate und fast jeden anderen Aspekt Ihrer Infrastruktur , hauptsächlich öffentliche Cloud-Infrastruktur.
Terraform ist ein Orchestrierungstool. Es wurde entwickelt, um die Serverinstanzen selbst bereitzustellen und die Konfiguration dieser Server anderen Tools zu überlassen.
Prozedurale vs. deklarative Sprache
DevOps-Tools können je nachdem, wie sie ihre Aktionen ausführen, wenn sie angewendet werden, als prozedural oder deklarativ kategorisiert werden.
Verfahrensweise beschreibt eine Anwendung, bei der die genauen Schritte im Code festgelegt werden müssen, während Declarative „deklariert“ genau das, was benötigt wird, nicht den Prozess, durch den das Ergebnis erzielt wird.
Ansible verwendet einen prozeduralen Stil, bei dem Sie den Code schreiben, der schrittweise Aufgaben angibt, um den gewünschten Endzustand zu erreichen.
Während Tools wie Terraform und AWS CloudFormation alle deklarativ sind, definieren sie den Prozess, in dem Sie Code schreiben, der Ihren gewünschten Endzustand angibt. Wenn Sie beispielsweise 5 EC2-Instances benötigen, haben Sie genau so viele, nachdem der Code ausgeführt wurde.
Ansible und Terraform:Vergleich
Mal sehen, was die Vor- und Nachteile der Verwendung von Terraform sind:
Vorteile von Terraform
- Terraform verwaltet die gesamte Cloud-Infrastruktur und stellt diese Ressourcen als Code zur Verfügung. Das macht inkrementelle Änderungsprozesse sehr einfach.
- Modularer Aufbau.
- Einfach und leicht zu erlernen
- Es behält den Status der erstellten Ressourcen bei. Alle von Terraform erstellten Objekte werden neu erstellt, wenn sie von einem anderen Prozess gelöscht werden.
- Nahtlose Integration mit CI/CD-Pipelines.
- Es ermöglicht den Import vorhandener Ressourcen, um sie in den Terraform-Zustand zu versetzen.
- Wenn Sie
terraform plan
ausführen , zeigt es die Änderungen an, die auf bereits vorhandene Ressourcen angewendet werden. Dies gibt DevOps-Ingenieuren einen Einblick in die Änderungen, die sie vornehmen werden, insbesondere wenn die Änderungen nicht wie erwartet sind.
Nachteile von Terraform
- Keine Rollbacks. Sie müssen alles zerstören und das tf-Skript muss erneut ausgeführt werden.
- Die Fehlerbehandlung ist nicht ausgereift. Ab Terraform
v.12.20
es gibt zwei neue Funktionen für Konsumententry()
undcan()
. - Das Erstellen von Terraform-Skripten ist nicht direkt aus Statusdateien zulässig.
- Das Terraform-Tool befindet sich noch in der Entwicklung und durchläuft jeden Monat viele Betaversionen.
- Nicht jeder Artikel kann importiert werden.
terrafom import
Der Befehl kann nur jeweils eine Ressource importieren. Das bedeutet, dass Sie den Terraform-Import noch nicht auf eine ganze Sammlung von Ressourcen wie eine AWS-VPC richten und alles importieren können.
Vor- und Nachteile der Verwendung von Ansible
Werfen wir nun einen Blick auf die Vor- und Nachteile von Ansible.
Vorteile von Ansible
- Einfach und leicht zu erlernen
- Agentenlos
- Machen Sie den gesamten Bereitstellungsprozess automatisiert und entwicklerfreundlich
- YAML-basierte einfache und lesbare Skripte (Ansible Playbooks)
- Riesige Modulunterstützung
- Verfügbarkeit eines zentralen Repositorys namens Ansible Galaxy, um Ansible-Inhalte zu finden und wiederzuverwenden.
Nachteile von Ansible
- Mangelndes UI-Angebot. AWX, das sich schließlich zu Ansible Tower entwickelte, hat noch viel Raum für Verbesserungen.
- Keine Zustandserhaltung. Ansible verfolgt keine Abhängigkeiten. Es führt einfach eine sequenzielle Reihe von Aufgaben aus, stoppt, wenn es fertig ist, schlägt fehl oder trifft auf einen Fehler.
- Nicht auf dem neuesten Stand, wenn es um die Unterstützung von Windows-Betriebssystemen geht. Ansible befindet sich noch in einem frühen Stadium, um die Unterstützung für Windows zu erweitern.
- Nicht so einfach, wenn Sie komplexe Skripte mit umfangreicher Logik in Playbooks schreiben müssen.
- Enterprise Support ist noch nicht ausgereift/zuverlässig.
- Es fehlen beschreibende Fehlermeldungen, wenn es darum geht, komplexe Playbooks zu debuggen.
Terraform oder Ansible? Welches ist besser für Sie?
Glauben Sie mir, diese Frage ist nicht einfach zu beantworten. Denn es hängt stark von Ihren Anforderungen ab.
In der realen Welt verlassen Sie sich in IT-Organisationen nie auf ein Tool, sondern verwenden eine Kombination verschiedener Tools, um die gewünschten Ergebnisse zu erzielen.
Sowohl Ansible- als auch Terraform-Tools machen viele Dinge ziemlich gut. Und meine persönliche Präferenz ist die Verwendung von Terraform für die Orchestrierung/Bereitstellung und Ansible für das Konfigurationsmanagement.
Terraform zeigt seine besten Fähigkeiten, wenn es für die Infrastruktur-Orchestrierung (Verwaltung von Cloud-Ressourcen) verwendet wird, da es dafür entwickelt wurde.
Ansible hingegen ist am besten für Konfigurationsmanagementaufgaben (Bereitstellung von Software und Maschinen) geeignet und optimiert. Auch Orchestrierungsaufgaben können damit durchgeführt werden, aber das ist nur ein Teil dessen, was es tut.
Mein Vorschlag - verwenden Sie das Beste und Ursprünglichste für die Aufgabe, die Sie ausführen möchten.
Aber das ist auch nicht die Faustregel, da Sie vielleicht Leute finden, die es vorziehen, ein Tool für alles zu verwenden, und es funktioniert für sie!
Schlussfolgerung
Beide Tools haben ihre eigenen Vorteile, aber auch Einschränkungen beim Entwerfen von Infrastructure-as-Code-Umgebungen für die Automatisierung. Und ja, der Erfolg hängt ganz davon ab, zu wissen, welche Tools man für welche Jobs verwendet.
Ich hoffe, ich habe Ihnen einiges rund um Ansible und Terraform klarer gemacht. Wenn Sie noch Fragen oder Vorschläge haben, lassen Sie es mich bitte im Kommentarbereich wissen.