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

部署在AWS App Runner的Flask应用调用长耗时API返回502错误

解决AWS App Runner上Flask+Gunicorn长耗时API返回502 Bad Gateway的问题

问题背景

Flask应用基于Gunicorn部署在AWS App Runner上,原本运行稳定。新增一个需调用多个端点、响应耗时2-3分钟的API后,本地测试正常,但部署到App Runner后每次调用该API都会返回502 Bad Gateway。应用日志无报错信息,其余所有端点均可正常工作。

现有配置文件

Dockerfile

FROM python:3.11

ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

RUN pip cache purge
RUN pip install --upgrade pip

# Install dependencies:
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Run the application:
COPY . .
CMD ["gunicorn", "--config", "gunicorn_config.py", "app:app"]

Gunicorn_config.py

import os

workers = int(os.environ.get('GUNICORN_PROCESSES', '2'))
threads = int(os.environ.get('GUNICORN_THREADS', '4'))
bind = os.environ.get('GUNICORN_BIND', '0.0.0.0:8080')
#timeout = int(os.environ.get('GUNICORN_TIMEOUT', '600'))

forwarded_allow_ips = '*'

secure_scheme_headers = { 'X-Forwarded-Proto': 'https' }

问题原因

502 Bad Gateway的核心原因是超时不匹配:

  1. Gunicorn配置中timeout被注释,使用默认值(30秒),远短于API的2-3分钟响应时间,会导致Gunicorn提前终止请求。
  2. AWS App Runner默认请求超时为60秒,即使Gunicorn不主动终止,App Runner的负载均衡层也会因等待过久返回502。
  3. 本地测试通常使用Flask开发服务器,无严格超时限制,因此能正常运行。

解决方案

1. 调整Gunicorn超时设置

取消gunicorn_config.py中timeout行的注释,设置足够长的超时时间(建议比API最长耗时多1-2分钟,比如300秒=5分钟):

timeout = int(os.environ.get('GUNICORN_TIMEOUT', '300'))

确保Gunicorn不会提前终止长耗时请求。

2. 修改AWS App Runner请求超时配置

登录AWS控制台,进入目标App Runner服务:

  • 切换至配置标签页,找到运行时配置模块
  • 点击编辑,找到请求超时选项
  • 将超时时间设置为大于3分钟的值(如300秒),保存更改
    让App Runner的负载均衡层能等待足够长的时间获取后端响应。

3. 验证修复

重新部署应用到App Runner,测试长耗时API,确认502问题解决。若仍有异常,检查是否存在Flask扩展等中间件的额外超时限制,或查看App Runner访问日志进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:15:58