How to Write Terraform Script

How to Write Terraform Script: A Complete Tutorial Introduction Terraform is an open-source infrastructure as code (IaC) tool that enables developers and operations teams to define and provision data center infrastructure using a high-level configuration language known as HashiCorp Configuration Language (HCL). Writing Terraform scripts allows you to create, manage, and version infrastructure safe

Nov 17, 2025 - 10:59
Nov 17, 2025 - 10:59
 3

How to Write Terraform Script: A Complete Tutorial

Introduction

Terraform is an open-source infrastructure as code (IaC) tool that enables developers and operations teams to define and provision data center infrastructure using a high-level configuration language known as HashiCorp Configuration Language (HCL). Writing Terraform scripts allows you to create, manage, and version infrastructure safely and efficiently.

Understanding how to write Terraform scripts is crucial for automating cloud infrastructure, ensuring consistency across environments, and reducing manual errors. This tutorial provides a comprehensive, step-by-step guide to help you write effective Terraform scripts, follow best practices, utilize essential tools, and understand real-world examples.

Step-by-Step Guide

Step 1: Install Terraform

Before writing any Terraform script, you need to install Terraform on your local machine or server.

  • Visit the official Terraform website to download the latest binary for your operating system.
  • Follow the installation instructions specific to Windows, macOS, or Linux.
  • Verify the installation by running terraform version in your terminal.

Step 2: Set Up Your Working Directory

Create a dedicated directory for your Terraform configuration files. This directory will contain all the scripts, state files, and modules for your infrastructure.

Example:

mkdir terraform-project

cd terraform-project

Step 3: Understand Terraform Configuration Files

Terraform scripts are written in files with the .tf extension. Key components include:

  • Providers: Define which cloud or service provider you want to use (e.g., AWS, Azure, Google Cloud).
  • Resources: Define the infrastructure objects like virtual machines, networks, or storage buckets.
  • Variables: Allow input values to be passed into scripts to make them reusable and flexible.
  • Outputs: Define values to be displayed or used after Terraform applies the configuration.

Step 4: Define a Provider

Every Terraform script starts by specifying the provider to interact with. For example, to use AWS, add the following to main.tf:

provider "aws" {

region = "us-east-1"

}

This configures Terraform to use AWS in the us-east-1 region.

Step 5: Declare Resources

Resources are the building blocks of your infrastructure. To create an AWS EC2 instance, add:

resource "aws_instance" "example" {

ami = "ami-0c55b159cbfafe1f0"

instance_type = "t2.micro"

}

Here, aws_instance is the resource type, example is the resource name, and the parameters specify the machine image and instance size.

Step 6: Use Variables for Flexibility

Variables make your Terraform scripts dynamic. Define variables in a separate file like variables.tf:

variable "instance_type" {

description = "Type of EC2 instance"

type = string

default = "t2.micro"

}

Use the variable in your resource by replacing hardcoded values:

resource "aws_instance" "example" {

ami = "ami-0c55b159cbfafe1f0"

instance_type = var.instance_type

}

Step 7: Initialize Terraform

Run terraform init in your working directory. This command downloads necessary provider plugins and prepares Terraform to manage your configuration.

Step 8: Plan Your Infrastructure

Before applying changes, execute terraform plan to preview the actions Terraform will take. This helps catch errors and understand modifications.

Step 9: Apply Your Configuration

To create or update infrastructure, run terraform apply. Confirm the prompt to proceed. Terraform will provision resources as defined.

Step 10: Manage State Files

Terraform maintains a state file (terraform.tfstate) to track resource mappings. Manage this file carefully, especially in team environments. Consider using remote backends like AWS S3 or HashiCorp Consul for state storage.

Step 11: Destroy Infrastructure

To remove all resources defined in your configuration, use terraform destroy. This helps clean up environments and avoid unnecessary costs.

Best Practices

Use Modular Architecture

