APIM从stv1升级至stv2后,PowerShell移除区域时SubnetResourceId报错
问题解决思路与方案
这个问题不少用户在APIM从stv1升级到stv2后都遇到过,核心原因是stv2对**子网资源ID(SubnetResourceId)**的格式校验比stv1严格得多,报错里的正则表达式就是stv2要求的标准格式。
具体解决步骤:
- 不要用管道一次性执行,拆分操作分步处理:
- 先获取APIM实例对象:
$apim = Get-AzApiManagement -ResourceGroupName $APIMresourceGroupName -Name $APIMaccountName - 移除目标区域:
$apim = Remove-AzApiManagementRegion -ApiManagement $apim -Location "North Europe" - 检查剩余区域的子网ID格式:
遍历$apim.AdditionalLocations,确认每个区域的SubnetResourceId完全符合报错里的正则要求——必须是包含订阅ID、资源组、虚拟网络、子网的完整资源路径,比如:
如果发现格式不对(比如缺少/subscriptions/your-sub-id/resourceGroups/your-rg/providers/Microsoft.Network/virtualNetworks/your-vnet/subnets/your-subnetproviders/Microsoft.Network部分),手动修正对应的子网ID:$apim.AdditionalLocations | Where-Object { $_.Location -eq "剩余区域名称" } | ForEach-Object { $_.SubnetResourceId = "修正后的完整子网资源ID" } - 最后提交修改:
Set-AzApiManagement -ApiManagement $apim
- 先获取APIM实例对象:
为什么之前stv1能用?
stv1版本对子网ID的校验没有这么严格,即使格式稍有不规范也能通过,但stv2强制执行了标准资源ID格式,所以移除区域后执行Set-AzApiManagement时,会校验所有剩余区域的子网ID,只要有一个不符合就会触发报错。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

