0
0
TerraformHow-ToBeginner · 4 min read

How to Configure Backend in Terraform: Syntax and Example

To configure a backend in Terraform, use the terraform { backend "TYPE" { ... } } block in your configuration to specify where Terraform stores its state. This setup ensures your infrastructure state is saved remotely or locally as needed.
📐

Syntax

The backend configuration in Terraform uses the terraform block with a nested backend block specifying the backend type and its settings.

  • terraform: Root block for Terraform settings.
  • backend "TYPE": Defines the backend type like s3, local, azurerm, etc.
  • Configuration arguments: Backend-specific settings such as bucket name, region, or path.
terraform
terraform {
  backend "TYPE" {
    # backend-specific configuration
  }
}
💻

Example

This example shows how to configure an s3 backend to store Terraform state in an AWS S3 bucket with DynamoDB for state locking.

terraform
terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "project/terraform.tfstate"
    region         = "us-west-2"
    dynamodb_table = "terraform-lock-table"
    encrypt        = true
  }
}
Output
Terraform will initialize the backend and store state remotely in the specified S3 bucket with locking enabled.
⚠️

Common Pitfalls

Common mistakes when configuring Terraform backend include:

  • Not running terraform init after adding or changing backend configuration.
  • Using incorrect or missing backend configuration arguments causing initialization errors.
  • Trying to configure backend inside modules instead of the root module.
  • Not setting up remote state locking, which can cause state corruption in team environments.
terraform
## Wrong: backend inside a module (not allowed)
module "example" {
  source = "./module"
  # terraform {
  #   backend "local" {}
  # }
}

## Right: backend only in root module
terraform {
  backend "local" {
    path = "terraform.tfstate"
  }
}
📊

Quick Reference

Backend TypeCommon Configuration ArgumentsPurpose
localpathStores state file locally on disk
s3bucket, key, region, encrypt, dynamodb_tableStores state in AWS S3 with optional locking
azurermstorage_account_name, container_name, keyStores state in Azure Blob Storage
gcsbucket, prefixStores state in Google Cloud Storage
remotehostname, organization, workspacesStores state in Terraform Cloud or Enterprise

Key Takeaways

Configure backend in the root Terraform module using the terraform { backend "TYPE" { ... } } block.
Always run terraform init after changing backend configuration to initialize it properly.
Use remote backends with locking for team collaboration to avoid state conflicts.
Backend configuration is mandatory for managing Terraform state securely and reliably.
Avoid configuring backend inside modules; it must be in the root configuration only.