

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Définition des instances de conteneur utilisées par Amazon ECS pour les tâches
<a name="task-placement-constraints"></a>

Une contrainte de placement de tâche est une règle concernant une instance de conteneur qu’Amazon ECS utilise pour déterminer si la tâche est autorisée à s’exécuter sur l’instance. Au moins une instance de conteneur doit correspondre à la contrainte. Si aucune instance ne correspond à la contrainte, la tâche reste à l'état `PENDING`. Lorsque vous créez un nouveau service ou que vous mettez à jour un service existant, vous pouvez définir des contraintes de placement des tâches pour les tâches du service. 

Vous pouvez spécifier des contraintes de placement des tâches dans la définition du service, dans la définition de la tâche ou dans la tâche à l’aide du paramètre `placementConstraint`.

```
"placementConstraints": [
    {
        "expression": "The expression that defines the task placement constraints",
        "type": "The placement constraint type to use"
    }
]
```

Le tableau suivant décrit comment utiliser les paramètres.


| Constraint type (Type de contrainte) | Peut être spécifié quand | 
| --- | --- | 
| distinctInstancePlace chaque tâche sur une instance de conteneur différente.Amazon ECS examine le statut souhaité des tâches pour le placement des tâches. Par exemple, si le statut souhaité de la tâche existante est `STOPPED` (mais que le dernier statut ne l’est pas), une nouvelle tâche entrante peut être placée sur la même instance malgré la contrainte de placement `distinctInstance`. En conséquence, vous pouvez voir deux tâches dont le dernier statut est `RUNNING` sur la même instance. Nous recommandons aux clients qui recherchent une isolation forte pour leurs tâches d’utiliser Fargate. Fargate exécute chaque tâche dans un environnement de virtualisation matérielle. Cela garantit que ces charges de travail conteneurisées ne partagent pas les interfaces réseau, le stockage éphémère Fargate, l’UC ou la mémoire avec d’autres tâches. Pour plus d'informations, consultez [la section Présentation de la sécurité de AWS Fargate](https://d1.awsstatic.com/whitepapers/AWS_Fargate_Security_Overview_Whitepaper.pdf). |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonECS/latest/developerguide/task-placement-constraints.html)  | 
| memberOfPlace les tâches sur des instances de conteneur qui correspondent à une expression.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonECS/latest/developerguide/task-placement-constraints.html) | 

Lorsque vous utilisez le type de contrainte `memberOf`, vous pouvez créer une expression à l’aide du langage de requête de cluster qui définit les instances de conteneur dans lesquelles Amazon ECS peut placer des tâches. L’expression vous permet de regrouper vos instances de conteneur par attributs. L’expression va dans le paramètre `expression ` de `placementConstraint`.

## Attributs d’instance de conteneur Amazon ECS
<a name="attributes"></a>

Vous pouvez ajouter à vos instances de conteneur des métadonnées personnalisées connues sous le nom d'*attributs*. Chaque attribut a un nom et une valeur de chaîne facultative. Vous pouvez utiliser les attributs intégrés fournis par Amazon ECS ou définir des attributs personnalisés.

Les sections suivantes contiennent des exemples d'attributs intégrés, facultatifs et personnalisés.

### Attributs intégrés
<a name="ecs-automatic-attributes"></a>

Amazon ECS applique automatiquement les attributs suivants à vos instances de conteneur.

`ecs.ami-id`  
ID de l’AMI utilisée pour lancer l’instance. Cet attribut peut par exemple avoir la valeur `ami-1234abcd`.

`ecs.availability-zone`  
Zone de disponibilité de l'instance. Cet attribut peut par exemple avoir la valeur `us-east-1a`.

`ecs.instance-type`  
Type de l'instance. Cet attribut peut par exemple avoir la valeur `g2.2xlarge`.

`ecs.os-type`  
Système d'exploitation de l'instance. Les valeurs possibles pour cet attribut sont `linux` et `windows`.

`ecs.os-family`  
Version du système d'exploitation de l'instance.  
Pour les instances Linux, la valeur valide est `LINUX`. Pour les instances Windows, ECS définit la valeur au format `WINDOWS_SERVER_<OS_Release>_<FULL or CORE>`. Les valeurs valides sont `WINDOWS_SERVER_2022_FULL`, `WINDOWS_SERVER_2022_CORE`, `WINDOWS_SERVER_20H2_CORE`, `WINDOWS_SERVER_2019_FULL`, `WINDOWS_SERVER_2019_CORE` et `WINDOWS_SERVER_2016_FULL`.  
Cela est important pour les conteneurs Windows et Windows containers on AWS Fargate parce que la version du système d'exploitation de chaque conteneur Windows doit correspondre à celle de l'hôte. Si la version Windows de l'image du conteneur est différente de celle de l'hôte, le conteneur ne démarre pas. Pour plus d'informations, consultez [Compatibilité avec la version du conteneur Windows](https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-11) sur le site web de documentation Microsoft.  
Si votre cluster exécute plusieurs versions de Windows, vous pouvez vous assurer qu'une tâche est placée sur une instance EC2 exécutée sur la même version en utilisant la contrainte de placement : `memberOf(attribute:ecs.os-family == WINDOWS_SERVER_<OS_Release>_<FULL or CORE>)`. Pour de plus amples informations, veuillez consulter [Extraction des métadonnées d’AMI Windows optimisée pour Amazon ECS](retrieve-ecs-optimized_windows_AMI.md).

`ecs.cpu-architecture`  
Architecture du processeur de l'instance. Cet attribut peut par exemple avoir la valeur `x86_64` ou `arm64`.

`ecs.vpc-id`  
VPC dans lequel l'instance a été lancée. Cet attribut peut par exemple avoir la valeur `vpc-1234abcd`.

`ecs.subnet-id`  
Sous-réseau utilisé par l'instance. Cet attribut peut par exemple avoir la valeur `subnet-1234abcd`.

**Note**  
Les instances gérées Amazon ECS prennent en charge le sous-ensemble d’attributs suivant :  
`ecs.subnet-id`
`ecs.availability-zone`
`ecs.instance-type`
`ecs.cpu-architecture`

### Attributs facultatifs
<a name="ecs-optional-attributes"></a>

Amazon ECS peut ajouter les attributs suivants à vos instances de conteneur.

`ecs.awsvpc-trunk-id`  
Si cet attribut existe, l'instance dispose d'une interface réseau de jonction. Pour de plus amples informations, veuillez consulter [Augmentation des interfaces réseau d’une instance de conteneur Amazon ECS Linux](container-instance-eni.md).

`ecs.outpost-arn`  
Si cet attribut existe, il contient l'Amazon Resource Name (ARN) de l'Outpost. Pour de plus amples informations, veuillez consulter [Amazon Elastic Container Service sur AWS Outposts](using-outposts.md).

`ecs.capability.external`  
Si cet attribut existe, l'instance est identifiée en tant qu'instance externe. Pour de plus amples informations, veuillez consulter [Clusters Amazon ECS pour instances externes](ecs-anywhere.md).

### Attributs personnalisés
<a name="ecs-custom-attributes"></a>

Vous pouvez appliquer des attributs personnalisés à vos instances de conteneur. Par exemple, vous pouvez définir un attribut avec le nom « stack » et la valeur « prod ».

Lorsque vous spécifiez des attributs personnalisés, vous devez prendre en compte les éléments suivants.
+ Le `name` doit comprendre entre 1 et 128 caractères et peut contenir des lettres (majuscules et minuscules), des chiffres, des tirets, des traits de soulignement, des barres obliques et des points.
+ Le `value` doit comprendre entre 1 et 128 caractères et peut contenir des lettres (majuscules et minuscules), des chiffres, des tirets, des traits de soulignement, des points, des arrobases, des barres obliques, des deux-points et des espaces. La valeur ne peut pas contenir d'espaces de début ou de fin.

# Création d’expressions pour définir des instances de conteneur pour les tâches Amazon ECS
<a name="cluster-query-language"></a>

Les requêtes de cluster sont des expressions qui vous permettent de regrouper des objets. Par exemple, vous pouvez regrouper des instances de conteneur par attributs, notamment par zone de disponibilité, type d'instance ou métadonnées personnalisées. Pour de plus amples informations, veuillez consulter [Attributs d’instance de conteneur Amazon ECS](task-placement-constraints.md#attributes).

Une fois que vous avez défini un groupe d'instances de conteneur, vous pouvez personnaliser Amazon ECS de façon à placer les instances de conteneur en fonction du groupe. Pour plus d'informations, consultez [Exécution d’une application en tant que tâche Amazon ECS](standalone-task-create.md) et [Création d’un déploiement de mise à jour propagée Amazon ECS](create-service-console-v2.md). Vous pouvez également appliquer un filtre de groupe lorsque vous répertoriez les instances de conteneur.

## Syntaxe des expressions
<a name="expression-syntax"></a>

Les expressions ont la syntaxe suivante :

```
subject operator [argument]
```

**Sujet**  
Attribut ou champ à évaluer.

`agentConnected`  
Sélectionnez les instances de conteneur par leur état de connexion de l'agent de conteneur Amazon ECS. Vous pouvez utiliser ce filtre pour rechercher des instances avec des agents de conteneur déconnectés.  
Opérateurs valides : equals (==), not\$1equals (\$1=), in, not\$1in (\$1in), matches (=\$1), not\$1matches (\$1\$1)

`agentVersion`  
Sélectionnez les instances de conteneur par la version de l'agent de conteneur Amazon ECS. Vous pouvez utiliser ce filtre pour trouver des instances qui exécutent des versions obsolètes de l'agent de conteneur Amazon ECS.  
Opérateurs valides : equals (==), not\$1equals (\$1=), greater\$1than (>), greater\$1than\$1equal (>=), less\$1than (<), less\$1than\$1equal (<=)

`attribute:attribute-name`  
Sélectionnez les instances de conteneur par attribut. Pour de plus amples informations, veuillez consulter [Attributs d’instance de conteneur Amazon ECS](task-placement-constraints.md#attributes).

`ec2InstanceId`  
Sélectionnez les instances de conteneur par leur ID d'instance Amazon EC2.  
Opérateurs valides : equals (==), not\$1equals (\$1=), in, not\$1in (\$1in), matches (=\$1), not\$1matches (\$1\$1)

`registeredAt`  
Sélectionnez les instances de conteneur par leur date d'enregistrement d'instance de conteneur. Vous pouvez utiliser ce filtre pour trouver de nouvelles instances enregistrées ou des instances très anciennes.  
Opérateurs valides : equals (==), not\$1equals (\$1=), greater\$1than (>), greater\$1than\$1equal (>=), less\$1than (<), less\$1than\$1equal (<=)  
Formats de date valides : 2018-06-18T22:28:28\$100:00, 2018-06-18T22:28:28Z, 2018-06-18T22:28:28, 2018-06-18

`runningTasksCount`  
Sélectionnez les instances de conteneur par nombre de tâches en cours d'exécution. Vous pouvez utiliser ce filtre pour trouver des instances vides ou presque vides (peu de tâches exécutées sur elles).  
Opérateurs valides : equals (==), not\$1equals (\$1=), greater\$1than (>), greater\$1than\$1equal (>=), less\$1than (<), less\$1than\$1equal (<=)

`task:group`  
Sélectionnez les instances de conteneur par groupe de tâches. Pour de plus amples informations, veuillez consulter [Tâches Amazon ECS liées au groupe](task-groups.md).

**Opérateur**  
Opérateur de comparaison. Les opérateurs suivants sont pris en charge.


|  Opérateur  |  Description  | 
| --- | --- | 
|  ==, equals  |  Égalité de chaînes  | 
|  \$1=, not\$1equals  |  Inégalité de chaînes  | 
|  >, greater\$1than  |  Supérieur à  | 
|  >=, greater\$1than\$1equal  |  Supérieur ou égal à  | 
|  <, less\$1than  |  Inférieur à  | 
|  <=, less\$1than\$1equal  |  Inférieur ou égal à  | 
|  exists  |  Le sujet existe  | 
|  \$1exists, not\$1exists  |  Le sujet n'existe pas  | 
|  in  |  Valeur présente dans la liste d'arguments  | 
|  \$1in, not\$1in  |  Valeur ne se trouvant pas dans la liste d'arguments  | 
|  =\$1, matches  |  Correspondance de modèle  | 
|  \$1\$1, not\$1matches  |  Non-correspondance de modèle  | 

**Note**  
Une expression ne peut pas contenir de parenthèses. En revanche, vous pouvez utiliser des parenthèses pour spécifier la priorité dans des expressions composées.

**Argument**  
Pour de nombreux opérateurs, l'argument est une valeur littérale.

Les opérateurs `in` et `not_in` attendent une liste d'arguments comme argument. Vous spécifiez une liste d'arguments comme suit :

```
[argument1, argument2, ..., argumentN]
```

Les opérateurs matches et not\$1matches attendent un argument respectant la syntaxe de l'expression régulière Java. Pour en savoir plus, consultez [java.util.regex.Pattern](http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html).

**Expressions composées**

Vous pouvez combiner des expressions à l'aide des opérateurs booléens suivants :
+ &&, and
+ \$1\$1, or
+ \$1, not

Vous pouvez spécifier la priorité à l'aide de parenthèses :

```
(expression1 or expression2) and expression3
```

## Exemples d'expressions
<a name="expression-examples"></a>

Des exemples d'expressions sont présentés ci-après.

**Exemple : égalité des chaînes**  
L'expression suivante sélectionne des instances avec le type d'instance spécifié.

```
attribute:ecs.instance-type == t2.small
```

**Exemple : liste d'arguments**  
L'expression suivante sélectionne des instances dans la zone de disponibilité us-east-1a ou us-east-1b.

```
attribute:ecs.availability-zone in [us-east-1a, us-east-1b]
```

**Exemple : expression composée**  
L'expression suivante sélectionne des instances G2 qui ne se trouvent pas dans la zone de disponibilité us-east-1d.

```
attribute:ecs.instance-type =~ g2.* and attribute:ecs.availability-zone != us-east-1d
```

**Exemple : affinité des tâches**  
L'expression suivante sélectionne des instances qui hébergent des tâches dans le groupe `service:production`.

```
task:group == service:production
```

**Exemple : anti-affinité des tâches**  
L'expression suivante sélectionne des instances qui n'hébergent pas de tâches dans le groupe de base de données.

```
not(task:group == database)
```

**Exemple : nombre de tâches en cours d'exécution**  
L'expression suivante sélectionne des instances qui n'exécutent qu'une seule tâche.

```
runningTasksCount == 1
```

**Exemple : version de l'agent de conteneur Amazon ECS**  
L'expression suivante sélectionne des instances qui exécutent une version de l'agent de conteneur antérieure à 1.14.5.

```
agentVersion < 1.14.5
```

**Exemple : Date d'enregistrement d'instance**  
L'expression suivante sélectionne des instances qui ont été enregistrées avant le 13 février 2018.

```
registeredAt < 2018-02-13
```

**Exemple : ID d'instance Amazon EC2**  
L'expression suivante sélectionne des instances avec l'instance Amazon EC2 suivante. IDs

```
ec2InstanceId in ['i-abcd1234', 'i-wxyx7890']
```

# Exemple de contraintes de placement de tâche Amazon ECS
<a name="constraint-examples"></a>

Voici des exemples de contraintes de placement des tâches.

Cet exemple utilise la contrainte `memberOf` pour placer des tâches sur des instances t2. Il peut être spécifié à l'aide des actions suivantes : [CreateService[UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), [RegisterTaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html), et [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html).

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

L'exemple utilise la contrainte `memberOf` pour placer des tâches de réplica sur des instances avec des tâches dans le groupe de tâches `daemon-service` du service démon, en respectant les stratégies de placement des tâches qui sont également spécifiées. Cette contrainte garantit que les tâches de service démon sont placées sur l'instance EC2 avant les tâches de service de réplica.

Remplacez `daemon-service` par le nom du service démon.

```
"placementConstraints": [
    {
        "expression": "task:group == service:daemon-service",
        "type": "memberOf"
    }
]
```

L'exemple utilise la contrainte `memberOf` pour placer des tâches sur des instances avec d'autres tâches dans le groupe de tâches `databases`, en respectant les stratégies de placement des tâches qui sont également spécifiées. Pour de plus amples informations sur les groupes de tâches, veuillez consulter [Tâches Amazon ECS liées au groupe](task-groups.md). Il peut être spécifié à l'aide des actions suivantes : [CreateService[UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), [RegisterTaskDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html), et [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html).

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

La contrainte `distinctInstance` place chaque tâche du groupe sur une instance différente. Il peut être spécifié à l'aide des actions suivantes : [CreateService[UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html), et [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)

Amazon ECS examine le statut souhaité des tâches pour le placement des tâches. Par exemple, si le statut souhaité de la tâche existante est `STOPPED` (mais que le dernier statut ne l’est pas), une nouvelle tâche entrante peut être placée sur la même instance malgré la contrainte de placement `distinctInstance`. En conséquence, vous pouvez voir deux tâches dont le dernier statut est `RUNNING` sur la même instance.

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