¿Cómo soluciono los problemas relacionados con las tareas programadas en Amazon ECS?

7 minutos de lectura
0

He programado la tarea de Amazon Elastic Container Service (Amazon ECS) para que se ejecute de forma periódica. Sin embargo, mi tarea de Amazon ECS no está activada y no obtengo los registros de ejecución ni el historial de las tareas del clúster.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Cuando utiliza una tarea programada, Amazon EventBridge llama a la API RunTask para Amazon ECS para ejecutar las tareas en su nombre. Es posible que su tarea de Amazon ECS programada no se invoque debido a los siguientes motivos:

  • Configuró incorrectamente la expresión cron o de hora de EventBridge.
  • La regla o la programación de EventBridge no invoca el objetivo.
  • No se pudo ejecutar la API RunTask.
  • La instancia de contenedor salió debido a problemas con la aplicación o a restricciones de recursos.
  • Las tareas programadas fallaron debido a limitaciones de capacidad.
  • Las tareas programadas fallaron debido a problemas de conectividad de red.

Cómo confirmar que la expresión cron de EventBridge esté configurada correctamente

Para obtener la expresión cron de EventBridge, ejecute uno de los siguientes comandos de la AWS CLI.

Si usa reglas de EventBridge, ejecute el comando describe-rule:

aws events describe-rule --name example-rule --region example-region

Si usa EventBridge Scheduler, ejecute el comando get-schedule:

aws scheduler get-schedule --name example-schedule --region example-region

Nota: Sustituya example-rule por el nombre de la regla, example-schedule por el nombre de la programación y example-region por su región de AWS.

En la salida del comando, compruebe la expresión cron de EventBridge en el parámetro ScheduleExpression. Asegúrese de configurar la programación de reglas en la zona horaria UTC+0.

Cómo comprobar si la regla o la programación no invocan el objetivo

Para comprobar las métricas de Amazon CloudWatch Invocations y FailedInvocations para la regla de EventBridge, siga estos pasos:

  1. Abra la consola de CloudWatch.
  2. En el panel de navegación, elija Métricas y, a continuación, elija Todas las métricas.
  3. Seleccione Eventos.
  4. Elija Por nombre de regla.
  5. Seleccione TriggerRules, Invocations y FailedInvocations para la regla de EventBridge que ejecuta la tarea de Amazon ECS.
  6. Seleccione la pestaña Métricas diagramadas.
  7. En Estadísticas, seleccione SUM para cada métrica.

Para comprobar el rendimiento de EventBridge Scheduler, revise las métricas de CloudWatch de InvocationAttemptCount, TargetErrorCount y InvocationDroppedCount.

Si ve datos de FailedInvocations o InvocationDroppedCount, compruebe que el rol de AWS Identity and Access Management (IAM) de EventBridge tenga permiso para invocar su tarea.

Si ve datos de TargetErrorCount, significa que hay un problema con la invocación del objetivo. Compruebe si la tarea se inició, se inició y falló inmediatamente o si no se completó.

Cómo comprobar si la acción RunTask ha fallado

Siga estos pasos:

  1. Abra la consola de AWS CloudTrail.
  2. En el panel de navegación, elija Historial de eventos.
  3. En Atributos de búsqueda, seleccione Nombre del evento.
  4. En Escribir un nombre de evento, escriba «ejecutar tarea».
  5. En el filtro de intervalo de tiempo, seleccione las horas en las que esperaba que se ejecutara la tarea de Amazon ECS programada.
  6. En la tabla, seleccione el evento que desea ver.
  7. En los registros de eventos de JSON, compruebe si hay errorMessage o responseElements.failures.reason para confirmar que la API no ha invocado la tarea programada.
    Nota: Puede encontrar el identificador de la tarea que ha fallado en el campo responseElements.tasks.taskARN.
  8. Solucione el error de la API.

Cómo comprobar si el contenedor ha salido después de ejecutarse la tarea

Incluso después de que la tarea se ejecute correctamente, es posible que las tareas de Amazon ECS se detengan debido a problemas con las aplicaciones o a restricciones de recursos. Para resolver este problema, consulte ¿Cómo soluciono los problemas de las tareas de Amazon ECS que se detienen o no se inician cuando mi contenedor se cierra?

Cómo comprobar si hay problemas de restricción de capacidad

Los problemas de restricción de capacidad que provocan errores en las tareas se producen cuando el clúster no tiene suficientes recursos de computación, como CPU y memoria. O bien, los problemas se producen cuando otras cargas de trabajo que se ejecutan en el mismo clúster provocan un uso elevado de los recursos. Las restricciones o estrategias restrictivas para la ubicación de tareas también pueden reducir los recursos disponibles.

Para supervisar el uso de los recursos, configure Container Insights en los clústeres de Amazon ECS. También puede configurar alarmas de CloudWatch para que le notifiquen cuando alcance un umbral de uso de recursos. Para asegurarse de que los recursos estén disponibles cuando los necesite, defina las reservas de CPU y memoria para las tareas. Es posible que necesite aumentar el recuento deseado para el servicio Amazon ECS a fin de escalar horizontalmente el clúster o utilizar el escalamiento automático del clúster.

Revise las restricciones de ubicación de tareas existentes y ajústelas para que sean menos restrictivas. Es una práctica recomendada priorizar las cargas de trabajo críticas, reprogramar las cargas de trabajo no esenciales y probar diferentes estrategias de ubicación, como distribución, binpack o aleatoria.

Utilice los proveedores de capacidad de Amazon ECS para reservar capacidad para cargas de trabajo importantes. Se recomienda utilizar instancias dedicadas de Amazon Elastic Compute Cloud (Amazon EC2) para cargas de trabajo que requieren hardware aislado. Utilice AWS Fargate para las tareas que requieren recursos disponibles.

Cómo comprobar si hay problemas de conectividad de red

Para solucionar los problemas de conectividad de red de las tareas programadas, tome las siguientes medidas:

  • Asegúrese de que las reglas del grupo de seguridad y de la lista de control de acceso de la red (ACL de la red) permitan el tráfico entrante y saliente necesario para sus tareas.
  • Compruebe que ha configurado correctamente la puerta de enlace de Internet o la puerta de enlace NAT para su nube virtual privada (VPC).
  • Consulte las tablas de enrutamiento de la puerta de enlace.
  • Revise las definiciones de las tareas para ver las variables de entorno con direcciones IP o nombres de host codificados. Asegúrese de que las direcciones IP o los nombres de host existentes sean correctos y de que pueda comunicarse con ellos.

Para probar la conectividad de red desde las instancias de contenedor, siga estos pasos:

  1. Use SSH para conectarse a su instancia de Amazon EC2.
  2. Para ejecutar comandos de forma remota en su contenedor, ejecute el siguiente comando execute-command:
    aws ecs execute-command --cluster cluster-name --task task-id --container container-name --command "/bin/bash" --interactive
    Nota: Sustituya cluster-name por el nombre de su clúster, task-id por su ID de tarea y container-name por el nombre de su instancia de contenedor.
  3. Para probar la conectividad, ejecute uno de los siguientes comandos:
    curl -v http://example.com
    Alternativa:
    nslookup example.com
    Alternativa:
    nc -zv example.com 80
    **Nota:**Sustituya ejemplo.com por su dominio.
  4. Compruebe la resolución y el enrutamiento del DNS para identificar los problemas de red.

Para simplificar la conectividad, ejecute las tareas en Fargate en lugar de en Amazon EC2. Con Fargate, no necesita administrar la infraestructura subyacente. O bien, utilice los puntos de enlace de VPC para conectarse a los servicios sin una puerta de enlace de Internet, un dispositivo NAT, una conexión VPN o una conexión de AWS Direct Connect.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses