- 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.
113 lines
3.9 KiB
Markdown
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
|
|
|