Azure Bicep中无法为VM模块添加灾难恢复属性求助
问题分析与解决
核心错误点
你当前的配置存在两处关键问题:
- 语法不符合Bicep规范:
- 错误使用数组
[]包裹配置,灾难恢复的属性集合应该用对象{}定义 - 键名包含空格(如
recovery vault Name),不符合Bicep标识符规则,需改为驼峰式(如recoveryVaultName) - 字符串值未添加单/双引号,Bicep中字符串必须用引号包裹
- 错误使用数组
- 概念误解:
Azure Bicep无法直接在VM资源或模块内通过类似ARM的简化数组配置灾难恢复,必须单独定义Azure Site Recovery的专属资源来关联VM与恢复服务体系。
修正后的配置示例
1. 定义正确的参数结构
如果是自定义VM模块,先定义规范的灾难恢复参数:
param disasterRecovery object = { recoveryVaultName: 'myrsv' targetAvailabilitySetId: '/subscriptions/{你的订阅ID}/resourceGroups/mygroup/providers/Microsoft.Compute/availabilitySets/myavset' targetResourceGroup: 'mygroup' cacheStorageAccountName: 'mystorage' replicationPolicyId: '/subscriptions/{你的订阅ID}/resourceGroups/{vault所在资源组}/providers/Microsoft.RecoveryServices/vaults/myrsv/replicationPolicies/{你的复制策略名}' }
2. 部署VM并关联灾难恢复
在Bicep中部署VM后,需要创建replicationProtectedItem资源来完成灾难恢复配置:
// 部署VM(示例基础配置,需补充你的VM完整参数) resource vm 'Microsoft.Compute/virtualMachines@2023-07-01' = { name: 'myvm' location: 'eastus' // 其他VM配置:硬件规格、OS磁盘、网络等... } // 引用已存在的恢复服务Vault resource recoveryVault 'Microsoft.RecoveryServices/vaults@2023-04-01' existing = { name: disasterRecovery.recoveryVaultName } // 引用已存在的缓存存储账户 resource cacheStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' existing = { name: disasterRecovery.cacheStorageAccountName } // 引用已存在的复制保护容器(需根据你的ASR环境调整名称格式) resource protectionContainer 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers@2023-04-01' existing = { parent: recoveryVault name: 'eastus;mygroup' // 格式:源位置;源资源组 } // 创建复制保护项,将VM加入灾难恢复 resource replicationProtectedItem 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationProtectedItems@2023-04-01' = { parent: protectionContainer name: vm.name properties: { policyId: disasterRecovery.replicationPolicyId providerSpecificDetails: { instanceType: 'A2A' // 若为Azure到Azure灾备,其他场景如VMware到Azure需改为对应类型 targetAvailabilitySetId: disasterRecovery.targetAvailabilitySetId cacheStorageAccountId: cacheStorageAccount.id recoveryResourceGroupId: resourceGroup(disasterRecovery.targetResourceGroup).id } } }
注意事项
- 确保恢复服务Vault、复制策略、目标可用性集、缓存存储账户已提前创建,或在Bicep中添加对应的部署逻辑
instanceType需根据你的灾备场景调整:Azure到Azure用A2A,VMware到Azure用VMwareVirtualMachine等
内容的提问来源于stack exchange,提问作者Satish B
相关产品推荐
相关产品推荐

