Restricciones de ubicación de tareas deAmazon ECS - Amazon Elastic Container Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Restricciones de ubicación de tareas deAmazon ECS

Una restricción de ubicación de tareas es una regla que se tiene en cuenta durante la ubicación de tareas. Las restricciones de ubicación de tareas se pueden especificar al ejecutar una tarea o al crear un nuevo servicio. Las restricciones de ubicación de tareas también se pueden actualizar para los servicios existentes. Para obtener más información, consulte ubicación de tareas deAmazon ECS.

Tipos de restricción

Amazon ECS admite los siguientes tipos de restricciones de ubicación de tareas:

distinctInstance

Colocar cada tarea en una instancia de contenedor distinta. Esta restricción de ubicación de tareas se puede especificar al ejecutar una tarea o al crear un nuevo servicio.

memberOf

Colocar tareas en instancias de contenedor que satisfacen una expresión. Para obtener más información sobre la sintaxis de las expresiones para las restricciones, consulte Lenguaje de consulta de clúster.

La restricción de ubicación de tareas memberOf se puede especificar con las acciones siguientes:

  • Ejecución de una tarea

  • Creación de un servicio nuevo

  • Creación de una definición de tarea nueva

  • Creación de una revisión nueva de una definición de tarea existente.

Attributes

Puede añadir metadatos personalizados a sus instancias de contenedor, conocidas como atributos. Cada atributo tiene un nombre y un valor de cadena opcional. Puede utilizar los atributos integrados que ofrece Amazon ECS o definir atributos personalizados.

Atributos integrados

Amazon ECS aplica automáticamente los siguientes atributos a sus instancias de contenedor.

ecs.ami-id

El ID de la AMI utilizada para lanzar la instancia. Un valor de ejemplo para este atributo es ami-1234abcd.

ecs.availability-zone

La zona de disponibilidad de la instancia. Un valor de ejemplo para este atributo es us-east-1a.

ecs.instance-type

El tipo de instancia de la instancia. Un valor de ejemplo para este atributo es g2.2xlarge.

ecs.os-type

El sistema operativo de la instancia. Los valores posibles para este atributo son linux y windows.

ecs.cpu-architecture

La arquitectura de CPU de la instancia. Los valores posibles para este atributo son x86_64 y arm64.

ecs.vpc-id

La VPC en la que se lanzó la instancia. Un valor de ejemplo para este atributo es vpc-1234abcd.

ecs.subnet-id

La subred que está utilizando la instancia. Un valor de ejemplo para este atributo es subnet-1234abcd.

Atributos opcionales

Amazon ECS puede añadir los siguientes atributos a sus instancias de contenedor.

ecs.awsvpc-trunk-id

Si este atributo existe, la instancia tiene una interfaz de red troncal. Para obtener más información, consulte Elastic network interface trunking (Enrutamiento troncal de interfaz de red elástica).

ecs.outpost-arn

Si este atributo existe, contiene el Amazon Resource Name (ARN) de Outpost. Para obtener más información, consulte Amazon Elastic Container Service del AWS Outposts.

Custom attributes (Atributos personalizados)

Puede aplicar atributos personalizados a sus instancias de contenedor. Por ejemplo, puede definir un atributo con el nombre "stack" y un valor "prod".

Al especificar atributos personalizados, se debe tener en cuenta lo siguiente.

  • El name debe contener entre 1 y 128 caracteres y el nombre puede contener letras (mayúsculas y minúsculas), números, guiones, guiones bajos, barras diagonales, barras diagonales invertidas o puntos.

  • El value debe contener entre 1 y 128 caracteres y puede contener letras (mayúsculas y minúsculas), números, guiones, guiones bajos, puntos, arroba (@), barras diagonales, barras diagonales invertidas, dos puntos o espacios. El valor no puede contener espacios en blanco a la izquierda ni a la derecha.

Adición de un atributo

Puede agregar atributos personalizados en el momento del registro de la instancia utilizando el agente de contenedor o manualmente, mediante la Consola de administración de AWS. Para obtener más información sobre el uso del agente de contenedor, consulte Parámetros de configuración de agente de contenedor de Amazon ECS.

Para añadir atributos personalizados utilizando la consola

  1. Abra la consola de Amazon ECS en https://console.aws.amazon.com/ecs/.

  2. En el panel de navegación, elija Clusters (Clústeres) y seleccione un clúster.

  3. En la pestaña ECS Instances, seleccione la casilla de verificación de la instancia de contenedor.

  4. Elija Actions, View/Edit Attributes.

  5. Para cada atributo, haga lo siguiente:

    1. Elija Add attribute.

    2. Escriba un nombre y un valor para el atributo y elija el icono de marca de verificación.

  6. Cuando haya terminado de añadir atributos, elija Close.

Adición de atributos personalizados mediante AWS CLI

Los siguientes ejemplos muestran cómo añadir atributos personalizados utilizando el comando put-attributes.

Ejemplo: atributo único

El siguiente ejemplo agrega el atributo personalizado "stack=prod" a la instancia de contenedor especificada en el clúster predeterminado.

aws ecs put-attributes --attributes name=stack,value=prod,targetId=arn

