Files

149 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

# Terraform Configuration for DeFi Oracle Meta Mainnet
## Overview
This directory contains Terraform configurations for deploying the DeFi Oracle Meta Mainnet (ChainID 138) on Azure.
## Deployment Options
### 1. Legacy Single Resource Group Deployment
The default configuration uses a single resource group for all resources. This is suitable for development and testing.
**Configuration**: `terraform/main.tf`
**Usage**:
```bash
cd terraform
terraform init
terraform plan -var-file=terraform.tfvars
terraform apply -var-file=terraform.tfvars
```
### 2. Well-Architected Framework Deployment (Recommended for Production)
The Well-Architected Framework deployment uses multiple resource groups organized by purpose and lifecycle. This is recommended for production deployments.
**Configuration**: `terraform/well-architected/main.tf`
**Usage**:
```bash
cd terraform/well-architected
terraform init
terraform plan -var-file=terraform.tfvars
terraform apply -var-file=terraform.tfvars
```
**Benefits**:
- Separate resource groups by purpose (network, compute, storage, security, monitoring)
- Better cost allocation and tracking
- Improved security boundaries
- Easier resource management
- Compliance with Azure Well-Architected Framework
## Modules
### Core Modules
- **networking**: Virtual networks, subnets, NSGs, Application Gateway
- **kubernetes**: AKS cluster, node pools, Log Analytics
- **storage**: Storage accounts, containers, file shares
- **secrets**: Key Vault (legacy with access policies)
### Well-Architected Modules
- **management-groups**: Management Groups hierarchy
- **resource-groups**: Resource groups organized by purpose
- **keyvault-enhanced**: Enhanced Key Vault with RBAC and Private Endpoints
- **budget**: Consumption budgets with alerts
## Configuration Files
### Legacy Deployment
- `terraform/main.tf`: Main Terraform configuration
- `terraform/variables.tf`: Variable definitions
- `terraform/outputs.tf`: Output definitions
- `terraform/terraform.tfvars.example`: Example variables
### Well-Architected Deployment
- `terraform/well-architected/main.tf`: Main Well-Architected configuration
- `terraform/well-architected/variables.tf`: Variable definitions
- `terraform/well-architected/outputs.tf`: Output definitions
- `terraform/well-architected/terraform.tfvars.example`: Example variables
## Variables
### Common Variables
- `environment`: Environment (prod, dev, test, staging)
- `location`: Azure region
- `cluster_name`: AKS cluster name
- `kubernetes_version`: Kubernetes version
- `node_count`: Number of nodes per node pool
- `vm_size`: VM size for node pools
- `tags`: Tags to apply to resources
### Legacy Deployment Variables
- `resource_group_name`: Single resource group name
- `key_vault_name`: Key Vault name
### Well-Architected Deployment Variables
- `use_well_architected`: Enable Well-Architected Framework structure
- `network_resource_group_name`: Network resource group name
- `compute_resource_group_name`: Compute resource group name
- `storage_resource_group_name`: Storage resource group name
- `security_resource_group_name`: Security resource group name
- `key_vault_allowed_subnet_ids`: Subnet IDs allowed to access Key Vault
- `key_vault_allowed_ip_ranges`: IP ranges allowed to access Key Vault
- `budget_amount`: Monthly budget amount
- `budget_contact_emails`: Email addresses for budget notifications
## Migration
To migrate from legacy to Well-Architected Framework deployment, see [Migration Guide](../docs/MIGRATION_TO_WELL_ARCHITECTED.md).
## Documentation
- [Well-Architected Framework Review](../docs/AZURE_WELL_ARCHITECTED_REVIEW.md)
- [Well-Architected Implementation](../docs/AZURE_WELL_ARCHITECTED_IMPLEMENTATION.md)
- [Well-Architected Quick Start](../docs/AZURE_WELL_ARCHITECTED_QUICK_START.md)
- [Migration Guide](../docs/MIGRATION_TO_WELL_ARCHITECTED.md)
- [Deployment Guide](../docs/DEPLOYMENT.md)
- [Quick Start Guide](../docs/QUICKSTART.md)
## Best Practices
1. **Use Well-Architected Framework for Production**: Use the Well-Architected Framework structure for production deployments
2. **Environment Separation**: Use separate deployments for dev, test, and prod environments
3. **Resource Naming**: Follow Azure naming conventions
4. **Tagging**: Apply comprehensive tags for cost allocation and management
5. **Security**: Use RBAC for Key Vault, enable Private Endpoints, restrict network access
6. **Cost Management**: Set up budget alerts, use reserved instances, monitor costs
7. **Backup**: Enable backups for Key Vault and storage accounts
8. **Monitoring**: Set up comprehensive monitoring and alerting
## Troubleshooting
### Issue: Resource Group Already Exists
**Solution**: Use existing resource groups or rename new ones
### Issue: Key Vault Network Restrictions Too Strict
**Solution**: Temporarily allow management IP, then refine network rules
### Issue: Resources Can't Be Moved
**Solution**: Some resources can't be moved between resource groups. Recreate them in the new resource group.
## References
- [Azure Well-Architected Framework](https://docs.microsoft.com/azure/architecture/framework/)
- [Terraform Azure Provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs)
- [Azure Naming Conventions](https://docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging)