Terraform创建Function App Slot时报503错误问题咨询
ASE v3 部署函数应用插槽卡住超时问题解决方案
这个问题由Azurerm provider旧版本已知bug和ASE子网网络规则配置不当两个原因共同导致,和ASE v3本身的功能配置无关,按以下步骤排查修复即可:
1. 升级Azurerm Provider修复轮询逻辑缺陷
你当前使用的azurerm 3.12.0为2022年发布的早期版本,针对ASE v3托管的Windows函数应用插槽存在明确的状态轮询bug:
- 插槽创建完成后,ASE内部需要1~5分钟完成应用配置初始化,这期间查询备份配置、日志配置的管理接口会临时返回404/503状态码
- 旧版本provider没有针对这类临时初始化错误做退避重试,直接判定资源创建超时失败,哪怕资源实际已经在Azure门户创建完成
- 后续执行
terraform plan时,状态刷新逻辑会重复触发相同的错误调用,导致流程卡住
将azurerm provider升级到3.49.0及以上的3.x稳定版本即可修复该逻辑问题,新版本会正确等待ASE内部资源初始化完成,不会将临时的404/503响应判定为永久错误。
2. 校验ASE v3所在子网的网络规则
如果升级provider后仍然出现503错误,说明子网绑定的NSG或自定义路由阻断了Azure控制平面的管理流量,ASE v3子网必须满足以下网络要求:
- 不要为子网配置0.0.0.0/0下一跳为虚拟网络设备/本地网络的强制隧道路由,如果必须启用强制隧道,需要为
AzureWebManagement服务标签配置单独的用户自定义路由,下一跳类型设置为Internet - 子网关联的NSG必须放通
AzureWebManagement服务标签的入站、出站流量,同时不要阻断1587管理端口的访问,否则Azure Web资源提供程序无法连接到ASE内部的应用实例查询配置,会持续返回503错误 - 确认函数应用使用的存储账号已放通ASE子网的访问权限(如果开启了存储防火墙),该问题当前报错为Web管理接口错误,此项优先级较低可后续校验
3. 修复当前已卡住的Terraform状态
由于当前状态文件中残留了创建失败的插槽资源记录,升级provider后需要先清理脏状态:
- 在Azure门户确认目标函数应用插槽已正常创建完成,无处于"创建中"的残留状态
- 执行
terraform state rm azurerm_windows_function_app_slot.poc_fas将卡住的插槽资源从本地状态文件中移除 - 执行导入命令将已存在的插槽资源纳入状态管理,将命令中占位符替换为你实际的订阅ID即可:
terraform import azurerm_windows_function_app_slot.poc_fas "/subscriptions/<你的订阅ID>/resourceGroups/iac_poc_rg/providers/Microsoft.Web/sites/poc-fa/slots/poc-fa-slot"
- 后续执行
terraform plan/terraform apply即可正常运行,不会再出现卡住的问题
补充说明:ASE v3不需要针对函数应用配置额外的特殊参数,只要网络规则满足管理流量通行要求,部署逻辑和普通公网App Service Plan完全一致。
内容的提问来源于stack exchange,提问作者Billy L.
相关产品推荐
相关产品推荐

