Terraform无法在加拿大东部及美国西部创建Azure恢复服务Vault
解决方案
问题根源
报错的核心原因是:加拿大东部(canadaeast)、美国西部(westus)等区域不支持Recovery Services Vault使用Zone Redundant Storage(ZRS,区域冗余存储),但代码中强制指定了storage_mode_type = "ZoneRedundant",触发Azure API的参数校验失败。报错信息里的NO_PARAM是Azure返回的模糊提示,实际是存储冗余类型不符合区域支持范围。
修复方案
方案1:手动修改存储冗余类型
将storage_mode_type改为该区域支持的通用类型,比如GeoRedundant(异地冗余存储)或LocallyRedundant(本地冗余存储),这两种类型在所有支持Recovery Services Vault的区域都可用:
resource "azurerm_recovery_services_vault" "backup_vault" { name = "mydev-vault" location = var.rg_location resource_group_name = azurerm_resource_group.backup_vault.name sku = "Standard" soft_delete_enabled = true public_network_access_enabled = false # 替换为支持的存储类型 storage_mode_type = "GeoRedundant" depends_on = [ azurerm_resource_group.backup_vault ] }
方案2:自动适配区域(推荐)
通过Terraform条件表达式,让代码根据目标区域自动选择合适的存储冗余类型,无需手动切换:
# 定义不支持ZRS的区域列表,可根据实际情况补充 locals { non_zrs_regions = ["canadaeast", "westus"] } resource "azurerm_recovery_services_vault" "backup_vault" { name = "mydev-vault" location = var.rg_location resource_group_name = azurerm_resource_group.backup_vault.name sku = "Standard" soft_delete_enabled = true public_network_access_enabled = false # 根据区域自动选择存储模式 storage_mode_type = contains(local.non_zrs_regions, var.rg_location) ? "GeoRedundant" : "ZoneRedundant" depends_on = [ azurerm_resource_group.backup_vault ] }
验证
修改代码后,重新执行terraform apply,即可在canadaeast、westus区域成功创建Recovery Services Vault。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