Break down your Terraform code into reusable modules. This encourages code reuse, easier maintenance, and clearer organization.

Keep State Secure and Remote

Store Terraform state files in secure, remote backends with encryption and access controls to prevent data loss or unauthorized access.

Write Descriptive Comments and Documentation

Add comments and maintain documentation to improve code readability and facilitate collaboration across teams.

Version Control Your Terraform Code

Use Git or other version control systems to track changes and enable rollback if necessary.

Validate and Format Code Regularly

Use terraform validate to check for syntax errors and terraform fmt to ensure consistent code formatting.

Use Input Variables and Outputs Wisely

Define variables for all configurable parameters and use outputs to expose essential resource information for other systems or modules.

Test Changes in a Sandbox Environment

Before applying Terraform scripts in production, test them in isolated environments to minimize risks.

Tools and Resources

Terraform CLI

The core command-line tool for writing, planning, applying, and managing Terraform scripts.

Terraform Cloud and Terraform Enterprise

Managed services that provide collaboration, remote state management, and policy enforcement for Terraform users.

Terraform Providers Registry

An extensive library of official and community-supported providers to integrate with various cloud platforms and services: https://registry.terraform.io/

Integrated Development Environments (IDEs)

Popular IDEs like Visual Studio Code have Terraform extensions to provide syntax highlighting, linting, and autocompletion.

HashiCorp Learn

Official tutorials and documentation to deepen your understanding of Terraform concepts and best practices: https://learn.hashicorp.com/terraform

Real Examples

Example 1: Simple AWS EC2 Instance

main.tf

provider "aws" {

region = "us-west-2"

}

resource "aws_instance" "web" {

ami = "ami-0abcdef1234567890"

instance_type = "t2.micro"

tags = {

Name = "WebServer"

}

}

This script provisions a single EC2 instance named "WebServer" in the AWS us-west-2 region.

Example 2: Using Variables and Outputs

variables.tf

variable "instance_type" {

description = "EC2 instance type"

type = string

default = "t2.small"

}

main.tf

provider "aws" {

region = "us-east-1"

}

resource "aws_instance" "app" {

ami = "ami-0abcdef1234567890"

instance_type = var.instance_type

}

output "instance_ip" {

description = "Public IP of the EC2 instance"

value = aws_instance.app.public_ip

}

This configuration utilizes a variable to customize the instance type and outputs the public IP address after deployment.

Example 3: Modular Approach

Structure your project with modules for scalability:

terraform-project/

??? main.tf

??? variables.tf

??? modules/

? ??? ec2-instance/

? ??? main.tf

? ??? variables.tf

? ??? outputs.tf

The modules/ec2-instance/main.tf can define an EC2 resource, while the root main.tf calls the module:

module "web_server" {

source = "./modules/ec2-instance"

instance_type = "t3.micro"

ami = "ami-0abcdef1234567890"

}

FAQs

What is Terraform used for?

Terraform is used to automate infrastructure provisioning and management across cloud providers and services using code.

What language does Terraform use?

Terraform uses HashiCorp Configuration Language (HCL), which is human-readable and designed for infrastructure configuration.

Can Terraform manage existing infrastructure?

Yes, Terraform can import existing resources into its state to manage them alongside new infrastructure.

How does Terraform differ from configuration management tools?

Terraform focuses on infrastructure provisioning, while tools like Ansible or Chef manage software configuration on machines.

Is Terraform free to use?

Terraform is open-source and free to use. However, HashiCorp offers commercial products like Terraform Cloud with additional features.

Conclusion

Writing Terraform scripts is an essential skill for modern cloud infrastructure management. By following the step-by-step guide, adhering to best practices, leveraging tools, and learning from real examples, you can automate your infrastructure reliably and efficiently.

Terraforms declarative approach simplifies complex infrastructure workflows, enables collaboration, and improves scalability. Start small, experiment with configurations, and gradually build modular, secure, and maintainable Terraform projects to harness the full potential of infrastructure as code.