如何将Azure App Service迁移至新的共享App Service Plan
App Service跨资源组迁移至共享计划问题解答
一、能否跨资源组迁移App Service至目标计划?
可以跨资源组迁移,但你看不到目标计划的原因大概率是以下限制导致:
- 操作系统不匹配:目标App Service Plan的操作系统(Windows/Linux)必须和待迁移的App Service完全一致,否则不会出现在可选列表
- 定价层不兼容:如果原App Service使用了高级特性(如自定义域、SSL、VNet集成等),目标计划的定价层必须支持这些特性;另外免费/共享层App Service无法迁移到隔离层计划,反之亦然
- 权限不足:当前操作账号没有目标资源组的Contributor或更高权限,无法读取目标计划信息
- 区域不一致:建议再次确认两者区域完全相同(比如“中国东部”和“中国东部2”属于不同区域)
注意:App Service并非只能在创建时指定计划,创建后随时可以迁移到符合条件的其他计划,不受资源组限制。
二、无法直接迁移时,克隆部署至共享计划的最佳方案
如果因特殊限制无法直接迁移,按以下步骤操作最稳妥:
1. 备份原应用所有资源
- 网站代码/文件:通过FTP、SSH或Azure CLI命令
az webapp deployment source config-zip --resource-group <原资源组> --name <原App Service名> --src <本地压缩包路径>导出代码包;WordPress类应用需下载所有主题、插件及上传文件 - 应用配置:在Azure Portal导出原App Service的应用设置、连接字符串、环境变量列表,保存为文本备用
- 数据库:用原生工具(如
mysqldumpfor MySQL、pg_dumpfor PostgreSQL)导出数据库备份;Azure托管数据库可直接使用Portal的“导出”功能生成备份文件
2. 在目标计划下创建新App Service
- 在目标资源组的共享App Service Plan中创建新App Service,确保操作系统、区域和原应用完全一致
- 若需复用原配置,可修改导出的ARM模板中的
serverFarmId为目标计划的资源ID,再通过Portal或CLI部署模板
3. 迁移代码和配置
- 上传备份的代码包到新App Service,或重新配置CI/CD部署源(如GitHub、Azure DevOps)
- 复制原应用的应用设置、连接字符串到新App Service,注意后续替换数据库连接信息
- 配置自定义域和SSL:先在新App Service添加原自定义域并完成验证,DNS切换前不要删除原域绑定;SSL证书可从原App Service导出后上传到新应用
4. 迁移并配置数据库
- 在目标区域创建数据库服务器(或使用现有共享服务器),导入之前的数据库备份
- 测试新数据库连接,确保数据完整
- 更新新App Service的连接字符串指向新数据库;WordPress应用需额外修改数据库
wp_options表中的siteurl和home字段为新应用域名
5. 验证并切换流量
- 完整测试新App Service的所有功能,确保与原应用一致
- 逐步修改DNS解析将流量切换到新应用;或使用Azure流量管理器实现平滑过渡,避免停机
- 验证无误后,删除原App Service和旧App Service Plan以节省成本
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

