mcpField
T
terraform-best-practices

terraform-best-practices

github.com/terramate-ioCloud & DevOps35401 installsUpdated 38w ago
Repository

About terraform-best-practices

A Terraform and infrastructure-as-code guide for teams, with prioritized rules on security, state management, modules, and testing for code review and refactoring.

Key features

  1. 01Rules across ten categories
  2. 02Rules prioritized by impact
  3. 03Incorrect and correct code examples
  4. 04Coverage of security, state, and testing

Use cases

  1. 01Write Terraform modules and configurations
  2. 02Review infrastructure code for security
  3. 03Refactor Terraform or OpenTofu code
  4. 04Establish team workflows and governance

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/terramate-io/agent-skills --skill terraform-best-practices

After installing, type/terraform-best-practicesin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

AGENTS.md
rules/
language-data-sources.md
language-dynamic-blocks.md
language-linting.md
language-locals.md
language-no-heredoc-json.md
module-composition.md
module-naming.md
module-registry.md
module-single-responsibility.md
module-versioning.md
org-access-control.md
org-audit-logging.md
org-change-workflow.md
org-version-control.md
org-workspaces.md
output-descriptions.md
output-no-secrets.md
perf-debug.md
perf-parallelism.md
provider-version-constraints.md
resource-count-vs-foreach.md
resource-immutable.md
resource-lifecycle.md
resource-naming.md
resource-tagging.md
security-credentials.md
security-iam-least-privilege.md
security-no-hardcoded-secrets.md
state-import.md

Details

From the project README

Terraform Best Practices

Comprehensive optimization guide for Terraform and Infrastructure as Code, maintained by Terramate. Contains 37 rules across 10 categories, prioritized by impact to guide automated refactoring and code generation.

When to Apply

Reference these guidelines when:

  • Writing new Terraform modules or configurations
  • Implementing infrastructure patterns (AWS, GCP, Azure, etc.)
  • Reviewing code for security and reliability issues
  • Refactoring existing Terraform/OpenTofu code
  • Optimizing state management and performance
  • Setting up team workflows and governance

Rule Categories by Priority

PriorityCategoryImpactPrefix
1Organization & WorkflowCRITICALorg-
2State ManagementCRITICALstate-
3Security Best PracticesCRITICALsecurity-
4Module DesignHIGHmodule-
5Resource OrganizationMEDIUM-HIGHresource-
6Variable & Output PatternsMEDIUMvariable-, output-
7Language Best PracticesMEDIUMlanguage-
8Provider ConfigurationMEDIUMprovider-
9Performance OptimizationLOW-MEDIUMperf-
10Testing & ValidationLOWtest-

Quick Reference

1. Organization & Workflow (CRITICAL) - 5 rules
  • org-version-control - All Terraform code in version control
  • org-workspaces - One workspace per environment per configuration
  • org-access-control - Control who can change what infrastructure
  • org-change-workflow - Formal process for infrastructure changes
  • org-audit-logging - Track all infrastructure changes
2. State Management (CRITICAL) - 3 rules
  • state-remote-backend - Always use remote state backends
  • state-locking - Enable state locking to prevent corruption
  • state-import - Import existing infrastructure into Terraform
3. Security Best Practices (CRITICAL) - 3 rules
  • security-no-hardcoded-secrets - Never hardcode secrets in code
  • security-credentials - Use proper credential management (OIDC, Vault, IAM roles)
  • security-iam-least-privilege - Follow least privilege principle
4. Module Design (HIGH) - 5 rules
  • module-single-responsibility - One module per logical component
  • module-naming - Use consistent naming conventions (terraform--)
  • module-versioning - Version all module references
  • module-composition - Compose modules like building blocks
  • module-registry - Use existing community/shared modules
5. Resource Organization (MEDIUM-HIGH) - 5 rules
  • resource-naming - Use consistent naming conventions
  • resource-tagging - Tag all resources for cost tracking
  • resource-lifecycle - Use lifecycle blocks (prevent_destroy, ignore_changes)
  • resource-count-vs-foreach - Prefer for_each over count
  • resource-immutable - Prefer immutable infrastructure patterns
6. Variable & Output Patterns (MEDIUM) - 6 rules
  • variable-types - Use specific types, positive naming, nullable
  • variable-validation - Add validation rules for early error detection
  • variable-sensitive - Mark secrets as sensitive, no defaults
  • variable-descriptions - Document all variables with descriptions
  • output-descriptions - Document all outputs with descriptions
  • output-no-secrets - Never output secrets directly
7. Language Best Practices (MEDIUM) - 5 rules
  • language-no-heredoc-json - Use jsonencode/yamlencode, not HEREDOC
  • language-locals - Use locals to name complex expressions
  • language-linting - Run terraform fmt and tflint
  • language-data-sources - Use data sources instead of hardcoding
  • language-dynamic-blocks - Use dynamic blocks for DRY code
8. Provider Configuration (MEDIUM) - 1 rule
  • provider-version-constraints - Pin provider versions
9. Performance Optimization (LOW-MEDIUM) - 2 rules
  • perf-parallelism - Tune parallelism for large deployments
  • perf-debug - Enable debug logging for troubleshooting
10. Testing & Validation (LOW) - 2 rules
  • test-strategies - Testing pyramid (validate, lint, plan, integration)
  • test-policy-as-code - Implement policy checks (OPA, Checkov, tfsec)

How to Use

Read individual rule files for detailed explanations and code examples:

rules/state-remote-backend.md
rules/security-no-hardcoded-secrets.md
rules/module-versioning.md

Each rule file contains:

  • Brief explanation of why it matters
  • Incorrect code example with explanation
  • Correct code example with explanation
  • Additional context and references

Full Compiled Document

For the complete guide with all rules expanded: AGENTS.md

Comments

Markdown supported