¿Por qué se detiene mi tarea de Amazon ECS?

Última actualización: 29-03-2022

Mi tarea de Amazon Elastic Container Service (Amazon ECS) se detuvo. ¿Cómo soluciono los problemas que detienen mi tarea de Amazon ECS?

Descripción corta

Es posible que sus tareas de Amazon ECS se detengan debido a varios motivos. Las razones más comunes son:

  • Se ha salido del contenedor esencial
  • Comprobaciones de estado de Elastic Load Balancing (ELB) fallidas
  • Comprobaciones de estado de contenedores fallidas
  • Instancia de contenedor en mal estado
  • Mantenimiento de la infraestructura subyacente
  • Evento de escalado de servicios activado
  • ResourceInitializationError
  • CannotPullContainerError
  • Tarea detenida por el usuario

Comprender la correlación entre una tarea detenida y un motivo de detención puede ayudar a reducir el esfuerzo necesario para solucionar problemas.

Resolución

Puedes ver los detalles de una tarea detenida mediante la API DescribeTasks. Sin embargo, los detalles de la tarea detenida aparecen solo durante una hora en los resultados devueltos. Para ver los detalles de las tareas detenidas durante más tiempo, puede utilizar esta plantilla de AWS CloudFormation para almacenar Amazon CloudWatch Logs de un evento de EventBridge que se desencadena cuando se detiene una tarea.

Razones de detención

Se ha salido del contenedor esencial de la tarea

Todas las tareas deben tener al menos un contenedor esencial. Si el parámetro esencial de un contenedor se marca como verdadero y ese contenedor falla o se detiene por cualquier motivo, todos los demás contenedores que forman parte de esa tarea se detienen. Para entender por qué se cerró una tarea por este motivo, identifique el código de salida con la API DescribeTasks y diríjase a la sección Códigos de salida comunes de este artículo.

Comprobaciones de estado de ELB fallidas

Cuando una tarea falla debido a las comprobaciones de estado de ELB, confirme que el grupo de seguridad del contenedor permite el tráfico que se origina en ELB. Tenga en cuenta lo siguiente:

  • Defina un período de gracia de comprobación de estado mínimo. Esto indica al programador de servicio que omita las comprobaciones de estado de Elastic Load Balancing durante un periodo de tiempo predefinido después de la creación de una tarea.
  • De forma predeterminada, un objetivo comienza a recibir su parte completa de solicitudes tan pronto como se registra en un grupo de destino y pasa una comprobación de estado inicial. El uso del modo de inicio lento da a los objetivos tiempo para calentarse antes de que el equilibrador de carga les envíe una parte completa de solicitudes.
  • Supervise las métricas de CPU y memoria del servicio. Por ejemplo, una CPU alta puede hacer que la aplicación no responda y provocar un error 502.
  • Compruebe los registros de su aplicación en busca de errores de aplicación.
  • Compruebe si el puerto ping y la ruta de comprobación de estado están configurados correctamente.
  • Curve la ruta de comprobación de estado desde Amazon Elastic Compute Cloud (Amazon EC2) y confirme el código de respuesta.

Comprobaciones de estado de contenedores fallidas

Las comprobaciones de estado se pueden definir en la API TaskDefinition o en Dockerfile.

Puede ver el estado de los contenedores individuales y de la tarea con la operación de la API DescribeTasks.

Asegúrese de que el estado de salida del comando de comprobación de estado indica que el contenedor está en buen estado. Compruebe los registros del contenedor en busca de errores de aplicación mediante la configuración del controlador de registro especificada en la definición de la tarea. A continuación, se muestran los valores posibles:

  • 0: success: el contenedor está en buen estado y listo para usar.
  • 1: unhealthy: el contenedor no funciona correctamente.
  • 2: reserved: no utilice este código de salida.

(instancia i-xx) (puerto x) no está en buen estado en (motivo por el que fallaron las comprobaciones de estado)

Esto indica que el contenedor está en mal estado. Para solucionar este error:

  • Compruebe que el grupo de seguridad adjunto a la instancia de contenedor permite el tráfico.
  • Confirme que hay una respuesta correcta desde el backend sin demora.
  • Defina el valor del tiempo de respuesta correctamente.
  • Consulte los registros de acceso del equilibrador de carga para obtener más información.

