¿Cómo soluciono los errores de comprobación de estado del equilibrador de carga de aplicación para las tareas de Amazon ECS en Fargate?
Quiero resolver los errores de comprobación de estado del equilibrador de carga de aplicación al ejecutar tareas de Amazon Elastic Container Service (Amazon ECS) en AWS Fargate.
Descripción breve
Cuando las tareas de Amazon ECS no superen las comprobaciones de estado del equilibrador de carga de aplicación, es posible que reciba uno de los siguientes errores en su mensaje de evento de servicio de Amazon ECS:
- Tiempo de espera agotado
- Las comprobaciones de estado fallaron sin códigos de error
- Las comprobaciones de estado fallaron con los códigos de error 404 o 5xx
- El destino se encuentra en una zona de disponibilidad que no está activada para el equilibrador de carga
En caso de comprobaciones de estado fallidas de los contenedores, consulte ¿Cómo soluciono los errores de comprobación del estado del contenedor de las tareas de Amazon ECS?
Si utiliza Amazon ECS con instancias de contenedor de Amazon Elastic Compute Cloud (Amazon EC2), consulte la siguiente documentación:
- ¿Cómo puedo ejecutar mis tareas de Amazon ECS con el tipo de lanzamiento de Amazon EC2 para superar la comprobación de estado del equilibrador de carga de aplicación en Amazon ECS?
- En caso de que las tareas de Amazon ECS se hayan detenido, consulte Comprobar si hay errores en las tareas que se han detenido.
Resolución
Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), confirme que está ejecutando una versión reciente de la AWS CLI. En los siguientes comandos de la AWS CLI, sustituya los valores de ejemplo por los suyos.
Error de tiempo de espera agotado
Compruebe los grupos de seguridad para asegurarse de que el equilibrador de carga pueda hacer solicitudes de comprobación de estado a la tarea de Fargate. El grupo de seguridad de tareas de Fargate debe permitir el tráfico entrante y saliente en el puerto del contenedor que se especifica en la definición de la tarea. La fuente debe ser el grupo de seguridad del equilibrador de carga de aplicación. El grupo de seguridad del equilibrador de carga de aplicación debe permitir el tráfico saliente al grupo de seguridad de tareas de Fargate.
Nota: Se recomienda configurar diferentes grupos de seguridad para la tarea de Fargate y el equilibrador de carga para permitir el tráfico entre ellos.
Si los grupos de seguridad permiten la comunicación entre la tarea de Fargate y el equilibrador de carga de aplicación, compruebe el valor de HealthCheckTimeoutSeconds en la ](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html#health-check-settings)configuración de comprobación de estado[. Aumente ligeramente los segundos de tiempo de espera, si es necesario.
Nota: Aumente el valor de HealthCheckTimeoutSeconds solo si su aplicación tarda mucho en responder a la comprobación de estado.
Para comprobar el tiempo medio de respuesta, ejecute el siguiente comando:
$ time curl -Iv http://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>
Nota: El uso excesivo de recursos en las tareas puede provocar lentitud o que el proceso no responda y dé error en la comprobación de estado.
Las comprobaciones de estado fallaron sin códigos de error
Ejemplo de mensaje de error de comprobación de estado:
(service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)
Si recibe un mensaje de error similar, compruebe que la tarea responda rápidamente después de iniciarse en Amazon ECS. Además, compruebe que la aplicación responde con el código de respuesta correcto.
Asegúrese de que la tarea tenga tiempo de responder una vez que se inicie en Amazon ECS
Para asegurarse de que la tarea tenga tiempo suficiente para responder una vez iniciada, aumente el valor de healthCheckGracePeriodSeconds. De esta manera, Amazon ECS retiene la tarea durante más tiempo e ignore las comprobaciones de estado de destino del Elastic Load Balancing que no estén en buen estado.
Nota: Si está creando un servicio nuevo, puede configurar el período de gracia de la comprobación de estado en la página de configuración del equilibrador de carga.
Para actualizar el valor de healthCheckGracePeriodSeconds de su servicio de Amazon ECS existente, ejecute el siguiente comando:
$ aws ecs update-service --cluster <EXAMPLE-CLUSTER-NAME> --service <EXAMPLE-SERVICE-NAME> --region <EXAMPLE-REGION> --health-check-grace-period-seconds <example-value-in-seconds>
Compruebe que la aplicación responde con el código de respuesta correcto
Para confirmar el código de respuesta que la aplicación ha enviado en la ruta de comprobación de estado, utilice los siguientes métodos.
Si ha configurado el registro de acceso en su aplicación, utilice ELB-HealthChecker/2.0 para comprobar la respuesta. Si utiliza los registros de AWS CloudWatch, utilice la Información de registros de Amazon CloudWatch y ejecute el siguiente comando:
fields @timestamp, @message | sort @timestamp desc | filter @message like /ELB-HealthChecker/
Para las instancias de Amazon EC2 en la misma Amazon Virtual Private Cloud (Amazon VPC), ejecute los siguientes comandos para confirmar que las tareas responden a las comprobaciones manuales. Para lanzar una nueva instancia de Amazon EC2, consulte Tutorial: Introducción a las instancias de Linux de Amazon EC2.
Comprobaciones de estado de HTTP
$ curl -Iv http://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>
Comprobaciones de estado de HTTPS
$ curl -Iv https://<example-task-pvt-ip>:<example-port>/<example_healthcheck_path>
Si las tareas se detienen rápidamente y no puede obtener las direcciones IP privadas, inicie una tarea independiente fuera de Amazon ECS para solucionar el problema. Use la misma definición de tarea y ejecute un comando curl en su dirección IP para iniciar la tarea. La tarea no se detiene debido a un error en la comprobación de estado.
Además, utilice Amazon ECS Exec para comprobar los puertos de escucha del contenedor. Mediante netstat, confirme que la aplicación esté escuchando en el puerto correspondiente:
$ netstat -tulpn | grep LISTEN
Las comprobaciones de estado fallaron con los códigos de error 404 o 5xx
Recibir errores en las comprobaciones de estado con códigos de error 404 o 5xx indica que se ha confirmado la solicitud de comprobación de estado, pero se ha recibido un código de respuesta no válido. Los códigos también indican que el código de respuesta que ha enviado la aplicación no coincide con el código de éxito configurado para el grupo de destino (parámetro: Matcher).
Se puede producir un código de error 404 cuando no existe una ruta de comprobación de estado o hay un error tipográfico en la configuración de la ruta de comprobación de estado. Se puede producir un código de error 5xx cuando la aplicación que está dentro de la tarea no responde correctamente a la solicitud o se produce un error de procesamiento.
Para determinar si la aplicación se está iniciando correctamente, compruebe los registros de la aplicación.
El destino se encuentra en una zona de disponibilidad que no está activada para el equilibrador de carga
Cuando se activa una zona de disponibilidad para el equilibrador de carga, el Elastic Load Balancing crea un nodo de equilibrador de carga en la zona de disponibilidad. Si registra destinos en una zona de disponibilidad y no la activa, los destinos registrados no recibirán tráfico. Para obtener más información, consulte Zonas de disponibilidad y nodos del equilibrador de carga.
Para identificar las zonas de disponibilidad para las que está configurado el equilibrador de carga, ejecute el siguiente comando:
aws elbv2 describe-load-balancers --load-balancer-arns <EXAMPLE-ALB-ARN> --query 'LoadBalancers[*].AvailabilityZones[].{Subnet:SubnetId}'
Para identificar las zonas de disponibilidad para las que está configurada la tarea de Fargate, ejecute el siguiente comando:
aws ecs describe-services --cluster <EXAMPLE-CLUSTER-NAME> --service <EXAMPLE-SERVICE-NAME> --query 'services[*].deployments[].networkConfiguration[].awsvpcConfiguration.{Subnets:subnets}'
Nota: Utilice el comando update-service de AWS CLI para cambiar la configuración de subred de un servicio de Amazon ECS. Utilice el comando enable-availability-zones-for-load-balancer de AWS CLI para añadir una zona de disponibilidad a un equilibrador de carga de aplicación existente.
Información relacionada
Solución de problemas de los equilibradores de carga de servicios
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 4 años