You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Bicep部署Recovery Service Vault无法配置源/目标VNet ID问题

解决Azure Bicep创建Recovery Service Vault时无法添加Source/Target VNet ID的问题

首先明确:Azure 原生的Recovery Service Vault(Microsoft.RecoveryServices/vaults)资源本身并不包含sourceVNetId和targetVNetId属性,你提供的ARM模板片段里的这些属性,要么是自定义模板参数/变量,要么是某个第三方工具/自定义模块的扩展标记,并非Vault资源的原生配置项。这就是直接在Bicep的Vault资源中添加这些属性会报错,但你的ARM模板能运行的原因——ARM模板对自定义属性的校验更宽松,而Bicep严格遵循Azure资源的类型定义。

正确的做法是:将VNet配对配置从Vault资源中剥离,通过Site Recovery的**网络映射(Network Mapping)**单独资源来配置,步骤如下:

1. 先创建Recovery Service Vault并启用Site Recovery

用Bicep定义Vault资源,同时启用Site Recovery和诊断设置:

resource rsv 'Microsoft.RecoveryServices/vaults@2023-04-01' = {
  name: 'My-prod-rsv'
  location: resourceGroup().location
  identity: {
    type: 'None'
  }
  properties: {
    sku: {
      name: 'Standard'
    }
    // 启用Site Recovery功能
    securitySettings: {
      siteRecoverySettings: {
        isEnabled: true
      }
    }
  }
}

// 配置诊断日志(对应你ARM里的enableDiagnostics)
resource rsvDiagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: 'rsv-site-recovery-diagnostics'
  scope: rsv
  properties: {
    // 替换为你的存储账户ID,或配置Log Analytics工作区
    storageAccountId: '/subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.Storage/storageAccounts/<存储账户名>'
    logs: [
      {
        category: 'AzureSiteRecoveryJobs'
        enabled: true
      }
      {
        category: 'AzureSiteRecoveryEvents'
        enabled: true
      }
    ]
    metrics: [
      {
        category: 'AllMetrics'
        enabled: true
      }
    ]
  }
}

2. 创建Site Recovery网络映射资源

Source和Target VNet的配对是通过Microsoft.RecoveryServices/vaults/replicationFabrics/replicationNetworks/replicationNetworkMappings资源实现的,示例如下(以Azure到Azure复制为例):

// 参数定义
param sourceVNetId string = '/subscriptions/<订阅ID>/resourceGroups/<源资源组>/providers/Microsoft.Network/virtualNetworks/<源VNet名>'
param targetVNetId string = '/subscriptions/<订阅ID>/resourceGroups/<目标资源组>/providers/Microsoft.Network/virtualNetworks/<目标VNet名>'
param sourceFabricName string = 'Azure-<源区域名>' // 比如Azure-eastus
param targetFabricName string = 'Azure-<目标区域名>' // 比如Azure-westus

// 引用已存在的复制Fabric(Azure到Azure场景下,Fabric会自动创建,名称格式为Azure-<区域>)
resource sourceFabric 'Microsoft.RecoveryServices/vaults/replicationFabrics@2023-06-01' existing = {
  parent: rsv
  name: sourceFabricName
}

resource targetFabric 'Microsoft.RecoveryServices/vaults/replicationFabrics@2023-06-01' existing = {
  parent: rsv
  name: targetFabricName
}

// 引用源和目标的复制网络
resource sourceReplicationNetwork 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationNetworks@2023-06-01' existing = {
  parent: sourceFabric
  name: sourceVNetId
}

resource targetReplicationNetwork 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationNetworks@2023-06-01' existing = {
  parent: targetFabric
  name: targetVNetId
}

// 创建网络映射
resource networkMapping 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationNetworks/replicationNetworkMappings@2023-06-01' = {
  parent: sourceReplicationNetwork
  name: '${sourceVNetId}-to-${targetVNetId}'
  properties: {
    targetNetworkId: targetReplicationNetwork.id
    targetFabricId: targetFabric.id
    fabricSpecificSettings: {
      instanceType: 'AzureToAzure'
      primaryNetworkId: sourceVNetId
      recoveryNetworkId: targetVNetId
    }
  }
}

补充说明

你ARM模板里的skipdeployment、enableSiterecovery等属性都不是Vault的原生属性,大概率是你使用的模板工具的自定义标记:

  • enableSiterecovery:在Bicep中通过securitySettings.siteRecoverySettings.isEnabled: true实现
  • skipdeployment:如果是控制是否部署Vault,可在Bicep中用条件部署(if: <布尔表达式>)实现

内容的提问来源于stack exchange,提问作者Satish B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:35:56