remote_state
Defines the backend once in root.hcl - Terragrunt auto-generates the backend config for every unit that includes it.
# root.hcl
remote_state {
backend = "s3"
config = {
bucket = "my-tf-state"
key = "${path_relative_to_include()}/terraform.tfstate"
region = "eu-west-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
generate = {
path = "backend.tf"
if_exists = "overwrite_terragrunt"
}
}
path_relative_to_include() resolves to the path of the calling terragrunt.hcl relative to root.hcl - e.g. environments/prod/vpc - giving each unit a unique state key automatically.
generate block
Writes any file before running Terraform - typically used for provider.tf and backend.tf so they don't need to be duplicated in every module.
generate "provider" {
path = "provider.tf"
if_exists = "overwrite_terragrunt"
contents = <<EOF
provider "aws" {
region = "eu-west-1"
default_tags {
tags = {
ManagedBy = "terraform"
Environment = "prod"
}
}
}
EOF
}
if_exists options
-
overwrite_terragrunt- overwrite only if Terragrunt generated the file (safe default) -
overwrite- always overwrite -
skip- skip if file exists -
error- error if file exists
generating multiple files
generate "versions" {
path = "versions.tf"
if_exists = "overwrite_terragrunt"
contents = <<EOF
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
EOF
}
Originally published at https://bard.sh/posts/terragrunt_remote_state/
Top comments (0)