Ejemplo: atributos múltiples

El siguiente ejemplo agrega los atributos personalizados "stack=prod" y "project=a" a la instancia de contenedor especificada en el clúster predeterminado.

aws ecs put-attributes --attributes name=stack,value=prod,targetId=arn name=project,value=a,targetId=arn

Filtrado por atributo

Puede aplicar un filtro a sus instancias de contenedor que le permiten ver atributos personalizados.

Filtrar instancias de contenedor por atributo utilizando la consola

  1. Abra la consola de Amazon ECS en https://console.aws.amazon.com/ecs/.

  2. Elija un clúster que tenga instancias de contenedor.

  3. Elija ECS Instances.

  4. Para definir las preferencias de visibilidad de las columnas, elija el icono del engranaje ( ) y seleccione los atributos que desea mostrar. Esta configuración se aplica a todos los clústeres de contenedores asociados a su cuenta.

  5. Con el campo de texto Filter by attributes, escriba o seleccione los atributos que desea utilizar para filtrar. El formato debe ser AttributeName: AttributeValue.

    Para Filter by attributes, escriba o seleccione los atributos por los que desea filtrar. Después de seleccionar el nombre de atributo, se le solicitará que indique el valor del atributo.

  6. Puede añadir atributos adicionales al filtro según sea necesario. Elija la X junto a un atributo para eliminarlo.

Filtrar instancias de contenedor por atributo utilizando la AWS CLI

Los siguientes ejemplos muestran cómo filtrar instancias de contenedor por atributo utilizando el comando list-consteader-instances. Para obtener más información acerca de la sintaxis del filtro, consulte Lenguaje de consulta de clúster.

Ejemplo: atributo integrado

En el ejemplo siguiente se utilizan atributos integrados para mostrar una lista de las instancias g2.2xlarge.

aws ecs list-container-instances --filter "attribute:ecs.instance-type == g2.2xlarge"

Ejemplo: atributo personalizado

En el ejemplo siguiente se muestra una lista de las instancias con el atributo personalizado "stack=prod".

aws ecs list-container-instances --filter "attribute:stack == prod"

Ejemplo: excluir un valor de atributo

En el ejemplo siguiente se muestra una lista de las instancias con el atributo personalizado "stack" a menos que el valor de atributo sea "prod".

aws ecs list-container-instances --filter "attribute:stack != prod"

Ejemplo: varios valores de atributos

En el siguiente ejemplo, se utilizan atributos integrados para mostrar una lista de las instancias de tipo t2.small o t2.medium.

aws ecs list-container-instances --filter "attribute:ecs.instance-type in [t2.small, t2.medium]"

Ejemplo: varios atributos

En el siguiente ejemplo, se utilizan atributos integrados para mostrar una lista de las instancias T2 en la zona de disponibilidad us-east-1a.

aws ecs list-container-instances --filter "attribute:ecs.instance-type =~ t2.* and attribute:ecs.availability-zone == us-east-1a"

Grupos de tareas

Puede identificar un conjunto de tareas relacionadas como grupo de tareas. Todas las tareas con el mismo nombre de grupo de tareas se consideran un conjunto al realizar la ubicación distribuida. Por ejemplo, suponga que está ejecutando distintas aplicaciones en un clúster, tales como bases de datos y servidores web. Para asegurarse de que las bases de datos están equilibradas en zonas de disponibilidad, agréguelas a un grupo de tareas denominado "databases" y, a continuación, use este grupo de tareas como restricción para la ubicación de tareas.

Cuando se lanza una tarea utilizando la acción RunTask o StartTask, puede especificar el nombre del grupo de tareas para la tarea. Si no especifica un grupo de tareas para la tarea, el nombre predeterminado es el nombre de la familia de la definición de tarea (por ejemplo, family:my-task-definition).

Para las tareas lanzadas por el programador de servicio, el nombre del grupo de tareas es el nombre del servicio (por ejemplo, service:my-service-name).

Limits

  • Un nombre de grupo de tareas debe tener 255 caracteres o menos.

  • Cada tarea puede estar exactamente en un grupo.

  • Después de lanzar una tarea, no puede modificar su grupo de tarea.

Restricciones de ejemplo

A continuación, se muestran ejemplos de restricción de ubicación de tareas.

En este ejemplo, se utiliza la restricción memberOf para ubicar tareas en instancias T2. Se puede especificar con las acciones siguientes: CreateService, UpdateService, RegisterTaskDefinition y RunTask.

"placementConstraints": [ { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" } ]

El ejemplo utiliza la restricción memberOf para ubicar tareas en instancias con otras tareas del grupo de tareas databases, teniendo en cuenta también las estrategias de ubicación de tareas que se especifiquen. Se puede especificar con las acciones siguientes: CreateService, UpdateService, RegisterTaskDefinition y RunTask.

"placementConstraints": [ { "expression": "task:group == databases", "type": "memberOf" } ]

La restricción distinctInstance ubica cada tarea del grupo en una instancia diferente. Se puede especificar con las siguientes acciones: CreateService, UpdateService y RunTask.

"placementConstraints": [ { "type": "distinctInstance" } ]