Terraform Basics
Published: 2023-11-27 07:46:43

---
title: Terraform Basics
published: true
date: 2023-11-27 07:26:28 UTC
tags: 
canonical_url: https://venkatesh111.hashnode.dev/terraform-basics
---

## What is Terraform?

- **Terraform** is a tool for building, changing, and versioning infrastructure safely and efficiently. It is used to create/build an environment.

- Terraform can manage existing and popular service providers as well as custom in-house solutions.

- Terraform can be used for multiple cloud providers, like AWS, Azure, or GCP.

- Terraform is developed in the **GO** language.

- Terraform templates are written in a custom Domain Specific Language (DSL) called **HashiCorp Configuration Language** or **HCL**.

- Terraform templates/files end with a **.tf** extension.

## Terraform Basics

**Terraform Definition:** Terraform is an open-source Infrastructure as Code (IaC) tool developed by HashiCorp. It allows you to define and provision infrastructure in a declarative configuration language. Terraform supports multiple cloud providers, including AWS, Azure, Google Cloud, and more.

**Key Concepts:**

- **Configuration files** describe to Terraform the components needed to run a single application or your entire data center.

- **Execution plan:** Terraform generates an execution plan describing what it will do to reach the desired state, and then executes it to build the described infrastructure.

- **Versioning:** As the configuration changes, Terraform is able to determine what changed and create incremental execution plans which can be applied.

- The infrastructure Terraform can manage includes low-level components such as **compute instances, storage, and networking** , as well as high-level components such as DNS entries, SaaS features, etc.

- **Declarative Configuration:** Terraform uses declarative syntax, where you define the desired state of your infrastructure. It then determines the necessary actions to bring the actual infrastructure to that state.

- **Infrastructure as Code (IaC):** Terraform enables you to manage and version your infrastructure as code, providing the benefits of version control, collaboration, and repeatability.

- **Providers:** Terraform uses providers to interact with various infrastructure platforms. For AWS, you would use the AWS provider to manage resources within the AWS environment.

**How Terraform Helps with AWS:**

- **Resource Provisioning:** Terraform allows you to define AWS resources such as EC2 instances, S3 buckets, and RDS databases in code. It then provisions and manages these resources based on your configurations.

- **Infrastructure Versioning:** Since Terraform configurations are code, you can version control them using tools like Git. This facilitates collaboration, rollback to previous states, and tracking changes over time.

- **State Management:** Terraform maintains a state file that keeps track of the current state of your infrastructure. This state is crucial for understanding what Terraform has created and managing changes to the infrastructure.

## How does Terraform work?

- Terraform creates and manages resources on cloud platforms and other services **through their application programming interfaces (APIs)**.

- **Providers** enable Terraform to work with virtually any platform or service with an accessible API.

## Terraform workflow

1\. **Write Infrastructure Code (HCL):**

- You start by **writing Terraform configuration files using HashiCorp Configuration Language (HCL)**.

- These files **define the infrastructure components** you want to create, such as virtual machines, networks, or storage.

2\. **Initialize:**

- Run the `terraform init` command in the directory where your configuration files are located.

- This command downloads the necessary providers and sets up the backend to store the Terraform state.

3\. **Plan:**

- Execute `terraform plan` to preview the changes Terraform will make to your infrastructure. It doesn't make any changes yet; it just shows you what will happen.

- This is a safety check before making any modifications.

4\. **Apply:**

- If the plan looks good, you can apply the changes using `terraform apply`.

- Terraform will prompt you to confirm that you want to make the proposed changes. If you're satisfied, type **"yes,"** and Terraform will create or update your infrastructure according to the configuration.

5\. **Review and Iterate:**

- After applying the changes, you can review the outputs and make any necessary adjustments to your configuration.

- If you need to make changes, go back to **step 3 (plan)** and then apply again.

6\. **Destroy (Optional):**

- If you want to tear down the infrastructure created by Terraform, you can use `terraform destroy`.

- This command will prompt you to confirm the destruction of resources defined in your configuration.

7\. **Version Control:**

- It's a good practice to use version control (e.g., Git) to manage your Terraform configurations.

- This helps track changes, collaborate with others, and roll back to previous versions if needed.

### Let's connect and explore Terraform and AWS.

- [X: Venkatesh111](https://twitter.com/venkatesh111)

- [LinkedIn: Venkatesh111](https://www.linkedin.com/in/venkatesh111/)

- [YouTube: LetUsCloud](https://www.youtube.com/@letuscloud)

### References :

[What is Terraform](https://developer.hashicorp.com/terraform/intro)