Files
smom-dbis-138/terraform/modules/vm-deployment/README.md
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

113 lines
3.9 KiB
Markdown

# VM Deployment Module
This Terraform module deploys Besu nodes on Azure Virtual Machines (VMs) or Virtual Machine Scale Sets (VMSS) with Docker Engine.
## Features
- Deploy validators, sentries, or RPC nodes
- Support for individual VMs or VM Scale Sets
- Multi-region deployment
- Automatic Docker installation
- Automatic Besu configuration
- Cloud-init setup
- Managed Identity for Key Vault access
- Boot diagnostics
- Network security groups
## Usage
### Basic Usage
```hcl
module "besu_validators" {
source = "./modules/vm-deployment"
resource_group_name = "defi-oracle-mainnet-rg"
location = "eastus"
cluster_name = "defi-oracle-aks"
node_type = "validator"
node_count = 4
vm_size = "Standard_D4s_v3"
ssh_public_key = file("~/.ssh/id_rsa.pub")
subnet_id = azurerm_subnet.validators.id
storage_account_name = azurerm_storage_account.vm_storage.primary_blob_endpoint
key_vault_id = azurerm_key_vault.main.id
genesis_file_path = "https://storageaccount.blob.core.windows.net/genesis/genesis.json"
network_security_group_id = azurerm_network_security_group.validators.id
}
```
### VM Scale Set
```hcl
module "besu_rpc_vmss" {
source = "./modules/vm-deployment"
resource_group_name = "defi-oracle-mainnet-rg"
location = "eastus"
cluster_name = "defi-oracle-aks"
node_type = "rpc"
node_count = 3
vm_size = "Standard_D8s_v3"
use_scale_set = true
ssh_public_key = file("~/.ssh/id_rsa.pub")
subnet_id = azurerm_subnet.rpc.id
storage_account_name = azurerm_storage_account.vm_storage.primary_blob_endpoint
key_vault_id = azurerm_key_vault.main.id
genesis_file_path = "https://storageaccount.blob.core.windows.net/genesis/genesis.json"
network_security_group_id = azurerm_network_security_group.rpc.id
}
```
## Variables
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|----------|
| resource_group_name | Name of the resource group | string | - | yes |
| location | Azure region | string | - | yes |
| cluster_name | Name of the Besu network cluster | string | - | yes |
| node_type | Type of node (validator, sentry, rpc) | string | - | yes |
| node_count | Number of nodes | number | 1 | no |
| vm_size | VM size | string | "Standard_D4s_v3" | no |
| admin_username | Admin username for VMs | string | "besuadmin" | no |
| ssh_public_key | SSH public key for VM access | string | - | yes |
| use_scale_set | Use VM Scale Set instead of individual VMs | bool | false | no |
| subnet_id | Subnet ID for VMs | string | - | yes |
| storage_account_name | Storage account name for boot diagnostics | string | - | yes |
| key_vault_id | Key Vault ID for secrets | string | - | yes |
| genesis_file_path | Path to genesis file in storage | string | - | yes |
| network_security_group_id | Network Security Group ID | string | - | yes |
| tags | Tags for resources | map(string) | {} | no |
## Outputs
| Name | Description |
|------|-------------|
| vm_ids | VM or VMSS IDs |
| vm_private_ips | Private IP addresses of VMs |
| vm_public_ips | Public IP addresses of VMs (sentry and RPC nodes only) |
| vm_names | VM or VMSS names |
| vmss_id | VM Scale Set ID (if using scale set) |
## Requirements
- Terraform >= 1.0
- Azure Provider >= 3.0
- Azure CLI installed and configured
- SSH key pair
## Examples
See `terraform/vm-deployment.tf` for complete examples.
## Notes
- VMs are automatically configured via cloud-init
- Docker is installed automatically
- Besu is started automatically via systemd service
- Validator keys are downloaded from Key Vault using Managed Identity
- Genesis file is downloaded from Azure Storage
- Boot diagnostics are enabled
- Managed Identity is enabled for Key Vault access