Understanding Terragrunt Units and Their Importance

What is Terragrunt?

Terragrunt is a tool that helps manage Terraform configurations efficiently. It simplifies infrastructure deployment by reducing code duplication and enforcing best practices.

What are Terragrunt Units?

A Terragrunt Unit is the smallest deployable part of an infrastructure. It is simply a folder that contains a terragrunt.hcl file. This file tells Terragrunt how to run Terraform for that specific part of the infrastructure.

Each Terragrunt unit represents a service or component, such as a database, a virtual network, or an application server. These units help keep infrastructure code organized, reusable, and easy to maintain.

Why are Terragrunt Units Important?

  1. Avoids Code Duplication: Instead of writing Terraform code multiple times for different environments (like production, staging, and development), Terragrunt lets you reuse the same module.

  2. Better Organization: Each unit is self-contained, making it easy to manage different parts of the infrastructure.

  3. Easy to Scale: You can deploy only the units that need changes instead of re-deploying everything.

  4. Version Control: Different environments can use different versions of Terraform modules, ensuring stability in production.

  5. Automation-Friendly: Terragrunt integrates well with CI/CD pipelines, making automation smoother.

How to Use Terragrunt Units

Folder Structure Example

A common way to organize Terraform projects with Terragrunt looks like this:

project-root/
  ├── modules/
  │   ├── app/
  │   │   └── main.tf
  │   ├── database/
  │   │   └── main.tf
  │   ├── network/
  │       └── main.tf
  ├── environments/
  │   ├── production/
  │   │   ├── app/
  │   │   │   └── terragrunt.hcl
  │   │   ├── database/
  │   │   │   └── terragrunt.hcl
  │   │   └── network/
  │   │       └── terragrunt.hcl
  │   ├── staging/
  │   │   ├── app/
  │   │   │   └── terragrunt.hcl
  │   │   ├── database/
  │   │   │   └── terragrunt.hcl
  │   │   └── network/
  │   │       └── terragrunt.hcl

Writing a terragrunt.hcl File

Each unit contains a terragrunt.hcl file that tells Terragrunt how to fetch and apply Terraform configurations.

Example terragrunt.hcl file for the app unit in the staging environment:

terraform {
  source = "git::git@github.com:my-org/modules.git//app?ref=v1.0.0"
}

inputs = {
  instance_count = 3
  instance_type  = "t3.micro"
}

Deploying a Terragrunt Unit

To apply a Terragrunt unit, navigate to the directory and run:

cd environments/staging/app
terragrunt apply

This will:

  1. Download the Terraform module from the specified source.

  2. Pass the input variables (like instance_count and instance_type).

  3. Deploy the infrastructure component.

Updating a Terragrunt Unit

To update a unit, change the terragrunt.hcl file (e.g., updating the ref to a new version) and then run:

terragrunt apply

Destroying a Terragrunt Unit

To delete a unit, run:

terragrunt destroy

Conclusion

Terragrunt units make Terraform deployments simpler, reusable, and easier to manage. By organizing infrastructure into small, independent units, you can deploy changes faster and with fewer errors. If you are working with Terraform, Terragrunt is a powerful tool that can save time and effort while keeping infrastructure well-structured.

1
Subscribe to my newsletter

Read articles from Chinnayya Chintha directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Chinnayya Chintha
Chinnayya Chintha

