Terraform Basics

Terraform Basics

Introduction

Terraform is a popular Infrastructure as Code (IaC) tool used to create and manage infrastructure resources in a cloud environment. It is an open-source tool developed by HashiCorp and is available on various platforms such as AWS, Google Cloud Platform (GCP), Microsoft Azure, and more. With Terraform, you can write code in a declarative language to define your desired infrastructure state, and then use the tool to create, modify, and destroy infrastructure resources. In this blog, we will explore the basics of Terraform and basic commands in Terraform.

What is a Resource in Terraform?

In Terraform, a resource is an entity that represents a specific infrastructure object, such as a virtual machine, network interface, or storage bucket. Resources are defined using Terraform configuration files, which specify the desired state of the resource. When you apply the Terraform configuration, it will create, modify, or delete the infrastructure resources to match the desired state.

What is a Provider in Terraform?

In Terraform, a provider is a plugin that interacts with a specific infrastructure platform, such as AWS, GCP, or Azure. Providers are responsible for translating the Terraform configuration into API calls that create, modify, or delete infrastructure resources on the target platform. Each provider has its own set of resources that can be created, modified, or deleted using Terraform.

Example of how to define terraform:

For AWS:

provider "aws" {
  region = "us-east-1"
}

For Google Cloud Platform:

provider "google" {
  project = var.project_id
  region  = var.region
  zone    = "asia-south1-c"
}

What is a State file in Terraform, and what's its importance?

The state file in Terraform is a JSON file that stores the current state of the infrastructure resources managed by Terraform. It records information such as the IDs, IP addresses, and other attributes of the resources that Terraform creates. The state file is used to ensure that the desired state and the actual state of the resources match, and is critical to Terraform's operation.

The state file also maintains a history of changes, allowing you to review previous configurations, and enabling collaboration with other team members by allowing them to share a common understanding of the infrastructure.

What is Desired and Current State of Terraform?

In Terraform, the desired state is the configuration that you define in your Terraform files. It specifies the resources you want to create or modify, as well as their desired attributes, such as the number of instances, their size, or their location.

Terraform Basic Commands

  1. terraform init: This command initializes a new or existing Terraform working directory by downloading the necessary provider plugins and modules required for the configuration. It must be run before any other Terraform command.

  2. terraform init -upgrade: This command upgrades the installed providers and modules to the latest available versions.

  3. terraform plan: This command shows a preview of the changes that Terraform will make to the infrastructure resources when the configuration is applied. It also shows any errors or warnings that may exist in the configuration.

  4. terraform apply: This command applies the Terraform configuration and creates or updates the infrastructure resources specified in the configuration. It will prompt for confirmation before making any changes to the infrastructure.

  5. terraform validate: This command validates the syntax and configuration of the Terraform files and reports any errors or warnings. It is used to ensure that the configuration is valid before applying it to the infrastructure.

  6. terraform fmt: This command formats the Terraform files in a consistent and readable manner, following the best practices and conventions of Terraform configuration.

  7. terraform destroy: This command destroys all the infrastructure resources created by Terraform. It is used to clean up the infrastructure and prevent any ongoing charges from cloud providers.

  8. terraform import: This command allows you to import existing resources into your Terraform state file. This is useful when you have existing resources that you want to manage with Terraform, but you don't want to recreate them from scratch.

These are some of the most commonly used Terraform commands, and they are essential for creating, managing, and destroying infrastructure resources using Terraform.

Conclusion

Terraform is a popular infrastructure-as-code tool used for managing infrastructure resources across multiple cloud providers. It uses declarative language to define the desired state of the infrastructure and then applies that configuration to create, modify, or destroy resources as necessary. Some of the important concepts in Terraform include resources, providers, and the state file. Resources represent infrastructure objects such as virtual machines, networks, or storage buckets, while providers are plugins that interact with specific cloud providers to manage those resources. The state file maintains a record of the current state of the resources and is used to ensure that the desired state and actual state match. There are many Terraform commands available to help with managing infrastructure resources, such as init, plan, apply, validate, and destroy. Additionally, the the import command can be used to import existing resources into the Terraform state file for management.

Did you find this article valuable?

Support Ashutosh Mahajan by becoming a sponsor. Any amount is appreciated!