Saltar al contenido

¿Cómo puedo solucionar los problemas relacionados con las restricciones de ubicación de tareas de Amazon ECS?

5 minutos de lectura
0

Quiero usar las restricciones de ubicación de tareas para ejecutar tareas en Amazon Elastic Container Service (Amazon ECS). Sin embargo, las tareas quedan en estado PENDIENTE y no se inician.

Descripción corta

Si configura restricciones de ubicación de tareas en la definición de la tarea, el servicio o la tarea, debe tener una instancia de contenedor que coincida con sus atributos. De lo contrario, las tareas se quedan en estado PENDIENTE o no se inician y recibe uno de los siguientes errores:

  • service (service-name) was unable to place a task because no container instance met all of its requirements. The closest matching Container instance ( a1b2c3d4-5678-90ab-cdef-11111EXAMPLE ) is missing a required attribute.
  • TaskFailedToStart: MemberOf placement constraint unsatisfied.
  • TaskFailedToStart: ATRIBUTO

Resolució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.

Para resolver los problemas de restricción de ubicación de tareas, compruebe primero los atributos que especificó en la restricción de ubicación de tareas. A continuación, asegúrese de que las instancias de contenedor tengan los atributos necesarios.

Comprobación de las restricciones de ubicación de tareas especificadas solo en la definición de la tarea

Si usa restricciones de ubicación de tareas solo en la definición de la tarea, ejecute el siguiente comando para comprobar si a las instancias de contenedor les faltan atributos:

ecs-cli check-attributes --task-def example-task-def --cluster example-cluster --region region-code --container-instances example-container-instance-id

Nota: Sustituya example-task-def por la definición de la tarea, example-cluster por el nombre del clúster, region-code por su región de AWS y example-container-instance-id por su ID de instancia de contenedor.

Para obtener más información, consulte Comprobar si faltan atributos y depurar errores en los atributos de motivo en el sitio web de GitHub.

Comprobación de las restricciones de ubicación de tareas que se especifican en la definición de la tarea, el servicio o la tarea

Para comprobar las restricciones de ubicación en la definición de la tarea, siga estos pasos:

  1. Abra la consola de Amazon ECS.
  2. En el panel de navegación, seleccione Definiciones de tareas.
  3. Elija la definición de la tarea y, a continuación, seleccione la revisión de la definición de la tarea.
  4. Seleccione Ubicación de tareas.

Para comprobar las restricciones de ubicación especificadas para el servicio, siga estos pasos:

  1. Abra la consola de Amazon ECS.
  2. En el panel de navegación, seleccione Clústeres.
  3. En la página Clústeres, elija su clúster.
  4. En Servicios, elija su servicio.
  5. Seleccione Configuración y redes y, a continuación, elija Estrategia y restricciones de ubicación de tareas.

Para comprobar la restricción de ubicación especificada en una tarea específica, ejecute el siguiente comando describe-tasks de la AWS CLI:

    aws ecs describe-tasks  --cluster example-cluster --region region-code
    --tasks task-id

Nota: Sustituya example-cluster por el nombre de su clúster, region-code por su región y task-id por su ID de tarea. En la salida del comando, compruebe el valor placementConstraints.

Asegurarse de que las instancias de contenedor tengan los atributos necesarios

Utilice la consola de Amazon ECS o la AWS CLI para comprobar los atributos de la instancia de contenedor.

Consola de Amazon ECS

Siga estos pasos:

  1. Abra la consola de Amazon ECS.
  2. En el panel de navegación, seleccione Clústeres.
  3. En la página Clústeres, elija su clúster.
  4. Seleccione la pestaña Infraestructura.
  5. En Instancias de contenedor, seleccione su instancia de contenedor.
  6. Elija Acciones y, a continuación, seleccione Ver/editar atributos.
  7. Asegúrese de que la instancia de contenedor tenga los atributos necesarios especificados en la restricción de ubicación.

AWS CLI

Ejecute el siguiente comando describe-container-instances:

aws ecs describe-container-instances --cluster example-cluster --region region-code
--container-instances example-container-instance-id

Nota: Sustituya example-cluster por el nombre de su clúster, region-code por su región y example-container-instance-id por su ID de instancia de contenedor.

Para ver todas las instancias de contenedor con un atributo específico, ejecute el comando list-container-instances:

aws ecs list-container-instances --cluster example-cluster --region region-code --filter "attribute:ecs.instance-type == t2.micro"

Nota: Sustituya example-cluster por el nombre de su clúster, region-code por su región y attribute:ecs.instance-type == t2.micro por su atributo. El comando anterior muestra todas las instancias de contenedor del clúster que tienen un tipo de instancia t2.micro.

Para usar la AWS CLI para agregar o actualizar un atributo para una instancia de contenedor, ejecute el siguiente comando put-attributes:

aws ecs put-attributes \
    --cluster example-cluster \
    --region region-code \
    --attributes name=stack,value=production,targetId=example-container-instance-id

Nota: Sustituya example-cluster por el nombre de su clúster, region-code por su región y example-container-instance-id por su ID de instancia de contenedor. Agregue sus atributos a la opción**--attributes**. El comando del ejemplo anterior agrega el nombre de la pila y el valor de producción a la instancia de contenedor.

(Opcional) Actualización de la restricción de ubicación de tareas

Si las restricciones de ubicación de tareas son incorrectas o demasiado restrictivas, actualícelas en la definición de la tarea o el servicio. O bien, ejecute la siguiente register-task-definition para crear una nueva revisión de la definición de la tarea:

aws ecs register-task-definition \
    --cli-input-json file://jsonfilepath/filename.json

Nota: Sustituya jsonfilepath.filename.json por el archivo JSON de definición de tareas.

Para actualizar las restricciones de ubicación en una tarea independiente, ejecute el siguiente comando run-task:

aws ecs run-task \
    --cluster clustername \
    --placement-constraints exampleconstraints

Nota: Sustituya clustername por el nombre de su clúster y exampleconstraints por sus restricciones de ubicación.

OFICIAL DE AWSActualizada hace 2 años