DEV Community

Sajid Rashid
Sajid Rashid

Posted on

What is Terraform? Everything You Need to Know

Introduction

Terraform is an Infrastructure as Code (IaC) tool developed by HashiCorp that allows you to define, provision, and manage infrastructure using a declarative configuration language called HCL (HashiCorp Configuration Language). Terraform is widely used in cloud environments like AWS, Azure, and Google Cloud to automate infrastructure provisioning and ensure repeatability.

This article will provide an in-depth understanding of Terraform, its benefits, installation, key commands, and usage with cloud providers.

Why Use Terraform?

Terraform is a powerful tool that helps DevOps and infrastructure engineers achieve repeatability, automation, and version control in infrastructure provisioning. Some key benefits include:

  • Repeatability: Infrastructure can be defined and deployed consistently.

  • Auditability: Changes are tracked in a version control system (VCS) like Git.

  • Change Control: Any infrastructure change is introduced via code updates.

  • Collaboration: Teams can work together using GitHub, GitLab, or Bitbucket.

Key Terminology

  • IaC (Infrastructure as Code): Managing infrastructure through code.

  • CM (Configuration Management): Tools like Ansible, Puppet, SaltStack for managing configurations.

  • IaaS (Infrastructure as a Service): AWS, Azure, and other cloud providers.

  • PaaS (Platform as a Service): Platforms for hosting applications.

  • VCS (Version Control System): Git, GitHub, or GitLab for tracking changes.

  • CI/CD (Continuous Integration/Continuous Deployment): Automating deployment pipelines.

  • SDLC (Software Development Life Cycle): The development workflow from planning to maintenance.

Declarative vs. Imperative Approaches

Terraform follows the Declarative approach, meaning you describe the desired state of infrastructure, and Terraform figures out how to achieve it.

Declarative Example:

resource "aws_instance" "web" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
}
Enter fullscreen mode Exit fullscreen mode

Imperative Approach:

Using CLI tools like AWS CLI or Python scripts to manually define the provisioning steps.

Understanding Terraform Components

1. Terraform Configuration Files

Terraform configuration consists of .tf files that define infrastructure resources.

2. State File

Terraform keeps track of deployed resources in a state file (terraform.tfstate). This file can be stored locally or in a remote backend like AWS S3 or Terraform Cloud.

3. Modules and Registry

Terraform modules allow code reusability and modularity, while the Terraform Registry provides pre-built modules for infrastructure components.

Installing Terraform

Using Docker:

docker pull hashicorp/terraform:latest
docker run --rm hashicorp/terraform --version
Enter fullscreen mode Exit fullscreen mode

On CentOS:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
Enter fullscreen mode Exit fullscreen mode

On Amazon Linux/EC2:

sudo yum install -y yum-utils shadow-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
Enter fullscreen mode Exit fullscreen mode

Terraform Workflow

1. Initializing Terraform

terraform init
Enter fullscreen mode Exit fullscreen mode

This prepares Terraform to manage infrastructure by downloading necessary providers.

2. Planning Infrastructure Changes

terraform plan
Enter fullscreen mode Exit fullscreen mode

Compares the desired configuration with the current state and generates an execution plan.

3. Applying Changes

terraform apply

Enter fullscreen mode Exit fullscreen mode

Executes the plan and provisions the infrastructure.

4. Destroying Resources

terraform destroy

Enter fullscreen mode Exit fullscreen mode

Removes all resources managed by Terraform.

Terraform in a Version Control Environment

Terraform configurations should be managed using a Git repository to track changes.

Pushing Changes to GitHub
1- Clone the repository:

git clone https://github.com/your-repo/terraform-project.git
Enter fullscreen mode Exit fullscreen mode

2- Initialize Terraform:

terraform init
Enter fullscreen mode Exit fullscreen mode

3- Generate a plan:

terraform plan -out=tfplan.out
terraform show -no-color tfplan.out > tfplan.txt
Enter fullscreen mode Exit fullscreen mode

4- Apply changes:

terraform apply tfplan.out
Enter fullscreen mode Exit fullscreen mode

5- Push changes to GitHub:

git add .
git commit -m "Added Terraform configuration"
git push origin main
Enter fullscreen mode Exit fullscreen mode

Creating an EC2 Instance with Terraform

Here’s how you can launch an EC2 instance using Terraform:

main.tf (Terraform configuration file)

provider "aws" {
  region = "eu-west-2"
}

resource "aws_instance" "web" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
  tags = {
    Name = "Terraform-EC2-Instance"
  }
}
Enter fullscreen mode Exit fullscreen mode

Execution Steps:

terraform init
terraform plan -out=tfplan.out
terraform apply tfplan.out
Enter fullscreen mode Exit fullscreen mode

Once applied, Terraform will output Instance ID, Public IP, and other details.

Summary

Terraform is a powerful, declarative IaC tool that simplifies infrastructure provisioning and management. With support for multiple cloud providers, modular code, and version control integration, it is an essential tool for DevOps engineers.

Start using Terraform today and automate your cloud infrastructure efficiently!

Follow me for more DevOps insights! :)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

👋 Kindness is contagious

If you found this post helpful, please consider leaving a ❤️ or a kind comment!

Sounds good!