How to Write Terraform Script

Introduction Terraform is an open-source infrastructure as code (IaC) tool that enables you to define, provision, and manage cloud infrastructure in a safe, repeatable way. Writing Terraform scripts allows developers and DevOps professionals to automate the process of infrastructure deployment, reduce manual errors, and achieve consistent environments across multiple cloud providers. Understanding

Nov 17, 2025 - 10:38
Nov 17, 2025 - 10:38
 0

Introduction

Terraform is an open-source infrastructure as code (IaC) tool that enables you to define, provision, and manage cloud infrastructure in a safe, repeatable way. Writing Terraform scripts allows developers and DevOps professionals to automate the process of infrastructure deployment, reduce manual errors, and achieve consistent environments across multiple cloud providers.

Understanding how to write Terraform scripts is essential for anyone looking to leverage cloud automation effectively. These scripts, written in HashiCorp Configuration Language (HCL), provide a declarative approach to infrastructure management, making it easier to version control, review, and share infrastructure setups.

In this tutorial, we will explore how to write Terraform scripts from scratch, covering step-by-step instructions, best practices, useful tools, real-world examples, and common questions. Whether you are new to Terraform or looking to sharpen your skills, this guide is designed to help you master Terraform scripting.

Step-by-Step Guide

1. Install Terraform

Before writing any Terraform script, you need to install Terraform on your local machine or CI/CD environment. Download the latest version from the official Terraform website and follow the installation instructions for your operating system.

2. Set Up Your Working Directory

Create a dedicated directory for your Terraform project. This directory will contain all your configuration files. Use a meaningful name that reflects the infrastructure you are defining.

3. Initialize Terraform

Inside your project directory, run terraform init. This command initializes the working directory, downloads the necessary provider plugins, and prepares Terraform to manage your infrastructure.

4. Define the Provider

Terraform interacts with cloud providers through providers. You must specify which provider and version you want to use in your script. For example, to use AWS:

provider "aws" {

region = "us-west-2"

}

5. Write Resource Blocks

Resources are the fundamental building blocks in Terraform scripts. Each resource block defines a component of your infrastructure, such as virtual machines, storage, or networking.

Example of creating an AWS EC2 instance:

resource "aws_instance" "web_server" {

ami = "ami-0c55b159cbfafe1f0"

instance_type = "t2.micro"

}

6. Use Variables for Flexibility

Variables enable you to parameterize your Terraform scripts, allowing reuse and customization. Declare variables in a separate file (e.g., variables.tf):

variable "instance_type" {

description = "Type of EC2 instance"

default = "t2.micro"

}

Reference variables in resource blocks:

instance_type = var.instance_type

7. Output Values

Outputs let you extract useful information from your Terraform state, such as IP addresses or resource IDs:

output "instance_ip" {

value = aws_instance.web_server.public_ip

}

8. Plan and Apply

Run terraform plan to preview changes Terraform will make. This step helps avoid unintended consequences. When satisfied, execute terraform apply to provision the infrastructure.

9. Manage State

Terraform keeps track of infrastructure state in a terraform.tfstate file. For team environments, use remote state backends like AWS S3 or Terraform Cloud to share and lock state files.

10. Destroy Infrastructure

To remove all resources created by Terraform, run terraform destroy. This command safely tears down infrastructure based on your scripts.

Best Practices

1. Modularize Your Code

Break your Terraform scripts into reusable modules. Modules encapsulate specific functionality, making your code easier to maintain and share.

2. Use Version Control

Store your Terraform scripts in a version control system like Git. This practice provides audit trails, collaboration, and rollback capabilities.

3. Keep Secrets Secure

Avoid hardcoding sensitive information such as passwords or API keys in your scripts. Use environment variables, encrypted files, or secret management tools instead.

4. Write Descriptive Names

Use clear, descriptive resource and variable names to improve readability and maintainability.

5. Maintain State Consistency

Use remote backends with state locking to prevent concurrent modifications and state corruption in team environments.

6. Document Your Code

Add comments and documentation to explain complex logic or dependencies within your Terraform scripts.

7. Validate and Test

Regularly run terraform validate and use tools like terraform fmt to ensure syntax correctness and consistent formatting.

Tools and Resources

1. Terraform CLI

The primary tool to write, plan, apply, and destroy infrastructure configurations. Available on all major platforms.

2. Terraform Cloud & Enterprise

Offers collaboration, remote state management, and policy enforcement for teams working with Terraform.

3. IDE Plugins

Plugins for Visual Studio Code, IntelliJ, and others provide syntax highlighting, autocompletion, and linting for Terraform scripts.

4. Terraform Registry

A repository of pre-built modules and providers to accelerate infrastructure development.

5. Terratest

A Go library for automated testing of Terraform code, useful for integration and unit testing.

6. Sentinel

A policy-as-code framework integrated with Terraform Enterprise to enforce governance and compliance.

Real Examples

Example 1: AWS S3 Bucket

provider "aws" {

region = "us-east-1"

}

resource "aws_s3_bucket" "my_bucket" {

bucket = "my-unique-bucket-name-1234"

acl = "private"

}

output "bucket_name" {

value = aws_s3_bucket.my_bucket.bucket

}

Example 2: Azure Virtual Network

provider "azurerm" {

features {}

}

resource "azurerm_virtual_network" "vnet" {

name = "myVnet"

address_space = ["10.0.0.0/16"]

location = "East US"

resource_group_name = "myResourceGroup"

}

output "vnet_id" {

value = azurerm_virtual_network.vnet.id

}

Example 3: Google Cloud Compute Instance

provider "google" {

project = "my-gcp-project"

region = "us-central1"

}

resource "google_compute_instance" "vm_instance" {

name = "terraform-instance"

machine_type = "f1-micro"

zone = "us-central1-a"

boot_disk {

initialize_params {

image = "debian-cloud/debian-9"

}

}

network_interface {

network = "default"

access_config {}

}

}

output "instance_name" {

value = google_compute_instance.vm_instance.name

}

FAQs

What is Terraform script?

A Terraform script is a configuration file written in HashiCorp Configuration Language (HCL) that defines infrastructure resources and their desired state for provisioning and management.

Do I need programming experience to write Terraform scripts?

Basic knowledge of configuration syntax and cloud infrastructure concepts is helpful, but extensive programming skills are not required. Terraform’s declarative syntax is designed to be readable and straightforward.

Can Terraform manage multiple cloud providers in one script?

Yes, Terraform supports multi-cloud deployments by configuring multiple providers within the same script.

How do I handle sensitive data in Terraform?

Use environment variables, encrypted storage, or secret management solutions instead of hardcoding secrets into your Terraform scripts.

What is the difference between terraform plan and terraform apply?

terraform plan previews the changes Terraform will make without applying them, while terraform apply executes the changes and provisions the infrastructure.

Conclusion

Writing Terraform scripts is a powerful skill that enables automated, consistent, and scalable infrastructure management across various cloud platforms. By following the step-by-step guide, leveraging best practices, and utilizing the right tools, you can create reliable infrastructure as code that accelerates deployment and reduces errors.

The examples provided illustrate the flexibility of Terraform in managing different cloud resources, and the FAQs address common concerns to help you get started confidently. With continuous practice and learning, Terraform scripting can become an indispensable part of your DevOps toolkit.