214 lines
8.1 KiB
Terraform
214 lines
8.1 KiB
Terraform
|
|
# Multi-Region Deployment Configuration (LEGACY)
|
|||
|
|
#
|
|||
|
|
# IMPORTANT:
|
|||
|
|
# - This file captures earlier experiments with Dv2/Dsv6/DSv3 families and a
|
|||
|
|
# small set of regions.
|
|||
|
|
# - The **active, quota-safe 37-region Dplsv6 design** now lives in
|
|||
|
|
# `multi-region-global.tf` and is controlled via `enable_multi_region = true`
|
|||
|
|
# in `terraform.tfvars`.
|
|||
|
|
# - This legacy path is gated by `enable_multi_region_legacy` and should
|
|||
|
|
# normally remain **false**. Treat it as historical reference only; do not
|
|||
|
|
# enable it in new deployments.
|
|||
|
|
|
|||
|
|
|
|||
|
|
locals {
|
|||
|
|
# Multi-region configuration with VM family selection per region
|
|||
|
|
# References: local.cloud_provider and local.env_code from locals.tf
|
|||
|
|
multi_region_config = {
|
|||
|
|
westeurope = {
|
|||
|
|
location = "westeurope"
|
|||
|
|
region_code = "we"
|
|||
|
|
# Available quotas: DSv3 (4), D Family (10), Dv2 (10), Dsv6 (10), Av2 (10)
|
|||
|
|
vm_families = {
|
|||
|
|
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family (10 available)
|
|||
|
|
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family (10 available)
|
|||
|
|
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family (10 available)
|
|||
|
|
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family (10 available)
|
|||
|
|
}
|
|||
|
|
node_count = {
|
|||
|
|
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
|||
|
|
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
|||
|
|
}
|
|||
|
|
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
|||
|
|
}
|
|||
|
|
northeurope = {
|
|||
|
|
location = "northeurope"
|
|||
|
|
region_code = "ne"
|
|||
|
|
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
|||
|
|
vm_families = {
|
|||
|
|
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
|||
|
|
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
|||
|
|
}
|
|||
|
|
node_count = {
|
|||
|
|
system = 1 # 1 × 2 = 2 vCPUs
|
|||
|
|
validators = 1 # 1 × 4 = 4 vCPUs
|
|||
|
|
sentries = 1 # 1 × 4 = 4 vCPUs
|
|||
|
|
rpc = 1 # 1 × 8 = 8 vCPUs
|
|||
|
|
}
|
|||
|
|
# Total: 18 vCPUs
|
|||
|
|
}
|
|||
|
|
francecentral = {
|
|||
|
|
location = "francecentral"
|
|||
|
|
region_code = "fc"
|
|||
|
|
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
|||
|
|
vm_families = {
|
|||
|
|
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
|||
|
|
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
|||
|
|
}
|
|||
|
|
node_count = {
|
|||
|
|
system = 1 # 1 × 2 = 2 vCPUs
|
|||
|
|
validators = 1 # 1 × 4 = 4 vCPUs
|
|||
|
|
sentries = 1 # 1 × 4 = 4 vCPUs
|
|||
|
|
rpc = 1 # 1 × 8 = 8 vCPUs
|
|||
|
|
}
|
|||
|
|
# Total: 18 vCPUs
|
|||
|
|
}
|
|||
|
|
uksouth = {
|
|||
|
|
location = "uksouth"
|
|||
|
|
region_code = "uk"
|
|||
|
|
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
|||
|
|
vm_families = {
|
|||
|
|
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
|||
|
|
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
|||
|
|
}
|
|||
|
|
node_count = {
|
|||
|
|
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
|||
|
|
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
|||
|
|
}
|
|||
|
|
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
|||
|
|
}
|
|||
|
|
swedencentral = {
|
|||
|
|
location = "swedencentral"
|
|||
|
|
region_code = "sc"
|
|||
|
|
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
|||
|
|
vm_families = {
|
|||
|
|
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
|||
|
|
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
|||
|
|
}
|
|||
|
|
node_count = {
|
|||
|
|
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
|||
|
|
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
|||
|
|
}
|
|||
|
|
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
|||
|
|
}
|
|||
|
|
norwayeast = {
|
|||
|
|
location = "norwayeast"
|
|||
|
|
region_code = "no" # Using "no" to avoid conflict with northeurope "ne"
|
|||
|
|
# Available quotas: Dv2 (10), Dsv6 (10), Av2 (10), D Family (10)
|
|||
|
|
vm_families = {
|
|||
|
|
system = "Standard_D2_v2" # 2 vCPUs - Use Dv2 Family
|
|||
|
|
validators = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
sentries = "Standard_D4_v2" # 4 vCPUs - Use Dv2 Family
|
|||
|
|
rpc = "Standard_D8s_v6" # 8 vCPUs - Use Dsv6 Family
|
|||
|
|
}
|
|||
|
|
node_count = {
|
|||
|
|
system = 1 # 1 × 2 = 2 vCPUs (Dv2)
|
|||
|
|
validators = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
sentries = 1 # 1 × 4 = 4 vCPUs (Dv2)
|
|||
|
|
rpc = 1 # 1 × 8 = 8 vCPUs (Dsv6)
|
|||
|
|
}
|
|||
|
|
# Total: 18 vCPUs (Dv2: 10, Dsv6: 8 - within quotas)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Multi-region resource groups (LEGACY)
|
|||
|
|
resource "azurerm_resource_group" "multi_region" {
|
|||
|
|
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
|||
|
|
|
|||
|
|
name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-rg-comp-001"
|
|||
|
|
location = each.value.location
|
|||
|
|
|
|||
|
|
tags = merge(local.common_tags, {
|
|||
|
|
Region = each.value.location
|
|||
|
|
Deployment = "multi-region"
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Multi-region AKS clusters (LEGACY)
|
|||
|
|
module "aks_multi_region" {
|
|||
|
|
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
|||
|
|
source = "./modules/kubernetes"
|
|||
|
|
|
|||
|
|
resource_group_name = azurerm_resource_group.multi_region[each.key].name
|
|||
|
|
location = each.value.location
|
|||
|
|
cluster_name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-aks-main"
|
|||
|
|
kubernetes_version = var.kubernetes_version
|
|||
|
|
node_count = each.value.node_count
|
|||
|
|
vm_size = each.value.vm_families
|
|||
|
|
environment = var.environment
|
|||
|
|
tags = merge(local.common_tags, {
|
|||
|
|
Region = each.value.location
|
|||
|
|
Deployment = "multi-region"
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
# Use existing networking or create per-region
|
|||
|
|
vnet_subnet_id = module.networking_multi_region[each.key].aks_subnet_id
|
|||
|
|
node_subnet_id = module.networking_multi_region[each.key].node_subnet_id
|
|||
|
|
|
|||
|
|
# Shared Key Vault (or per-region)
|
|||
|
|
key_vault_id = module.keyvault.key_vault_id
|
|||
|
|
|
|||
|
|
depends_on = [
|
|||
|
|
azurerm_resource_group.multi_region,
|
|||
|
|
module.networking_multi_region
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Multi-region networking (LEGACY)
|
|||
|
|
module "networking_multi_region" {
|
|||
|
|
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
|||
|
|
source = "./modules/networking"
|
|||
|
|
|
|||
|
|
resource_group_name = azurerm_resource_group.multi_region[each.key].name
|
|||
|
|
location = each.value.location
|
|||
|
|
cluster_name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-aks-main"
|
|||
|
|
environment = var.environment
|
|||
|
|
tags = merge(local.common_tags, {
|
|||
|
|
Region = each.value.location
|
|||
|
|
Deployment = "multi-region"
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Multi-region storage (LEGACY)
|
|||
|
|
module "storage_multi_region" {
|
|||
|
|
for_each = var.enable_multi_region_legacy ? local.multi_region_config : {}
|
|||
|
|
source = "./modules/storage"
|
|||
|
|
|
|||
|
|
resource_group_name = azurerm_resource_group.multi_region[each.key].name
|
|||
|
|
location = each.value.location
|
|||
|
|
cluster_name = "${local.cloud_provider}-${local.env_code}-${each.value.region_code}-aks-main"
|
|||
|
|
environment = var.environment
|
|||
|
|
tags = merge(local.common_tags, {
|
|||
|
|
Region = each.value.location
|
|||
|
|
Deployment = "multi-region"
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Outputs for multi-region deployment (LEGACY)
|
|||
|
|
output "multi_region_clusters" {
|
|||
|
|
value = var.enable_multi_region_legacy ? {
|
|||
|
|
for k, v in module.aks_multi_region : k => {
|
|||
|
|
cluster_name = v.cluster_name
|
|||
|
|
cluster_fqdn = v.cluster_fqdn
|
|||
|
|
location = local.multi_region_config[k].location
|
|||
|
|
}
|
|||
|
|
} : {}
|
|||
|
|
description = "Multi-region AKS cluster information"
|
|||
|
|
}
|
|||
|
|
|