Files
smom-dbis-138/terraform/modules/vm-deployment
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
..

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

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

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