This repository demonstrates a 3-layer Terragrunt structure with proper dependency management using local modules and null resources.
┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│    Layer 2      │  │    Layer 2      │  │    Layer 2      │
│      API        │  │    Frontend     │  │   Analytics     │
└─────────────────┘  └─────────────────┘  └─────────────────┘
         │                     │                     │
         └─────────────────────┼─────────────────────┘
                               │
┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│    Layer 1      │  │    Layer 1      │  │    Layer 1      │
│    Compute      │  │    Storage      │  │   Monitoring    │
└─────────────────┘  └─────────────────┘  └─────────────────┘
         │                     │                     │
         └─────────────────────┼─────────────────────┘
                               │
         ┌─────────────────────┼─────────────────────┐
         │                     │                     │
┌─────────────────┐  ┌─────────────────┐
│      Core       │  │      Core       │
│    Network      │  │    Security     │
└─────────────────┘  └─────────────────┘
.
├── terragrunt.hcl              # Root configuration
├── common.tfvars               # Common variables
├── core/                       # Core layer (foundation)
│   ├── network/
│   │   └── terragrunt.hcl
│   └── security/
│       └── terragrunt.hcl
├── layer1/                     # Application layer
│   ├── compute/
│   │   └── terragrunt.hcl
│   ├── storage/
│   │   └── terragrunt.hcl
│   └── monitoring/
│       └── terragrunt.hcl
├── layer2/                     # Service layer
│   ├── api/
│   │   └── terragrunt.hcl
│   ├── frontend/
│   │   └── terragrunt.hcl
│   └── analytics/
│       └── terragrunt.hcl
└── modules/                    # Local Terraform modules
    ├── core-network/
    ├── core-security/
    ├── layer1-compute/
    ├── layer1-storage/
    ├── layer1-monitoring/
    ├── layer2-api/
    ├── layer2-frontend/
    └── layer2-analytics/
- Network: Creates VPC, subnets, and basic networking infrastructure
- Security: Creates security groups and IAM roles
- Compute: Creates compute instances and load balancers (depends on network + security)
- Storage: Creates S3 buckets and RDS instances (depends on network + security)
- Monitoring: Creates CloudWatch dashboards and log groups (depends on network + security)
- API: Creates API Gateway and endpoints (depends on compute + storage)
- Frontend: Creates CloudFront distribution and web assets (depends on storage + monitoring)
- Analytics: Creates data pipelines and analytics jobs (depends on compute + storage + monitoring)
# Deploy everything in dependency order
terragrunt run-all apply# Deploy core infrastructure first
terragrunt run-all apply --terragrunt-include-dir core
# Deploy layer 1
terragrunt run-all apply --terragrunt-include-dir layer1
# Deploy layer 2
terragrunt run-all apply --terragrunt-include-dir layer2# Deploy specific module
cd core/network
terragrunt apply
# Or from root
terragrunt apply --terragrunt-working-dir core/network# Destroy in reverse dependency order
terragrunt run-all destroy- Dependency Management: Each layer properly depends on the previous layer's outputs
- Mock Outputs: Mock values provided for terragrunt planwithout dependencies
- Local Modules: All modules are local for easy customization and testing
- Null Resources: Uses null resources for demonstration (replace with real resources as needed)
- State Management: Each module has its own state file for isolation
- Variable Inheritance: Common variables shared through root configuration
To adapt this structure for real infrastructure:
- Replace null resources in modules with actual cloud resources
- Update provider configurations for your cloud platform
- Modify variables and outputs to match your requirements
- Add environment-specific configurations
- Configure remote state backend for production use
To verify the dependency structure:
# Generate dependency graph
terragrunt graph-dependencies
# Run plan to see what would be created
terragrunt run-all plan