You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署至ASE V3的Azure Functions请求超时问题求助

部署至ASE V3环境Azure Function App时的请求超时及部署任务失败问题

已完成以下配置验证:

  • AzureWebJobsStorage、WEBSITE_VNET_ROUTE_ALL、WEBSITE_DNS_SERVER等环境变量配置正确
  • DNS解析正常
  • Function App的Always On已开启
  • 通过KUDU URL确认应用处于运行状态

但仍存在两个核心问题:

  1. 请求需经历两次超时后才能收到响应
  2. Azure DevOps部署任务执行失败,报错:

##[error]Error: Failed to fetch App Service 'func_name' details. Error: Request timeout: /subscriptions//resourceGroups//providers/Microsoft.Web/sites//?api-version=2016-08-01


AzureFunctionApp@2部署任务配置

- task: AzureFunctionApp@2
  displayName: 'Azure functions app deploy'
  inputs:
    connectedServiceNameARM: '<Service Connection Name>'
    appType: 'functionAppLinux'
    appName: 'func_name'
    deployToSlotOrASE: true
    resourceGroupName: 'RG_name'
    slotName: 'production'
    package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
    appSettings: -RequestTimeout 5000

FUNCTION_APP.py代码片段

import azure.functions as func 
from azure.storage.blob.aio import BlobServiceClient
import logging
import os
import io
import time
import psutil
import aiohttp
from fastapi import FastAPI, Request, Response, HTTPException, status
from fastapi.middleware.gzip import GZipMiddleware
from fastapi.responses import StreamingResponse

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.sdk.resources import Resource, ResourceAttributes

configure_azure_monitor()

VERSION = "1.0.7"

logging.getLogger('azure.core.pipeline.policies.http_logging_policy').setLevel(logging.WARNING)

fast_app = FastAPI() 
fast_app.add_middleware(GZipMiddleware, minimum_size=6000)

app = func.FunctionApp()

stopwatch = None

images_client = BlobServiceClient.from_connection_string(os.environ['sa_images_connection'], max_chunk_get_size=64*1024)
web_client = BlobServiceClient.from_connection_string(os.environ['sa_staticweb_connection'])

    
def stopwatch_lap(initial_time: float, message: str|None = None) -> float:
    elapsed_time = time.perf_counter() - initial_time
    if message is not None:
        logging.info(f"{message} Elapsed time: {elapsed_time:.4f} s")
    
    return time.perf_counter()

host.json配置

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  },
  "extensions": {
    "http": {
        "routePrefix": ""
    }
  }
}

排查建议

部署任务超时排查

  • 检查服务连接权限:确认Azure DevOps服务连接使用的SPN或托管标识,拥有对ASE及Function App的Microsoft.Web/sites/read权限,避免因权限不足导致请求超时
  • 验证代理网络可达性:若使用自托管代理,确保代理所在网络能通过专用端点/服务端点访问Azure Resource Manager(ARM)及ASE管理端点;若使用微软托管代理,需确认ASE是否允许公共网络访问管理端点,或已通过Private Link配置ARM访问
  • 延长任务超时时间:在AzureFunctionApp@2任务中添加timeoutInMinutes: 10(可按需调整),覆盖默认超时限制

Function App请求超时排查

  • 监控Blob存储连接耗时:在代码中添加日志,记录BlobServiceClient初始化及首次存储请求的耗时,确认是否为存储账户连接导致延迟;可尝试调整max_chunk_get_size至128*1024测试效果
  • 优化OpenTelemetry初始化:configure_azure_monitor()可能在冷启动时耗时较长,可将其移至函数触发时执行,而非全局初始化,并添加日志记录初始化耗时
  • 调整HTTP超时配置:当前RequestTimeout设为5000秒过于夸张,建议调整为300秒以内的合理值,同时检查host.json中HTTP扩展配置是否存在路由冲突
  • 冷启动优化:尽管开启Always On,ASE环境下仍可能存在冷启动延迟,可尝试预热函数或增加应用服务计划实例数
  • 深度排查DNS解析:在KUDU中执行nslookup命令,检查存储账户专用端点的解析耗时,确认是否存在DNS缓存失效或解析超时问题;可检查专用DNS区域配置是否正确

内容的提问来源于stack exchange,提问作者Lbits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:32:34