Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

329
Vistas
El servidor FastAPI que se ejecuta en AWS App Runner falla después de 24 horas

Tengo un servidor FastAPI configurado con Gunicorn, implementado en AWS App Runner. Cuando trato de acceder al punto final en Postman, funciona perfectamente, sin embargo, después de 24 horas, cuando intento acceder al mismo punto final, aparece un error de puerta de enlace incorrecta 502 y no se registra nada en CloudWatch después de este punto, hasta que vuelva a implementar la aplicación, entonces comienza a funcionar bien de nuevo.

Sospecho que esto tiene que ver con mi propia configuración de Gunicorn, que de alguna manera estaba cerrando mi API después de un tiempo, y no con AWS App Runner, pero no he encontrado ninguna solución. También he mostrado mi configuración de Gunicorn a continuación. Cualquier ayuda será apreciada.

 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()
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Yo tuve el mismo problema. Después de muchas pruebas y errores, dos cambios parecieron resolver esto para mí.

  1. Establezca uvicorn --timeout-keep-alive en 65. Para gunicorn, este parámetro es --keep-alive . Supongo que Application Load Balancer arroja 502 si uvicorn cierra el zócalo tcp antes que ALB.

  2. Cambie la verificación de estado de App Runner para usar HTTP en lugar de ping TCP para administrar el reciclaje de contenedores. Actualmente, la interfaz de usuario de AWS no le permite realizar este cambio. Tendrás que hacer esto usando aws cli. Use cualquier ruta de URL activa para la verificación de ping, en su caso / prueba

aws apprunner update-service --service-arn <arn> --health-check-configuration Protocol=HTTP,Path=/test

# 2 podría ser suficiente para resolver el problema.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda