ARM模板部署Azure App Service引入插槽仍出现短暂不可用问题咨询
结论
你观测到的主插槽短时间不可用不属于插槽交换的正常现象,问题出在当前ARM模板的配置逻辑和部署流程的匹配问题上。
核心问题点
- 你的发布流水线第一步是全量ARM部署,主站点的
Microsoft.Web/sites资源定义中直接声明了运行时配置(.NET版本、TLS版本、HTTP2开关、Websocket开关等),每次部署主站点资源时,这些配置的更新会直接触发主站点重启,这才是503错误的核心来源,和后续的插槽交换操作无关。 - ARM是声明式部署模型,你的主站点资源定义中没有声明
appsettings配置,如果你使用完全部署模式,每次部署主站点时会自动清空主插槽上已经通过之前交换操作同步过来的应用配置,导致主站点在插槽交换完成前处于无配置运行状态,触发不可用。 - 你使用的2016-08-01版本的Microsoft.Web资源API存在多个已知的插槽配置同步bug,会导致配置同步时出现偶发的站点重启。
- 你当前的插槽配置中没有明确区分槽位固定配置和可交换配置,交换时可能出现配置适配问题触发站点重启。
修复方案
- 调整ARM部署逻辑:要么将主站点的部署模式调整为增量模式,避免未声明的配置被清空;要么将需要跟随插槽交换的全局运行时配置同时写到主站点和插槽的ARM定义中,保证两边配置完全一致,避免部署主站点时触发配置变更导致重启。
- 在主站点的
siteConfig属性中添加slotConfigNames字段,将不需要跟随插槽交换的配置(比如环境标识、特殊密钥等)标记为槽位固定,其余配置会自动跟随插槽交换同步,不会触发主站点重启。 - 将所有Microsoft.Web相关资源的API版本升级到2021-02-01及以上,修复老版本的插槽同步已知问题。
- 在执行插槽交换前添加预热校验步骤,确认staging插槽的应用已经完全启动、状态正常后再执行交换操作,避免交换后主站点需要冷启动。
内容的提问来源于stack exchange,提问作者hmw
相关产品推荐
相关产品推荐

