terraform-dependency-analyzer
Terraform Dependency Analyzer
This skill helps analyze and optimize resource dependencies in Terraform configurations.
When to Use
Use this skill when:
- Understanding resource relationships and dependencies
- Troubleshooting circular dependency errors
- Optimizing resource creation order
- Refactoring complex configurations
- Documenting infrastructure dependencies
Dependency Types
Implicit Dependencies
Terraform automatically detects dependencies through resource attribute references:
- Most common and preferred method
- Created when one resource references another's attributes
- Example:
subnet_id = aws_subnet.main.id
Explicit Dependencies
Use depends_on only when implicit dependencies aren't sufficient:
- Cross-resource timing requirements
- Dependencies not expressed through attributes
- Ensuring proper creation/deletion order
- Should be used sparingly
Analysis Workflow
1. Generate Dependency Graph
# Create visual dependency graph
terraform graph | dot -Tpng > graph.png
# View as text
terraform graph
2. Identify Resource Relationships
Parse configuration to map dependencies:
- Read through resource definitions
- Note attribute references between resources
- Identify explicit
depends_ondeclarations - Map out dependency chains
3. Check for Circular Dependencies
Common causes:
- Security groups with mutual ingress rules
- Resources referencing each other's attributes
- Module outputs creating circular references
Solution approaches:
- Break cycles using separate rule resources
- Restructure resource relationships
- Use data sources to break circular references
Common Dependency Patterns
VPC Infrastructure
- VPC → Internet Gateway, Subnets
- Subnets → NAT Gateway, Route Tables
- Route Tables → Route Table Associations
- Security Groups → EC2/RDS instances
IAM Resources
- IAM Role → IAM Policy Attachments
- IAM Role → Resources using the role
Database Setup
- VPC, Subnets → DB Subnet Group
- Security Group → RDS Instance
- RDS Instance → Application resources
Troubleshooting
Circular Dependency Errors
Process:
- Identify the resources in the cycle from error message
- Determine which reference creates the cycle
- Break the cycle by:
- Using separate rule resources (for security groups)
- Restructuring resource relationships
- Using data sources instead of direct references
Slow Apply Times
Analysis:
- Check for unnecessary
depends_onstatements forcing sequential creation - Identify resources that could be created in parallel
- Look for bottleneck resources blocking multiple dependencies
Optimization:
- Remove explicit dependencies when implicit ones exist
- Group independent resources together
- Use modules to organize related resources
Optimization Guidelines
Minimize Explicit Dependencies
- Prefer implicit dependencies through attribute references
- Only use
depends_onwhen absolutely necessary - Remove redundant explicit dependencies
Maximize Parallelization
- Ensure independent resources have no unnecessary dependencies
- Group related resources in modules
- Avoid creating artificial dependency chains
Use Modules Effectively
- Organize resources by logical grouping
- Use module outputs to express dependencies
- Keep module dependencies clear and minimal
Analysis Checklist
- Generated dependency graph
- Identified all resource relationships
- Checked for circular dependencies
- Verified implicit dependencies are sufficient
- Removed unnecessary
depends_onstatements - Identified opportunities for parallelization
- Documented critical dependency chains
More from armanzeroeight/fastagent-plugins
gcp-cost-optimizer
Analyzes GCP costs and provides optimization recommendations including committed use discounts, rightsizing, and unused resources. Use when optimizing GCP spending or analyzing GCP costs.
15kubernetes-best-practices
Provides production-ready Kubernetes manifest guidance including resource management, security, high availability, and configuration best practices. This skill should be used when working with Kubernetes YAML files, deployments, pods, services, or when users mention k8s, container orchestration, or cloud-native applications.
11schema-designer
Design database schemas with proper normalization, relationships, constraints, and indexes. Use when creating database tables, modeling data relationships, or designing database structure.
11api-documentation-generator
Generate OpenAPI/Swagger specifications and API documentation from code or design. Use when creating API docs, generating OpenAPI specs, or documenting REST APIs.
9goroutine-patterns
Implement Go concurrency patterns using goroutines, channels, and synchronization primitives. Use when building concurrent systems, implementing parallelism, or managing goroutine lifecycles. Trigger words include "goroutine", "channel", "concurrent", "parallel", "sync", "context".
9inventory-manager
Organizes Ansible inventory files, manages host groups, and configures dynamic inventory. Use when organizing Ansible inventory, managing host groups, or setting up dynamic inventory sources.
9