I am 𝗖𝗵𝗶𝗻𝗻𝗮𝘆𝘆𝗮 𝗖𝗵𝗶𝗻𝘁𝗵𝗮, 𝗮 𝗿𝗲𝘀𝘂𝗹𝘁𝘀-𝗱𝗿𝗶𝘃𝗲𝗻 𝗦𝗶𝘁𝗲 𝗥𝗲𝗹𝗶𝗮𝗯𝗶𝗹𝗶𝘁𝘆 𝗘𝗻𝗴𝗶𝗻𝗲𝗲𝗿 (𝗦𝗥𝗘) with proven expertise in 𝗮𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗻𝗴, 𝗮𝗻𝗱 𝗺𝗮𝗻𝗮𝗴𝗶𝗻𝗴 𝘀𝗲𝗰𝘂𝗿𝗲, 𝘀𝗰𝗮𝗹𝗮𝗯𝗹𝗲, 𝗮𝗻𝗱 𝗿𝗲𝗹𝗶𝗮𝗯𝗹𝗲 𝗶𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻𝘀. My experience spans 𝗰𝗹𝗼𝘂𝗱-𝗻𝗮𝘁𝗶𝘃𝗲 𝘁𝗲𝗰𝗵𝗻𝗼𝗹𝗼𝗴𝗶𝗲𝘀, 𝗖𝗜/𝗖𝗗 𝗮𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻, 𝗮𝗻𝗱 𝗜𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗮𝘀 𝗖𝗼𝗱𝗲 (𝗜𝗮𝗖), enabling me to deliver 𝗵𝗶𝗴𝗵-𝗽𝗲𝗿𝗳𝗼𝗿𝗺𝗶𝗻𝗴 𝘀𝘆𝘀𝘁𝗲𝗺𝘀 that enhance operational efficiency and drive innovation. As a 𝗙𝗿𝗲𝗲𝗹𝗮𝗻𝗰𝗲 𝗦𝗶𝘁𝗲 𝗥𝗲𝗹𝗶𝗮𝗯𝗶𝗹𝗶𝘁𝘆 𝗘𝗻𝗴𝗶𝗻𝗲𝗲𝗿, I specialize in: ✅𝗜𝗺𝗽𝗹𝗲𝗺𝗲𝗻𝘁𝗶𝗻𝗴 𝘀𝗲𝗰𝘂𝗿𝗲 𝗮𝗻𝗱 𝘀𝗰𝗮𝗹𝗮𝗯𝗹𝗲 𝗽𝗮𝘆𝗺𝗲𝗻𝘁 𝗴𝗮𝘁𝗲𝘄𝗮𝘆 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻𝘀 𝘂𝘀𝗶𝗻𝗴 𝗔𝗪𝗦 𝘀𝗲𝗿𝘃𝗶𝗰𝗲𝘀 𝗹𝗶𝗸𝗲 𝗔𝗣𝗜 𝗚𝗮𝘁𝗲𝘄𝗮𝘆, 𝗟𝗮𝗺𝗯𝗱𝗮, 𝗮𝗻𝗱 𝗗𝘆𝗻𝗮𝗺𝗼𝗗𝗕.. ✅𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗻𝗴 𝗶𝗻𝗳𝗿𝗮𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲 𝗽𝗿𝗼𝘃𝗶𝘀𝗶𝗼𝗻𝗶𝗻𝗴 with 𝗧𝗲𝗿𝗿𝗮𝗳𝗼𝗿𝗺. ✅𝗢𝗽𝘁𝗶𝗺𝗶𝘇𝗶𝗻𝗴 𝗺𝗼𝗻𝗶𝘁𝗼𝗿𝗶𝗻𝗴 using 𝗖𝗹𝗼𝘂𝗱𝗪𝗮𝘁𝗰𝗵. ✅Ensuring compliance with 𝗣𝗖𝗜-𝗗𝗦𝗦 𝘀𝘁𝗮𝗻𝗱𝗮𝗿𝗱𝘀 through 𝗲𝗻𝗰𝗿𝘆𝗽𝘁𝗶𝗼𝗻 𝗺𝗲𝗰𝗵𝗮𝗻𝗶𝘀𝗺𝘀 ✅implemented with 𝗔𝗪𝗦 𝗞𝗠𝗦 and 𝗦𝗲𝗰𝗿𝗲𝘁𝘀 𝗠𝗮𝗻𝗮𝗴𝗲𝗿. These efforts have resulted in 𝗲𝗻𝗵𝗮𝗻𝗰𝗲𝗱 𝘁𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻 𝗿𝗲𝗹𝗶𝗮𝗯𝗶𝗹𝗶𝘁𝘆 and 𝘀𝘁𝗿𝗲𝗮𝗺𝗹𝗶𝗻𝗲𝗱 𝗼𝗽𝗲𝗿𝗮𝘁𝗶𝗼𝗻𝗮𝗹 𝘄𝗼𝗿𝗸𝗳𝗹𝗼𝘄𝘀 for payment processing systems. I am passionate about 𝗺𝗲𝗻𝘁𝗼𝗿𝗶𝗻𝗴 𝗮𝗻𝗱 𝗸𝗻𝗼𝘄𝗹𝗲𝗱𝗴𝗲 𝘀𝗵𝗮𝗿𝗶𝗻𝗴, having delivered 𝗵𝗮𝗻𝗱𝘀-𝗼𝗻 𝘁𝗿𝗮𝗶𝗻𝗶𝗻𝗴 in 𝗰𝗹𝗼𝘂𝗱 𝘁𝗲𝗰𝗵𝗻𝗼𝗹𝗼𝗴𝗶𝗲𝘀, 𝗞𝘂𝗯𝗲𝗿𝗻𝗲𝘁𝗲𝘀, 𝗮𝗻𝗱 𝗮𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻. My proactive approach helps me anticipate system challenges and create 𝗿𝗼𝗯𝘂𝘀𝘁, 𝘀𝗰𝗮𝗹𝗮𝗯𝗹𝗲 𝘀𝗼𝗹𝘂𝘁𝗶𝗼𝗻𝘀 𝘁𝗵𝗮𝘁 𝗲𝗻𝗵𝗮𝗻𝗰𝗲 𝘀𝗲𝗰𝘂𝗿𝗶𝘁𝘆, 𝗰𝗼𝗺𝗽𝗹𝗶𝗮𝗻𝗰𝗲, 𝗮𝗻𝗱 𝗼𝗽𝗲𝗿𝗮𝘁𝗶𝗼𝗻𝗮𝗹 𝗲𝗳𝗳𝗶𝗰𝗶𝗲𝗻𝗰𝘆. Dedicated to 𝗰𝗼𝗻𝘁𝗶𝗻𝘂𝗼𝘂𝘀 𝗹𝗲𝗮𝗿𝗻𝗶𝗻𝗴, I stay updated with 𝗲𝗺𝗲𝗿𝗴𝗶𝗻𝗴 𝘁𝗲𝗰𝗵𝗻𝗼𝗹𝗼𝗴𝗶𝗲𝘀 and thrive on contributing to 𝘁𝗿𝗮𝗻𝘀𝗳𝗼𝗿𝗺𝗮𝘁𝗶𝘃𝗲 𝗽𝗿𝗼𝗷𝗲𝗰𝘁𝘀 that push boundaries in technology.