问题原因是 AWS Fargate 的默认设置会在应用未收到交互时关闭容器,因此需要调整超时时间来避免这种情况。可以使用以下代码来覆盖默认设置并保持容器运行:
import signal
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == "__main__":
# Set timeout to 300 seconds (default is only 60)
uvicorn.run(app, host="0.0.0.0", port=80, log_level="info", timeout_keep_alive=300, timeout_shutdown=300, force_stop=True)
# Use SIGINT to stop instead of default SIGTERM
signal.signal(signal.SIGTERM, signal.SIGINT)
在这里,将 keep_alive 和 shutdown 超时设置为 300 秒以确保容器保持运行。同时,使用信号处理器来捕获 SIGTERM 信号,以防止容器在关闭时遇到问题。