Servicio ABCService: ECS está realizando el mantenimiento de la infraestructura subyacente que aloja la tarea

Esto indica que la tarea se detuvo debido a un problema de mantenimiento de la tarea. Para obtener más información, consulte Mantenimiento de tareas de AWS Fargate.

Un servicio se asegura de que se siga la estrategia de programación especificada y de que las tareas se reprogramen cuando se detienen o fallan. Si la instancia de contenedor forma parte de un grupo de Auto Scaling. Se debe lanzar una nueva instancia de contenedor y colocar las tareas. Para obtener más información, consulte Verificación de una actividad de escalado para un grupo de Auto Scaling.

Evento de escalado de servicios ECS activado

Se trata de un mensaje de servicio estándar. Amazon ECS aprovecha el servicio Application Auto Scaling para ofrecer esta funcionalidad. El servicio de ECS tiene la capacidad de aumentar o disminuir el recuento deseado de tareas automáticamente. Tenga en cuenta las acciones siguientes:

ResourceInitializationError: unable to pull secrets or registry auth: la recuperación de recursos de ejecución falló

Para solucionar este error, consulte ¿Cómo soluciono el error “unable to pull secrets or registry auth” (no se pueden extraer secretos o autenticaciones de registro) en Amazon ECS?

    CannotPullContainerError

    Este error indica que el rol de ejecución de tareas que se utiliza no tiene permiso para comunicarse con Amazon ECS. Para solucionar este error:

    • Compruebe que el rol de ejecución de tareas tenga los permisos necesarios. Amazon ECS proporciona la política administrada denominada AmazonECSTaskExecutionRolePolicy, que contiene los permisos para la mayoría de los casos de uso.
    • Compruebe que el punto de conexión de servicio de ECR sea accesible desde: ecr.region.amazonaws.com y dkr.ecr.region.amazonaws.com
    • Para las imágenes privadas que necesitan autenticación, asegúrese de que repositoryCredentials y credentialsParameter estén definidos con la información correcta. Para obtener más información, consulte Autenticación de registro privado para tareas.

    Tarea detenida por el usuario

    Esto indica que la tarea recibió una acción StopTask. Puede identificar quién inició la llamada si consulta StopTask en CloudTrail para obtener información de userIdentity.

    Códigos de salida comunes

    • 0: Entrypoint, success o CMD están completando su ejecución y, por lo tanto, el contenedor se detiene.
    • 1: hace referencia a un error de aplicación. Para obtener más información, revise los registros de la aplicación.
    • 137: se produce cuando la tarea estaba forzando la salida (SIGKILL) para el contenedor:
      No responder a un SIGTERM dentro de un período predeterminado de 30 segundos después del cual se envía el valor SIGKILL y los contenedores se detienen de manera forzada. El período predeterminado de 30 segundos se puede configurar en el agente contenedor de ECS con el parámetro ECS_CONTAINER_STOP_TIMEOUT.
      Esto también puede ocurrir en una situación de falta de memoria (OOM). Revise sus métricas de CloudWatch para verificar si se ha producido OOM.
    • 139: se produce cuando se experimenta un error de segmentación. Es probable que la aplicación haya intentado acceder a una región de memoria que no está disponible, o que haya una variable de entorno no configurada o no válida.
    • 255: se produce cuando el comando ENTRYPOINT CMD en su contenedor falla debido a un error. Revise sus registros de CloudWatch para confirmarlo.

    Mensajes de error comunes

    No se encontraron instancias de contenedor en el clúster

    Revisa la sección de instancias de contenedor de su clúster. Si es necesario, puede lanzar una instancia de contenedor.

    InvalidParameterException

    Asegúrese de que todos los parámetros definidos en TaskDefinition estén presentes y que el ARN sea correcto. Compruebe que el rol de tarea y el rol de ejecución de tareas tengan permisos suficientes.

    Has alcanzado el límite de la cantidad de tareas que puedes ejecutar simultáneamente

    Para obtener más información sobre los límites, consulte las Service Quotas de ECS.

    Para todas las demás solicitudes de aumento de cuota, cree un caso en la consola de AWS Support y, a continuación, elija Aumento del límite de servicio.


    ¿Le resultó útil este artículo?


    ¿Necesita asistencia técnica o con la facturación?