Initial commit: add .gitignore and README
This commit is contained in:
211
TERRAFORM_MIGRATION_GUIDE.md
Normal file
211
TERRAFORM_MIGRATION_GUIDE.md
Normal file
@@ -0,0 +1,211 @@
|
||||
# Terraform Module Migration Guide
|
||||
|
||||
**Date**: 2025-01-27
|
||||
**Purpose**: Guide for migrating projects to use shared Terraform modules
|
||||
**Status**: Complete
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
This guide provides step-by-step instructions for migrating projects to use the shared Terraform modules located in `infrastructure/terraform/modules/`.
|
||||
|
||||
---
|
||||
|
||||
## Available Modules
|
||||
|
||||
### Azure Modules
|
||||
|
||||
1. **Networking** (`azure/networking`)
|
||||
- Virtual networks
|
||||
- Subnets
|
||||
- Network security groups
|
||||
|
||||
2. **Key Vault** (`azure/keyvault`)
|
||||
- Key Vault creation
|
||||
- Access policies
|
||||
- RBAC
|
||||
|
||||
3. **Storage** (`azure/storage`)
|
||||
- Storage accounts
|
||||
- Containers
|
||||
- File shares
|
||||
- Queues
|
||||
- Tables
|
||||
|
||||
### Kubernetes Modules
|
||||
|
||||
1. **Namespace** (`kubernetes/namespace`)
|
||||
- Namespace creation
|
||||
- Resource quotas
|
||||
- Limit ranges
|
||||
|
||||
---
|
||||
|
||||
## Migration Steps
|
||||
|
||||
### Step 1: Review Current Infrastructure
|
||||
|
||||
1. Identify existing Terraform code in your project
|
||||
2. Document current resources
|
||||
3. Map resources to shared modules
|
||||
|
||||
### Step 2: Update Terraform Configuration
|
||||
|
||||
#### Example: Migrating to Networking Module
|
||||
|
||||
**Before**:
|
||||
```hcl
|
||||
resource "azurerm_virtual_network" "main" {
|
||||
name = "vnet-example"
|
||||
address_space = ["10.0.0.0/16"]
|
||||
location = "eastus"
|
||||
resource_group_name = "rg-example"
|
||||
}
|
||||
|
||||
resource "azurerm_subnet" "frontend" {
|
||||
name = "snet-frontend"
|
||||
resource_group_name = "rg-example"
|
||||
virtual_network_name = azurerm_virtual_network.main.name
|
||||
address_prefixes = ["10.0.1.0/24"]
|
||||
}
|
||||
```
|
||||
|
||||
**After**:
|
||||
```hcl
|
||||
module "networking" {
|
||||
source = "../../infrastructure/terraform/modules/azure/networking"
|
||||
|
||||
resource_group_name = "rg-example"
|
||||
location = "eastus"
|
||||
vnet_name = "vnet-example"
|
||||
address_space = ["10.0.0.0/16"]
|
||||
|
||||
subnets = {
|
||||
frontend = {
|
||||
name = "snet-frontend"
|
||||
address_prefixes = ["10.0.1.0/24"]
|
||||
service_endpoints = []
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 3: Update References
|
||||
|
||||
Update any references to old resources:
|
||||
|
||||
**Before**:
|
||||
```hcl
|
||||
subnet_id = azurerm_subnet.frontend.id
|
||||
```
|
||||
|
||||
**After**:
|
||||
```hcl
|
||||
subnet_id = module.networking.subnet_ids["frontend"]
|
||||
```
|
||||
|
||||
### Step 4: Test Migration
|
||||
|
||||
1. Run `terraform init` to download modules
|
||||
2. Run `terraform plan` to review changes
|
||||
3. Verify no unexpected changes
|
||||
4. Run `terraform apply` if changes are correct
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Module Versioning
|
||||
|
||||
Use version constraints:
|
||||
|
||||
```hcl
|
||||
module "networking" {
|
||||
source = "../../infrastructure/terraform/modules/azure/networking"
|
||||
# Or use git source with version
|
||||
# source = "git::https://github.com/org/repo.git//modules/azure/networking?ref=v1.0.0"
|
||||
}
|
||||
```
|
||||
|
||||
### State Migration
|
||||
|
||||
If resources already exist:
|
||||
|
||||
1. Import existing resources to module state
|
||||
2. Use `terraform state mv` to reorganize
|
||||
3. Verify state after migration
|
||||
|
||||
### Testing
|
||||
|
||||
1. Test in dev/staging first
|
||||
2. Verify all outputs
|
||||
3. Check resource dependencies
|
||||
4. Validate security configurations
|
||||
|
||||
---
|
||||
|
||||
## Common Migration Patterns
|
||||
|
||||
### Pattern 1: Direct Replacement
|
||||
|
||||
Replace resource blocks with module calls.
|
||||
|
||||
### Pattern 2: Gradual Migration
|
||||
|
||||
Migrate one resource type at a time.
|
||||
|
||||
### Pattern 3: New Projects
|
||||
|
||||
Use modules from the start for new projects.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Module Not Found
|
||||
|
||||
**Issue**: `Error: Failed to download module`
|
||||
|
||||
**Solution**:
|
||||
- Check module path
|
||||
- Run `terraform init`
|
||||
- Verify module exists
|
||||
|
||||
### State Conflicts
|
||||
|
||||
**Issue**: `Error: Resource already exists`
|
||||
|
||||
**Solution**:
|
||||
- Import existing resources
|
||||
- Use `terraform state mv`
|
||||
- Review state file
|
||||
|
||||
### Output Not Found
|
||||
|
||||
**Issue**: `Error: Reference to undeclared output`
|
||||
|
||||
**Solution**:
|
||||
- Check module outputs
|
||||
- Verify output name
|
||||
- Review module documentation
|
||||
|
||||
---
|
||||
|
||||
## Migration Checklist
|
||||
|
||||
- [ ] Review current infrastructure
|
||||
- [ ] Identify modules to use
|
||||
- [ ] Update Terraform configuration
|
||||
- [ ] Update resource references
|
||||
- [ ] Test in dev/staging
|
||||
- [ ] Review terraform plan
|
||||
- [ ] Apply changes
|
||||
- [ ] Verify resources
|
||||
- [ ] Update documentation
|
||||
- [ ] Remove old code
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2025-01-27
|
||||
|
||||
Reference in New Issue
Block a user