¿Cómo puedo ejecutar mis tareas de Amazon ECS que usan el tipo de inicio de Amazon EC2 para superar la comprobación de estado del equilibrador de carga de aplicación?
Quiero solucionar y resolver los problemas relacionados con las comprobaciones de estado del equilibrador de carga de aplicación para las tareas de Amazon Elastic Container Service (Amazon ECS) que se ejecutan en mis instancias de Amazon Elastic Compute Cloud (Amazon EC2).
Breve descripción
Si tu tarea de Amazon ECS no supera la comprobación de estado del equilibrador de carga, se mostrará uno de los siguientes errores en el mensaje de evento de servicio de Amazon ECS:
- «(service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [502 or 504]) or (request timeout)»
- «(service AWS-Service) (port 8080) is unhealthy in target-group tf-20190411170 due to (reason Health checks failed)»
- «(service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)»
Puede que también se muestre el siguiente error en la consola de tareas de Amazon ECS:
«Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)»
En caso de comprobaciones de estado fallidas de los contenedores, consulta ¿Cómo soluciono los errores de comprobación de estado del contenedor de las tareas de Amazon ECS?
Para determinar por qué se detuvo tu tarea de Amazon ECS, consulta Visualización de errores de tareas detenidas de Amazon ECS y ¿Por qué se detiene mi tarea de Amazon ECS?
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Configuración de diferentes grupos de seguridad
Se recomienda configurar diferentes grupos de seguridad para permitir todo el tráfico entre los equilibradores de carga y las instancias de contenedor o la interfaz de red elástica de tareas. También puedes configurar las instancias de contenedor para que acepten tráfico en el puerto especificado para la tarea.
En la configuración, comprueba los siguientes ajustes:
- El grupo de seguridad asociado a tu equilibrador de carga permite el tráfico de salida a las instancias de contenedor o a la interfaz de red elástica de la tarea en el puerto registrado. Además, permite el tráfico saliente a las instancias de contenedor en el puerto de comprobación de estado.
- Permite el tráfico entrante en el intervalo de puertos del host de la tarea desde el grupo de seguridad asociado a tu equilibrador de carga.
Activación de la zona de disponibilidad para el equilibrador de carga
Cuando configuras una zona de disponibilidad para tu equilibrador de carga, Elastic Load Balancing crea un nodo de equilibrador de carga en esa zona de disponibilidad. Si registras objetivos en una zona de disponibilidad, pero no activas esa zona, los objetivos registrados no recibirán tráfico. Para obtener más información, consulta Zonas de disponibilidad y nodos de equilibrador de carga.
Para determinar las zonas de disponibilidad para las que se ha configurado el equilibrador de carga, sigue estos pasos:
- Abre la consola de Amazon EC2.
- En el panel de navegación, en Equilibrio de carga, selecciona Equilibradores de carga.
- Selecciona el equilibrador de carga que utilices para tu servicio de Amazon ECS.
- En la pestaña Descripción, puedes ver las zonas de disponibilidad.
O bien, ejecuta el comando describe-load-balancers de la AWS CLI:
aws elbv2 describe-load-balancers --load-balancer-arns EXAMPLE-ALB-ARN --query 'LoadBalancers[*].AvailabilityZones[].{Subnet:SubnetId}'
Nota: Sustituye EXAMPLE-ALB-ARN por el ARN del equilibrador de carga de aplicación.
Para determinar las zonas de disponibilidad para las que se han configurado las instancias de contenedor, sigue estos pasos:
- Abre la consola de Amazon EC2.
- En el panel de navegación, en Escalamiento automático, selecciona Grupos de escalamiento automático.
- Selecciona el grupo de escalamiento automático de la instancia de contenedor que se ha asociado a tu clúster.
- En la pestaña Detalles, en Red, comprueba que las zonas de disponibilidad de la lista coincidan con las de tu equilibrador de carga.
O bien, ejecuta el comando describe-auto-scaling-groups de la AWS CLI:
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names EXAMPLE-ASG-NAME --query 'AutoScalingGroups[*].{Subnets:VPCZoneIdentifier}' --output text
Nota: Sustituye EXAMPLE-ASG-NAME por el nombre de tu grupo de escalamiento automático.
Para modificar las zonas de disponibilidad del clúster, sigue estos pasos:
- Abre la consola de AWS CloudFormation.
- Selecciona la pila de CloudFormation de tu clúster.
- Actualiza la pila.
- En la página Especificar detalles de la pila, actualiza la configuración de los ID de subred.
Para determinar las zonas de disponibilidad para las que está configurada la tarea, sigue estos pasos:
-
Abre la consola de Amazon ECS.
-
En el panel de navegación, elige Clústeres y, a continuación, selecciona el clúster que contenga tu servicio.
-
En la pestaña Servicios de la página del clúster, en la columna Nombre del servicio, selecciona el servicio que desees comprobar.
-
Elige la pestaña Configuración y redes.
-
En Configuración de red, consulta las subredes configuradas.
-
Abre la consola de Amazon Virtual Private Cloud (Amazon VPC para ver información adicional que no esté disponible en la consola de ECS.
-
Ejecuta el comando describe-services para comprobar que las zonas de disponibilidad de las subredes coinciden con las zonas de disponibilidad del equilibrador de carga:
aws ecs describe-services --cluster EXAMPLE-CLUSTER-NAME --service EXAMPLE-SERVICE-NAME --query 'services[*].deployments[].networkConfiguration[].awsvpcConfiguration.{Subnets:subnets}'Nota: Sustituye EXAMPLE-CLUSTER-NAME por el nombre de tu clúster y EXAMPLE-SERVICE-NAME por el nombre de tu servicio.
No puedes usar la consola de Amazon ECS para cambiar la configuración de la subred de un servicio de Amazon ECS. En su lugar, ejecuta el comando update-service de la AWS CLI.
Configuración de la ACL de la red para permitir el tráfico entre subredes
Las subredes del equilibrador de carga y de la instancia de contenedor o la interfaz de red de la tarea pueden ser diferentes.
Para permitir el tráfico entre las subredes, utiliza las siguientes configuraciones de la lista de control de acceso de la red (ACL de la red):
- La ACL de la red asociada a las subredes del equilibrador de carga debe permitir el tráfico entrante en los puertos efímeros (1024-65535) y en el puerto del agente de escucha.
- La ACL de la red también debe permitir el tráfico saliente en los puertos efímeros y de comprobación de estado.
- La ACL de la red asociada a las subredes de tu instancia de contenedor o interfaz de red de la tarea para el awsvpc debe permitir el tráfico entrante en el puerto de comprobación de estado.
- La ACL de la red debe permitir el tráfico saliente en los puertos efímeros.
Para obtener más información acerca de las ACL de la red, consulta Control del tráfico de subred con listas de control de acceso de la red.
Comprobación de la configuración de la comprobación de estado de tu grupo objetivo
Para comprobar que has configurado correctamente los ajustes de comprobación de estado de tu grupo objetivo, sigue estos pasos:
- Abre la consola de Amazon EC2.
- En el panel de navegación, en Equilibrio de carga, selecciona Grupos objetivo.
- Selecciona tu grupo objetivo.
Importante: Utiliza un nuevo grupo objetivo. Dado que Amazon ECS registra y anula automáticamente el registro de la tarea de ECS en el grupo objetivo, no agregues los objetivos de forma manual al grupo objetivo. - En la pestaña Comprobaciones de estado, realiza las siguientes acciones:
Comprueba que has configurado correctamente los campos Puerto y Ruta.
Nota: Si no configuras los campos correctamente, es posible que Amazon ECS pida al equilibrador de carga que anule el registro de la tarea debido a que las comprobaciones de estado no han sido correctas.
En Puerto, elige Puerto de tráfico.
Nota: Si eliges Sustituir, confirma que el puerto coincida con el puerto del host de la tarea.
En Tiempo de espera, asegúrate de que el valor del tiempo de espera de respuesta sea correcto.
Nota: Si este valor es inferior al tiempo necesario para responder, se produce un error en la comprobación de estado.
Comprobación del estado y la configuración de la aplicación en tu contenedor de ECS
Confirmación de que la aplicación responde a la comprobación de estado del equilibrador de carga
Haz lo siguiente:
- Comprueba que el puerto de ping y la ruta de la comprobación de estado de su grupo objetivo se hayan configurado correctamente.
- Supervisa las métricas de uso de la CPU y la memoria del servicio Amazon ECS. Si la aplicación es lenta o se agota el tiempo de espera, aumenta las cuotas de recursos de las tareas, escala horizontalmente el servicio, optimiza la aplicación o usa un tipo de instancia más grande.
- Establece un periodo de gracia mínimo para las comprobaciones de estado para que el programador de servicios ignore las comprobaciones de estado durante un periodo de tiempo predefinido después de iniciar una tarea.
Nota: Es posible que tu tarea de Amazon ECS requiera un periodo de gracia de comprobación de estado más largo para registrar el equilibrador de carga de aplicación. - Comprueba los registros de la aplicación para ver si hay errores. Para obtener más información, consulta Envío de registros de Amazon ECS a CloudWatch.
Confirmación de que la aplicación devuelve el código de estado correcto
Cuando el equilibrador de carga envía una solicitud HTTP GET a la ruta de comprobación de estado, la aplicación del contenedor de ECS devuelve el código de estado predeterminado 200 OK. Si se muestra un mensaje de error por no tratarse de HTTP, significa que la aplicación no escucha el tráfico HTTP. Es posible que recibas un código de estado HTTP diferente al que has especificado en la configuración de Coincidencia. Si recibes otro código de estado, significa que la aplicación escucha el tráfico HTTP, pero no devuelve ningún código de estado para un objetivo en buen estado.
Nota: Si usas un equilibrador de carga de aplicación, puedes actualizar la configuración de Coincidencia a un código de estado distinto del 200. Para obtener más información, consulta Comprobaciones de estado de los grupos objetivo del equilibrador de carga de aplicación.
Para confirmar que la aplicación de tu contenedor de ECS devuelve el código de estado correcto, sigue estos pasos:
-
Utiliza SSH, Session Manager, una capacidad de AWS Systems Manager o EC2 Instance Connect para conectarte a tu instancia de contenedor.
-
(Opcional) Ejecuta el siguiente comando en tu sistema operativo (SO) para instalar curl.
Amazon Linux y otras distribuciones basadas en RPM:sudo yum -y install curlSistemas basados en Debian, como Ubuntu:
sudo apt-get install curl -
Ejecuta el siguiente comando para obtener el ID del contenedor:
docker psNota: El puerto del agente de escucha local se muestra en la resultado del comando, en PORTS, al final de la secuencia.
-
Si usas el modo de red BRIDGE, ejecuta el comando docker inspect para obtener la dirección IP del contenedor:
IPADDR=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' 112233445566)Nota: La dirección IP del contenedor se guarda en IPADDR. Sustituye 112233445566 por el número de ID del contenedor del resultado del comando docker ps. Si usas awsvpc, utiliza la dirección IP de la tarea asignada a la interfaz de red de tareas. Si utilizas el modo de red HOST, usa la dirección IP de la instancia de contenedor del host a través de la cual se expone la tarea.
-
Para obtener el código de estado, ejecuta un comando curl que incluya IPADDR y el puerto del agente de escucha local:
curl -I http://${IPADDR}:8080/healthNota: En el comando del ejemplo anterior, sustituye 8080 por el puerto del agente de escucha.
Comprobación de estado de tu instancia de contenedor
Si recibes el siguiente mensaje de evento del evento de servicio de Amazon ECS, comprueba el estado de la instancia de contenedor:
«(service AWS-Service) (instance i-1234567890abcdefg) (port 443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)»
Comprueba el estado de la instancia de contenedor en la consola de Amazon EC2. Si la instancia no supera las comprobaciones de estado del sistema, detén e inicia la instancia.
Activación temporal de los registros de acceso del equilibrador de carga de aplicación
Activa temporalmente los registros de acceso del equilibrador de carga de aplicación para comprobar los siguientes problemas:
- Determina si el equilibrador de carga de aplicación envía comprobaciones de estado a la ruta o puerto correctos y si los objetivos responden correctamente.
- Analiza los códigos de estado HTTP que devuelven los objetivos para identificar problemas a nivel de aplicación, como rutas mal configuradas o errores en el servidor.
- Comprueba que las comprobaciones de estado alcanzaron el objetivo para determinar si hay problemas relacionados con la red.
- Determina si el tiempo de respuesta supera el tiempo de espera configurado para la comprobación de estado.
Solución de problemas de otras causas
Si la resolución anterior no resuelve el problema, consulta Solución de problemas con los equilibradores de carga de servicio en Amazon ECS.
Información relacionada
Creación de un grupo objetivo para tu equilibrador de carga de aplicación
Uso del equilibrador de carga para distribuir el tráfico de servicio de Amazon ECS
HTTP 504: Tiempo de espera de la puerta de enlace agotado
¿Cómo soluciono los errores 504 que aparecen cuando uso un equilibrador de carga de aplicación?
- Temas
- Containers
- Etiquetas
- Amazon Elastic Container Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 7 meses
- preguntada hace 10 meses
- preguntada hace 3 meses
- preguntada hace 7 meses
- preguntada hace 7 meses