Skip to content

Refactor Terraform Code Structure for Better Maintainability #5

@jsandov

Description

@jsandov

Current State

All configuration is in main.tf, mixing concerns:

  • Backend configuration
  • Provider settings
  • Local variables
  • Module configurations
  • Outputs

Proposed File Structure

environments/staging/
├── backend.tf      # S3 backend configuration
├── providers.tf    # AWS provider configurations
├── locals.tf       # Environment-specific variables
├── variables.tf    # Input variables if needed
├── main.tf        # Module instantiation only
└── outputs.tf     # Output definitions

Migration Steps

  1. Move backend configuration to backend.tf
  2. Separate provider configurations into providers.tf
  3. Extract locals into locals.tf
  4. Move outputs to outputs.tf
  5. Keep only module instantiation in main.tf

Benefits

  • Better organization
  • Easier maintenance
  • Consistent with Terraform best practices
  • Improved readability
  • Easier git diff tracking

Implementation Example

# backend.tf
terraform {
  backend "s3" {
    bucket         = "jdnguyen-terraform-state"
    key            = "staging/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-state-locks"
    encrypt        = true
  }
}

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions