我有一个用Gunicorn配置的FastAPI服务器,部署在App上。但是,当我尝试访问端点时,在24小时后,当我尝试访问同一个端点时,我会得到一个502错误的网关错误,在此之后cloudWatch上不会出现任何登录,直到我重新部署应用程序,然后它又开始正常工作了。
我怀疑这与我的Gunicorn配置本身有关,它在一段时间后以某种方式关闭了我的API,而不是AWS应用程序运行程序,但我没有找到任何解决方案。我还展示了我的Gunicorn设置在下面。如有任何问题,我们将不胜感激。
from fastapi import FastAPI
import uvicorn
from fastapi.middleware.cors import CORSMiddleware
from gunicorn.app.base import BaseApplication
import os
import multiprocessing
api = FastAPI()
def number_of_workers():
print((multiprocessing.cpu_count() * 2) + 1)
return (multiprocessing.cpu_count() * 2) + 1
class StandaloneApplication(BaseApplication):
def __init__(self, app, options=None):
self.options = options or {}
self.application = app
super().__init__()
def load_config(self):
config = {
key: value for key, value in self.options.items()
if key in self.cfg.settings and value is not None
}
for key, value in config.items():
self.cfg.set(key.lower(), value)
def load(self):
return self.application
@api.get("/test")
async def root():
return 'Success'
if __name__ == "__main__":
if os.environ.get('APP_ENV') == "development":
uvicorn.run("api:api", host="0.0.0.0", port=2304, reload=True)
else:
options = {
"bind": "0.0.0.0:2304",
"workers": number_of_workers(),
"accesslog": "-",
"errorlog": "-",
"worker_class": "uvicorn.workers.UvicornWorker",
"timeout": "0"
}
StandaloneApplication(api, options).run()
发布于 2022-01-22 02:24:22
我也有同样的问题。经过大量的尝试和错误,两个改变似乎解决了这个问题。
--timeout-keep-alive
设为65。对于金牛来说,这是--keep-alive
。如果uvicorn在ALB之前关闭tcp套接字,则应用程序负载均衡器将抛出502。aws apprunner update-service --service-arn <arn> --health-check-configuration Protocol=HTTP,Path=/test
第二种可能就足以解决这个问题。
https://stackoverflow.com/questions/70611806
复制相似问题