Terraform is a tool to manage and deploy infrastructure with much more ease than Ansible. It has better features, less complexity, and increased automation. However, Terraform still struggles with certain tasks that Ansible does well in comparison. Does the superiority of one mean the end for another?
Terraform, Ansible and Packer are three different tools that can be used to create, manage, and deploy software. This article compares each of the tools in depth.
Infrastructure as Code (IaC) is a vast field. On one side, there are tools for infrastructure provisioning, while on the other, there are tools for configuration management. Two of the most well-known names in the IaC sector are Ansible and Terraform. Let’s watch how the dispute between Terraform and Ansible plays out.
What are the functions of Ansible and Terraform? How do they tackle Infrastructure Administration? What difference does it make? Spoiler alert: Instead of fighting, this post will show you how these technologies can work together to form a strong toolkit.
What are Terraform and Ansible’s main goals?
Toolstop’s “Focus” is released under a CC BY 2.0 license.
Comprehending the emphasis of Terraform and Ansible is crucial to understanding the struggle. What is the goal of each tool?
Terraform is more concerned with infrastructure. Terraform was built from the ground up to construct infrastructure around real and virtual machines. Terraform has always been agnostic when it comes to infrastructure provisioning. Its primary concentration was not on operating systems (OS) such as Linux or Windows.
Ansible, on the other hand, has generally concentrated on the operating system rather than the infrastructure that supports it. Ansible excels at tasks like installing software, managing files, services, and other OS-specific situations.
Ansible gained the capacity to control bigger infrastructure in AWS, Azure, and other cloud systems around 2015, although it still focuses on the operating system.
The way each tool behaves is influenced by its emphasis. Configuration management requires a more precise emphasis, while Infrastructure Administration necessitates a higher degree of focus. Both have their own merits.
A Crucial Component: Infrastructure as Code
When you need to create a virtual machine, a cloud resource, or just transfer some files around, the component will end up in a certain state. It’s possible that the state contains extra files, a new virtual NIC, or a complete new virtual machine. Regardless, there is a Conclusion.
IaC seeks to help you get to the end state by enabling you to express it in a configuration and providing a tool that can help you get there. IaC allows you to describe an end state in a configuration, run a tool, and that state arises on its own, as if by magic.
IaC enables you to apply the same tools and techniques to your infrastructure that developers do to applications. You write code to specify the configuration and then run it to construct the infrastructure and define the configuration.
You may then put that code under source/version control and take use of all of the benefits that software engineers enjoy when developing and working on software projects, such as version control, easier collaboration, automated testing, and deployments.
To make IaC feasible, Terraform and Ansible require a language. Let’s have a look at the various techniques they use.
The idea of “layers” is one of the most essential things to comprehend when comparing Ansible to Terraform. The operating system runs “on top” of the hardware or virtualized environment, hence it requires resources to execute. A server may be thought of as having two “layers.”
Terraform is primarily concerned with infrastructure, while Ansible is more concerned with infrastructure configuration. Terraform is more suited to the infrastructure “layer,” whereas Ansible is more suited to the operating system “layer.”
Although Ansible began as a configuration management tool and has subsequently evolved to automate infrastructure provisioning, it is still largely used for “layer” activities in operating systems. Terraform, on the other hand, was built with infrastructure provisioning in mind from the start.
Resources that are immutable vs. those that are malleable
Mutability is a notion used by software engineers to describe anything that can be altered. The state of a resource and modifying that condition to fit the expectation are essential to IaC. You may either update the state of an existing resource to make it changeable or delete and recreate the resource with the same configuration to make it immutable.
For example, to establish a web server on an existing Linux virtual machine, you may need to install the Apache service as well as several various Apache configuration pieces.
All of the tasks that go into configuring Apache result in a final state. You may get to that end state in one of two ways: by modifying the VM (Mutability) or by deleting the whole VM and starting again (imMutability). Ansible and Terraform are recognized for their distinct methods.
Ansible is well-known for emphasizing Mutability. Ansible will not delete a resource by default, instead attempting to alter its status. Terraform, on the other hand, will obliterate certain resources and regenerate them without your participation. Each tool has a unique approach.
Ansible, on the other hand, isn’t only a changeable tool. It can deploy new VM images as simply as Terraform can, such as Amazon Machine Images (AMIs) or Azure Managed VM Images.
Terraform and Ansible, as you may have guessed, aren’t completely malleable or immutable. Terraform can conduct mutable actions on a VM, such as upgrading RAM, without having to turn it off and restart it. Ansible may use base images to deploy templates. To get the most out of any tool, it’s important to grasp their default approach.
Let’s Get Declarative, shall we?
You must grasp how IaC tools like Terraform and Ansible read and apply the configuration you describe if you’re talking about them. To do so, you’ll need to grasp what a Declarative configuration is.
For example, in every server setup, there will always be a series of steps to perform in order to achieve the desired state. To achieve that condition, your tool of choice must follow those tasks. When comparing Ansible with Terraform, it’s crucial to understand how it does so.
Declarative technologies like Ansible and Terraform are well-known. Unlike imperative or procedural tools like as scripts, which compel you to specify how resources are provided without much regard for order, Declarative tools enable you to declare what the state will look like and the system will take care of the rest.
To construct five web servers using a Declarative tool, you’d say “I’d like five web servers,” but with an imperative or procedural tool, you’d say “If these five web servers don’t already exist, create this one first, then the other four web servers.” Declarative tools allow you to save time.
A culinary recipe may be thought of as procedural; it provides step-by-step instructions that must be followed one at a time to get the desired outcome.
Below are two examples of how to generate an AWS EC2 instance from an existing AWS AMI using an Ansible playbook and a Terraform configuration. You’ll see that you don’t have to specify how the instances are constructed; all you have to do is tell them what to build, and they’ll take care of the rest.
Create EC2 instances ec2: ## Ansible configuration – name: instance type: “t2.micro” region: “us-east-1” “ami-0323c3dd2da7fb37d” is an image. wait: 1 register: ec2 exact count: 1
The EC2 instance would be created using the Terraform setup below.
## Terraform configuration provider “aws” region = “us-east-1” profile = “default” “web” resource “aws instance” instance type = “t2.micro” ami = “ami-0323c3dd2da7fb37d”
Terraform’s config files may be written in one of two ways: JSON or HCL2. Hashicorp’s configuration language is HCL2, which is used in all new programming for their products.
When Not to Use Terraform or Ansible
You’ve learned a lot about IaC, infrastructure, and configuration management ideas, as well as how Ansible and Terraform tackle IaC. You could be thinking right now that both gadgets look amazing for any occasion! That idea is completely incorrect.
Both Terraform and Ansible have advantages and disadvantages. Make sure you know when not to use one tool over the other before you start depending on it for all of your automated activities.
In Terraform, imMutability might be a problem at times. When utilizing images to provide VMs, you may require tens of distinct images for web servers, application servers, message servers, and so on. Because Terraform can’t modify the picture itself, you’ll need an image that has the precise state you’re looking for.
Take a look at the services that need a high pace of change. Do you preserve the past three templates in case you need to go back to them? Do you save the previous week’s worth?
If you deploy two modifications each day for a week, you’ll end up with 10 copies of the server. For a normal Windows Server installation, 40GB+ each copy is a lot of storage and a lot of templates to manage.
Ansible, on the other hand, has problems with configuration drift, which is caused by factors outside its control. When an administrator modifies a setting on a resource controlled by Ansible but not using Ansible, this is known as configuration drift.
This configuration drift may cause Ansible-managed systems to get out of compliance, resulting in unanticipated difficulties. A modification to Ansible that is tested on a clean build in the lab may not always represent what will happen when the change is implemented in production.
Ansible vs. Terraform: A Comparison
How do these two tools compare on a few key criteria now that you’ve studied many of the most significant ideas surrounding them?
|Focus||Infrastructure Administration||Configuration Management for Servers|
|Mutability||Templates that can’t be changed||Configuration that can be changed|
|Methodology for Using Configuration||Declarative||Declarative|
|Granularity||Image of the Server||Individual files, as well as the contents of files, are available.|
Ansible vs. Terraform
Not Ansible vs. Terraform but Terraform AND Ansible
Each instrument has benefits and drawbacks, but the question should be “How do I utilize each tool together?” rather than “Which tool should I use?” Terraform may cause “image sprawl,” and Ansible can’t manage everything, so combine the two!
Assume you provide specialized website hosting. Your customers all have the same infrastructure, which includes a few web servers, a few application servers, and a few database servers. The majority of each resource’s setup is the same.
You decide to generate a distinct image for each VM to account for all of the commonalities across all sorts of VMs to avoid having to develop unique VM setups for each client.
You then use a set of standardized VM images to deploy each server, bringing you closer to your intended end state. However, each VM must have its own client-specific OS configuration. You achieve this by including Ansible into your deployment process. Ansible then applies the required OS-level setup for each client using a bespoke Ansible playbook supplied by the client.
You’ve got the finest of both worlds in your hands. Terraform was used to automate the typical infrastructure-level operations, while Ansible was utilized to complete the remaining tasks. When templates are changed, you may swiftly deploy a new system without having to handle hundreds of separate templates.
By deploying a new template and executing the Ansible configuration against it once, you may securely make changes to an existing environment. Configuration drift is no longer an issue.
There are just too many tools that claim to be the “One True Tool.” A few specialized tools may be much more effective. Simply consult a carpenter or mechanic.
Both Terraform and Ansible are fantastic tools. They go out to accomplish a task, and they succeed spectacularly. Both technologies are improving to address the issues raised in this article.
Fundamentally, each tool attempts to accomplish distinct goals and never totally duplicates the feature set of the other. This concentration is beneficial! So, why not get started right now using Terraform and Ansible and begin your IaC journey?
Terraform is a tool for building and managing infrastructure. Ansible is a tool for automating software deployment. This battle to the death will show how each of these tools work, but more importantly, it will show who wins in the end. Reference: terraform orchestration.
- terraform vs python
- terraform popularity
- better than ansible
- foreman vs terraform
- terraform vs ansible stackshare