terraform-validation
Use terraform-validation/scripts/validate.sh for Terraform validation. This skill provides the validation workflow and troubleshooting guidance. Individual commands are for debugging only.
SKILL.md
| Name | terraform-validation |
| Description | Use terraform-validation/scripts/validate.sh for Terraform validation. This skill provides the validation workflow and troubleshooting guidance. Individual commands are for debugging only. |
name: terraform-validation description: Terraform configuration validation covering syntax, linting, and security. Always use validate.sh script. For troubleshooting, see reference/. license: MIT
Purpose
Validates Terraform configurations for syntax errors, linting violations, and security issues using terraform fmt, terraform validate, tflint, and trivy.
Comprehensive validation for Terraform configurations using automated tools for syntax checking, linting, and security scanning.
When to Use This Skill
Recommended usage:
- Before committing Terraform changes
- During pull request validation
- Before applying infrastructure changes
- On every terraform file modification
- In pre-commit hooks and CI/CD pipelines
Input Specification
This skill expects:
- Terraform files (required) -
.tffiles in current directory or specified path - Validation script (required) -
terraform-validation/scripts/validate.sh - Optional directory path (optional) - Specific Terraform directories to validate
- Optional flags (optional) -
--fixfor auto-formatting,--verbosefor detailed output
Format:
- Terraform files: Valid HCL syntax with
.tfextension - Directory path: Relative or absolute path to Terraform directory
- Flags:
--fixor--verboseas command-line arguments - Default: Validates all Terraform files in current directory if no path specified
Output Specification
Structured validation results from four tools in execution order:
- terraform fmt output: Formatting issues or confirmation
- terraform validate output: Syntax and internal consistency check results
- tflint output: Linting issues with file paths and line numbers
- trivy config output: Security vulnerabilities with severity levels
Success output format:
✓ terraform fmt: All files formatted
✓ terraform validate: Configuration valid
✓ tflint: No issues found
✓ trivy config: No vulnerabilities found
All validations passed
Error output format:
✗ terraform fmt: [file]: formatting required
✗ terraform validate: [error description]
✗ tflint: [file]:[line]: [issue]
✗ trivy config: [file]: [vulnerability]
Exit code: 1
See reference/common-output-format.md for detailed format specification and examples.
Execution Scope
How to use this skill:
- Primary method: Always use
scripts/validate.shfor comprehensive validation - Script executes terraform fmt, terraform validate, tflint, and trivy config in recommended order
- Manual invocation: Individual tool commands available for debugging (see reference/troubleshooting.md)
- Automated CI/CD: Integrate validate.sh into CI pipeline for automated checks
What this skill does:
- Verify Terraform code formatting using terraform fmt
- Validate syntax and configuration consistency using terraform validate
- Run static analysis and best practice checks using tflint
- Scan for security vulnerabilities using trivy config
- Auto-fix formatting issues when
--fixflag is provided - Display verbose output with detailed check information on request
What this skill does NOT do (Out of Scope):
- Review code design decisions (use terraform-review for that)
- Execute terraform plan or apply
- Fix non-formatting issues automatically
- Validate AWS resource configurations beyond Terraform syntax
- Approve or merge pull requests
- Validate non-Terraform files
- Deploy infrastructure
Constraints
Prerequisites:
- Terraform CLI installed and available in PATH
- tflint installed and available in PATH
- trivy installed and available in PATH
- Terraform files must have valid HCL syntax
- AWS-based Terraform (other providers may require tool adjustments)
Limitations:
- Validation focuses on syntax, linting, and security scanning
- Cannot validate actual AWS resource creation or state
- Formatting auto-fix only applies to terraform fmt issues
- Large workspaces (>100 modules) may have longer validation times
Failure Behavior
Error handling:
- Formatting errors: terraform fmt reports issues, use
--fixto auto-correct - Syntax errors: terraform validate outputs error message with file path and line number
- Linting failures: tflint reports violations with severity level, exit without auto-fix
- Security issues: trivy config outputs vulnerabilities with CVE/recommendation details
- Script execution error: Output error details and exit code 1
Error reporting format:
- Standard error output with specific error messages
- Exit code: 0=success, 1=error
- File paths and line numbers included for all issues
- Error details available in reference/troubleshooting.md
Reference Files Guide
When using this skill with an agent, reference the following files via @-mention for detailed guidance:
Standard Components:
- common-checklist.md - Terraform validation checklist
- common-output-format.md - Validation result report format specification
- common-troubleshooting.md - Troubleshooting guide
- common-individual-commands.md - Individual command execution (terraform fmt/validate/tflint/trivy)
Category Details:
- category-security.md - Security validation guide
Validation Script Usage
Always use the validation script. Do not run individual commands.
Usage
# Full workspace validation (scans all Terraform directories)
bash terraform-validation/scripts/validate.sh
# Scope validation to specific directories (faster feedback)
bash terraform-validation/scripts/validate.sh ./terraform/base/ ./terraform/application/
# Automatically fix formatting issues
bash terraform-validation/scripts/validate.sh --fix
# Generate documentation while validating
bash terraform-validation/scripts/validate.sh --verbose
What the Script Does
The validation script performs all checks in the correct order:
terraform fmt -check- Verify code formattingterraform validate- Validate syntax and internal consistencytflint- Static analysis and best practice enforcementtrivy config- Security vulnerability scanning
Validation Requirements
Before committing Terraform changes:
- All formatting issues resolved (terraform fmt passes)
- Syntax and configuration valid (terraform validate passes)
- No linting violations (tflint passes)
- No security vulnerabilities (trivy config passes)
- Module variables documented
- State files excluded from version control
Workflow
- Make changes - Edit Terraform files
- Run validation:
bash terraform-validation/scripts/validate.sh ./path/to/module - Auto-fix formatting:
bash terraform-validation/scripts/validate.sh --fix - Fix other issues - Address validation, lint, or security errors
- Commit - Only when validation passes