Saltar al contenido

¿Cómo soluciono los errores 504 que aparecen cuando uso un equilibrador de carga de aplicación?

7 minutos de lectura
0

Quiero solucionar el error ELB_504 que aparece en mis registros de acceso del equilibrador de carga de aplicación o en las métricas de Amazon CloudWatch. O bien, aparece un error HTTP 504 cuando me conecto a mi servicio a través de un equilibrador de carga de aplicación.

Descripción corta

Se produce un error HTTP 504 cuando se agota el tiempo de espera de una puerta de enlace o un proxy. Los errores HTTP 504 del equilibrador de carga de aplicación pueden producirse por los siguientes motivos:

  • El equilibrador de carga no pudo establecer una conexión con el objetivo antes de que expirara el tiempo de espera de 10 segundos de la conexión.
  • El equilibrador de carga detectó un tiempo de espera del protocolo de enlace SSL cuando se conectó a un objetivo.
    Nota: No puedes ajustar el tiempo de espera de 10 segundos del protocolo de enlace SSL.
  • El equilibrador de carga estableció una conexión con el objetivo, pero el objetivo no respondió antes de que transcurriera el tiempo de espera.
  • El objetivo devolvió un valor de encabezado Content-Length mayor que el cuerpo de la entidad y se agotó el tiempo de espera del equilibrador de carga.
  • El tráfico intenso hizo que los objetivos respondieran más lentamente.
  • El objetivo es una función de AWS Lambda y el servicio no respondió antes de que expirara el tiempo de espera de la conexión.

Resolución

Comprobar si el equilibrador de carga permite el tráfico con objetivos registrados

Comprueba la métrica TargetConnectionErrorCount de CloudWatch con la estadística Sum. Si ves puntos de datos positivos en lugar de 0, significa que hay problemas de conexión entre el equilibrador de carga y el objetivo.

Para resolver estos problemas, comprueba los grupos de seguridad de red que están asociados al equilibrador de carga y a los objetivos del backend. Asegúrate de que los grupos de seguridad de la red permitan el tráfico entre el equilibrador de carga y los objetivos en ambas direcciones en los puertos de comprobación de estado y tráfico. Confirma que la lista de control de acceso de la red (ACL de la red) de la subred permita el tráfico desde los objetivos a los nodos del equilibrador de carga de los puertos efímeros (1024-65535).

Nota: Se recomienda usar reglas de grupos de seguridad específicas para el equilibrador de carga de aplicación.

Comprobación de las métricas del equilibrador de carga

Para determinar por qué tus objetivos están marcados como en mal estado, comprueba las métricas de CloudWatch del equilibrador de carga de aplicación. Si no hay datos de métricas de HTTPCode_ELB_504_Count, los servidores de aplicaciones devuelven los errores 504, no el equilibrador de carga. Comprueba si el valor máximo de la métrica TargetResponseTime supera con frecuencia el valor de tiempo de espera, ya que esta configuración puede provocar errores 504.

Además, comprueba las siguientes métricas de uso de la CPU y la memoria en tus objetivos según el tipo de recurso:

  • Para Amazon Elastic Compute Cloud (Amazon EC2), comprueba la métrica CPUUtilization. Las instancias de EC2 no envían métricas de memoria a CloudWatch de forma predeterminada, pero puedes enviar una métrica de memoria personalizada.
  • Para las tareas de Amazon ECS, consulta las métricas CPUUtilization y MemoryUtilization. Si el valor de cualquiera de los dos es 1 (100 %), la tarea deja de responder.
  • Para las funciones de Lambda, comprueba la métrica Duration. Si la duración dura más que el valor de tiempo de espera de inactividad del equilibrador de carga, recibirás un error de tiempo de espera de la puerta de enlace agotado.

Aumento de la disponibilidad de los recursos

Si tus objetivos tienen un uso elevado de la CPU, es posible que dejen de responder.

Para resolver este problema, destina los siguientes recursos a tus objetivos:

Actualiza el código de la aplicación para que sea más eficiente a la hora de responder a las solicitudes HTTP. Asegúrate de que la aplicación no tarde más tiempo en responder que el periodo de tiempo de espera de inactividad configurado. De forma predeterminada, el tiempo de espera de un equilibrador de carga de aplicación es de 60 segundos. Si es necesario, aumenta el tiempo de espera de inactividad del equilibrador de carga.

Nota: Se recomienda aumentar el valor del tiempo de espera de inactividad solo cuando el objetivo tenga que completar una gran cantidad de operaciones informáticas. De lo contrario, se recomienda optimizar el uso de los recursos en los objetivos.

Escalamiento de los objetivos en función de tu demanda

Para escalar los objetivos en función de tu demanda, lleva a cabo las siguientes acciones para la configuración:

Nota: Al invocar una función de Lambda, la función se escala automáticamente.

Comprobación de las dependencias externas

Cuando una aplicación utiliza una arquitectura de microservicios, las dependencias externas, como las bases de datos o las API, afectan al tiempo de respuesta del objetivo.

Comprueba las siguientes dependencias externas comunes para ver si hay problemas:

  • Para las bases de datos de Amazon Relational Database Service (Amazon RDS), comprueba las métricas ReadLatency, WriteLatency y DatabaseConnections de CloudWatch.
  • Para las colas de Amazon Simple Queue Service (Amazon SQS), comprueba las métricas ApproximateAgeOfOldestMessage y NumberOfMessagesDelayed de CloudWatch.
  • Para los buckets de Amazon Simple Storage Service (Amazon S3), comprueba las métricas FirstByteLatency, TotalRequestLatency, 4xxErrors y 5xxErrors de CloudWatch.
  • Para los servicios de autenticación de Amazon Cognito, comprueba la métrica TokenRefreshSuccesses de CloudWatch y comprueba si hay errores de ThrottlingException.

Para determinar el origen de un cuello de botella en el rendimiento, toma las siguientes medidas:

Uso de Compute Optimizer para evitar problemas futuros

Utiliza AWS Compute Optimizer para obtener información sobre el uso de los recursos de Amazon EC2, Amazon ECS y Lambda. Compute Optimizer detecta cuando el uso de los recursos es demasiado alto para ayudarte a evitar tiempos de espera. También proporciona las prácticas recomendadas sobre cómo optimizar las cargas de trabajo.

Información relacionada

HTTP 504: Tiempo de espera de la puerta de enlace agotado

¿Cómo puedo solucionar los problemas de latencia alta en mi equilibrador de carga de aplicación en Elastic Load Balancing?

¿Cómo soluciono los problemas de autenticación en mi equilibrador de carga de aplicación?

¿Cómo puedo solucionar los errores 504 devueltos al utilizar un equilibrador de carga clásico?