使用PowerShell更新内部VNET模式APIM报SubnetResourceId错误
问题场景
使用PowerShell对INTERNAL VNET模式的Azure API Management(APIM)实例执行配置更新,操作目标为拉取实例的系统证书,移除证书配置后提交实例更新,执行命令时返回SubnetResourceId格式校验异常。
复现操作代码:
Set-AzContext -Subscription "xxxx" $apimservice= Get-AzApiManagement -ResourceGroupName "xxxx" -Name "xxxx" $apimservice.SystemCertificates $apimservice.SystemCertificates.Clear() Set-AzApiManagement -InputObject $apimservice
返回报错信息:
Set-AzApiManagement : 'SubnetResourceId' does not match expected pattern '^/subscriptions/[^/]*/resourceGroups/[^/]*/ providers/Microsoft.(ClassicNetwork|Network)/virtualNetworks/[^/]*/subnets/[^/]*$'. At line:8 char:1 + Set-AzApiManagement -InputObject $apimservice + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzApiManagement], ValidationException + FullyQualifiedErrorId : Microsoft.Azure.Commands.ApiManagement.Commands.SetAzureApiManagement
故障原因
该问题为低版本Az.ApiManagement PowerShell模块的已知缺陷:针对VNET注入模式的APIM实例,Get-AzApiManagement返回的实例对象中,SubnetResourceId属性值会被自动转换为全小写格式,与命令内置的大小写敏感正则校验规则不匹配,触发校验异常。
解决方案
二选一即可:
- 升级Az.ApiManagement模块到最新稳定版本,执行以下命令后重启PowerShell会话,再重新执行原有配置更新流程:
Update-Module -Name Az.ApiManagement -Force
- 若暂时无法升级模块,可在执行更新命令前,手动为实例对象赋值符合格式规范的子网资源ID,注意路径段大小写需严格匹配规则,不能携带末尾斜杠:
# 替换尖括号内容为实际环境的资源参数 $validSubnetId = "/subscriptions/<订阅ID>/resourceGroups/<资源组名称>/providers/Microsoft.Network/virtualNetworks/<VNET名称>/subnets/<APIM所属子网名称>" $apimservice.SubnetResourceId = $validSubnetId # 再执行更新提交 Set-AzApiManagement -InputObject $apimservice
注意:子网资源ID的路径段中resourceGroups、providers、virtualNetworks、subnets字段大小写不可写为全小写,否则仍会触发校验失败。
内容的提问来源于stack exchange,提问作者Shyam Narayanan
相关产品推荐
相关产品推荐

