
DRY and maintainable Terraform code.
Terragrunt is a thin wrapper that provides extra tools for keeping your configurations DRY, working with multiple Terraform modules, and managing remote state. Get Started
Key features

Keep your Terraform code DRY
Define Terraform code once, no matter how many environments you have.



Keep your backend configuration DRY
Get rid of duplicated backend code. Define how to manage your Terraform state once in a root directory and inherit in all child modules.
Learn more
Keep your Terraform CLI arguments DRY
Set CLI arguments for repeatable Terraform commands once in Terragrunt configuration.
Learn more

Execute Terraform commands on multiple modules at once
Run one command for all modules instead executing it in each module independently.
Learn moreBefore & After hooks
Execute custom code before or after running Terraform.
terraform {
before_hook "before_hook_1" {
commands = ["apply", "plan"]
execute = ["echo", "Foo"]
run_on_error = true
}
after_hook "after_hook_1" {
commands = ["init-from-module"]
execute = ["cp", "{get_parent_terragrunt_dir()}/foo.tf", "."]
}
}
Built by Gruntwork
Your entire infrastructure. Defined as code. In about a day.
Explore Gruntwork.io