Hero

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
Shape

Key features

Keep your Terraform code DRY

Keep your Terraform code DRY

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

Keep your Terraform code DRY

Keep your backend DRY
Keep your backend DRY

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

Keep your Terraform CLI arguments DRY

Set CLI arguments for repeatable Terraform commands once in Terragrunt configuration.

Learn more
Keep your Terraform CLI arguments DRY

Execute Terraform commands on multiple modules at once Execute Terraform commands on multiple modules at once

Execute Terraform commands on multiple modules at once

Run one command for all modules instead of executing it in each module independently.

Learn more

Before & 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 shapes