Azure Linux WebApp通过PowerShell从存储容器恢复备份失败咨询
解决方案
根因说明
你遇到的报错是Az.Websites 2.8.2版本的已知BUG:该版本的Restore-AzWebAppBackup命令未正确处理SAS URL的权限解析逻辑,即使传入合法的SAS URL,后台接口仍然会要求传入未暴露的AccessKey参数。
解决步骤
方案1:升级Az.Websites模块(优先推荐)
这是最简便的修复方式,微软在4.0.0及以上版本的Az.Websites模块中已经修复了该BUG:
- 执行命令升级模块:
Update-Module -Name Az.Websites -Force
- 验证版本是否符合要求:
Get-Module Az.Websites -ListAvailable | Select-Object Version
- 确认版本≥4.0.0后,直接执行你原来的恢复命令即可,无需修改任何参数。
如果是在Azure DevOps管道中使用,需要在执行恢复命令前增加升级模块的步骤,避免托管代理预装的模块版本过低。
方案2:改用存储账号密钥拼接访问URL(无需升级模块)
如果暂时无法升级模块,可以直接用存储账号访问密钥拼接StorageAccountUrl参数,绕过SAS解析问题:
- 获取存储账号访问密钥:
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName <存储账号所属资源组名> -Name amyappstorage)[0].Value
- 拼接存储访问URL:
$storageUrl = "https://amyappstorage.blob.core.windows.net/appbackup`$$storageKey"
- 使用新的URL执行恢复命令:
Restore-AzWebAppBackup -BlobName 'myapp_202109230658.zip' -Name 'myapplive' -Overwrite -ResourceGroupName 'myapp_migrated_env' -StorageAccountUrl $storageUrl
方案3:直接调用ARM原生接口(极端情况兼容)
如果上述两种方案都不生效,可以直接调用Azure底层ARM接口执行恢复操作,完全绕过PowerShell模块的BUG:
$restoreParams = @{ storageAccountUrl = '你原来的SAS URL' blobName = 'myapp_202109230658.zip' overwrite = $true } Invoke-AzResourceAction -ResourceGroupName myapp_migrated_env -ResourceType Microsoft.Web/sites -ResourceName myapplive -Action restore -Parameters $restoreParams -ApiVersion 2022-03-01 -Force
内容的提问来源于stack exchange,提问作者Dsol
相关产品推荐
相关产品推荐

