

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.

# Garantir l'idempuissance
<a name="ECS_Idempotency"></a>

Lorsque vous effectuez une opération de mutation, vous pouvez voir une exception en raison de délais d'attente ou de problèmes de serveur survenant après la mutation des ressources. Il peut donc être difficile de déterminer si la mutation s'est produite et peut entraîner de multiples tentatives. Toutefois, si l'opération initiale et les tentatives suivantes ont réellement effectué les mutations, vous avez peut-être appliqué des modifications d'empilement ou créé plus de ressources que prévu. L'idempotencie garantit qu'une opération ne modifie les ressources qu'une seule fois. Dans le cas d'une requête idempotente, si la demande d'origine a muté avec succès, toutes les tentatives suivantes se terminent avec succès sans effectuer aucune autre mutation. 

**Topics**
+ [L'impuissance dans Amazon ECS](#client-tokens)
+ [Idempotencia pour RunTask](#RunTaskIdempotency)
+ [Exemples](#Run_Task_Idempotency_CLI)
+ [Recommandations de nouvelle tentative pour les demandes idempotentes](#recommended-actions)

## L'impuissance dans Amazon ECS
<a name="client-tokens"></a>

Les actions d'API suivantes prennent éventuellement en charge l'idempotencie à l'aide d'un jeton *client*. Les AWS CLI commandes correspondantes prennent également en charge l'idempotencie à l'aide d'un jeton client. Un jeton client est une chaîne unique distinguant majuscules et minuscules. Pour effectuer une demande d'API idempotente à l'aide de l'une de ces actions, spécifiez un jeton client dans la demande. Vous ne devez pas réutiliser le même jeton client pour d'autres demandes d'API. Si vous réessayez une demande qui s'est terminée avec succès en utilisant le même jeton client et les mêmes paramètres, la nouvelle tentative aboutit sans effectuer aucune autre action. 

**Idempotent à l'aide d'un jeton client**
+ CreateService

  Le jeton client peut comporter jusqu'à 36 caractères ASCII compris entre 33 et 126 (inclus).
+ CreateTaskSet

  Le jeton client peut comporter jusqu'à 36 caractères ASCII compris entre 33 et 126 (inclus).
+ RunTask

  Le jeton client peut comporter jusqu'à 64 caractères ASCII compris entre 33 et 126 (inclus).

**Types d'idempuissance**
+ cluster — Les demandes avec le même jeton dans le même cluster sont idempotentes. Par exemple, ClientToken A ne peut être utilisé qu'une seule fois comme paramètre de requête pour les `RunTask` demandes du cluster X. Les `RunTask` demandes adressées à d'autres clusters sont considérées comme une demande distincte. Par conséquent, vous pouvez utiliser ClientToken A pour une `RunTask` demande pour le cluster Y.

## Idempotencia pour RunTask
<a name="RunTaskIdempotency"></a>

L'`RunTask`API prend en charge l'idempotencie à l'aide d'un jeton client. Un jeton client est une chaîne unique que vous spécifiez lorsque vous effectuez une demande d’API. Si vous réessayez une demande d’API avec le même jeton client et les mêmes paramètres de requête une fois qu’elle est terminée correctement, le résultat de la demande d’origine est renvoyé. Si vous réessayez une demande réussie en utilisant le même jeton client, mais qu'un ou plusieurs paramètres sont différents, autres que la région ou la zone de disponibilité, la nouvelle tentative échoue avec un. `ConflictException` Si vous ne spécifiez pas votre propre jeton client, le AWS SDK génère AWS Command Line Interface automatiquement un jeton client pour la demande afin de s'assurer qu'elle est idempotente. Un jeton client peut être n'importe quelle chaîne contenant jusqu'à 64 caractères ASCII compris entre 33 et 126 (inclus).

La durée de vie (TTL) du jeton `RunTask` client est de 24 heures. Vous ne devez pas réutiliser le même jeton client pour différentes demandes. Le TTL maximal du jeton client est valide pour la valeur la plus faible des deux valeurs suivantes :
+ 24 heures
+ Durée de vie de la ressource plus une heure

  La durée de vie d'une ressource est l'horodatage auquel la tâche a été créée par rapport à l'horodatage auquel le dernier statut () `lastStatus` est passé à. `STOPPED` Lorsque vous lancez plusieurs tâches, la durée de vie de la ressource est égale à la durée de vie de la dernière tâche passée à`STOPPED`. `RunTask`

### RunTask règles et réponses de nouvelle tentative
<a name="retry-response"></a>

Lorsque vous réessayez une demande parce que vous avez reçu une exception 5xx, la nouvelle tentative de réponse réussie inclut normalement toutes les informations que la demande initiale aurait renvoyées. Les tâches qui ont été interrompues pendant moins d'une heure incluent uniquement l'ARN de la tâche, le dernier statut et le statut souhaité.

Voici un exemple d'extrait de réponse à une nouvelle tentative lorsqu'une tâche est en cours d'exécution, une tâche arrêtée et une tâche qui n'a pas pu être lancée.

```
{
  "failures": [
    {
      "arn": "arn:aws:ecs:us-east-1:123456789012:container/4df26bb4-f057-467b-a079-961675296e64",
      "reason": "RESOURCE:MEMORY"
    }
  ],
  "tasks": [
    {
      "desiredStatus": "RUNNING",
      "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/default/fdf2c302-468c-4e55-b884-5331d816e7fb",
      ...
    },
    {
      "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/default/fdf2c302-468c-4e55-b884-5331d819999",
      "lastStatus": "STOPPED",
      ...
     }
  ]
}
```

Les défaillances datant de plus d'une heure incluent uniquement le nombre de tâches ayant échoué.

## Exemples
<a name="Run_Task_Idempotency_CLI"></a>

### AWS CLI exemples de commandes
<a name="cli-example"></a>

Pour rendre une AWS CLI commande idempotente, ajoutez l'`--client-token`option. 

**Exemple : create-service**  
La commande [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html#examples) suivante utilise l'idempotencie car elle inclut un jeton client.

```
aws ecs create-service \
    --cluster MyCluster \
    --service MyService \
    --task-definition MyTaskDefinition:2 \
    --desired-count 2 \
    --launch-type FARGATE \
    --platform-version LATEST \
    --network-configuration "awsvpcConfiguration={subnets=["subnet-12344321"],securityGroups=["sg-12344321"],assignPublicIp="ENABLED"}" \
    --client-token 550e8400-e29b-41d4-a716-44665544
```

**Exemple : create-task-set**  
La commande [create-task-set](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-task-set.html#examples) suivante utilise l'idempotencie car elle inclut un jeton client.

```
aws ecs create-task-set \
    --cluster MyCluster \
    --service MyService \
    --task-definition MyTaskDefinition:2 \
    --network-configuration "awsvpcConfiguration={subnets=["subnet-12344321"],securityGroups=["sg-12344321"]}" \
    --client-token 550e8400-e29b-41d4-a716-44665544
```

**Exemple : run-task**  
La commande [run-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html#examples) suivante utilise l'idempotencie car elle inclut un jeton client.

```
aws ecs run-task \
    --cluster MyCluster \
    --task-definition MyTaskDefinition:2 \
    --client-token 550e8400-e29b-41d4-a716-446655440000
```

### Exemples de demandes d'API
<a name="api-example"></a>

Pour rendre une requête d'API idempotente, ajoutez le `clientToken` paramètre.

**Exemple : CreateService**  
La demande [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)d'API suivante utilise l'idempotencie car elle inclut un jeton client.

```
POST / HTTP/1.1
Host: ecs.us-east-1.amazonaws.com
Accept-Encoding: identity
Content-Length: 87
X-Amz-Target: AmazonEC2ContainerServiceV20141113.CreateService
X-Amz-Date: 20150429T170125Z
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
  "serviceName": "MyService",
  "taskDefinition": "MyTaskDefinition:2",
  "desiredCount": 10,
   "capacityProviderStrategy": [ 
      { 
         "base": "number",
         "capacityProvider": "FARGATE",
         "weight": 1
      }
   ],
   "capacityProviderStrategy": [ 
      { 
         "base": "number",
         "capacityProvider": "FARGATE_SPOT",
         "weight": 1
      }
   ],
   "clientToken": "550e8400-e29b-41d4-a716-44665544"
}
```

**Exemple : CreateTaskSet**  
La demande [CreateTaskSet](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html)d'API suivante utilise l'idempotencie car elle inclut un jeton client.

```
POST / HTTP/1.1
Host: ecs.us-east-1.amazonaws.com
Accept-Encoding: identity
Content-Length: 87
X-Amz-Target: AmazonEC2ContainerServiceV20141113.CreateTaskSet
X-Amz-Date: 20150429T170125Z
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
  "serviceName": "MyService",
  "taskDefinition": "mytask:1",
  "desiredCount": 1,
   "capacityProviderStrategy": [ 
      { 
         "base": "number",
         "capacityProvider": "FARGATE",
         "weight": 1
      }
   ],
   "capacityProviderStrategy": [ 
      { 
         "base": "number",
         "capacityProvider": "FARGATE_SPOT",
         "weight": 1
      }
   ],
    "clientToken": "550e8400-e29b-41d4-a716-44665544" 
}
```

**Exemple : RunTask**  
La demande [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)d'API suivante utilise l'idempotencie car elle inclut un jeton client.

```
POST / HTTP/1.1
Host: ecs.us-east-1.amazonaws.com
Accept-Encoding: identity
Content-Length: 45
X-Amz-Target: AmazonEC2ContainerServiceV20141113.RunTask
X-Amz-Date: 20161121T215740Z
User-Agent: aws-cli/1.11.13 Python/2.7.12 Darwin/16.1.0 botocore/1.4.66
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
  "count": 1,
  "taskDefinition": "mytask:1",
  "clientToken": "550e8400-e29b-41d4-a716-446655440000" 
}
```

## Recommandations de nouvelle tentative pour les demandes idempotentes
<a name="recommended-actions"></a>

La table suivante présente certaines réponses courantes que vous pouvez obtenir pour les demandes d’API idempotentes et fournit des recommandations pour réessayer.


| Réponse | Recommendation | Commentaires | 
| --- | --- | --- | 
| 200 (OK) | Ne pas réessayer | La demande d’origine s’est terminée avec succès. Toutes les tentatives suivantes sont renvoyées avec succès. | 
| Codes de réponse de la série 400 (erreurs [du client](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/errors-overview.html#CommonErrors)) | Ne pas réessayer | La demande présente un problème, parmi les suivants : [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/AmazonECS/latest/developerguide/ECS_Idempotency.html)<br />Si la demande concerne une ressource en train de changer d’état, il est possible que la nouvelle tentative aboutisse. | 
| Codes de réponse de la série 500 ([erreurs du serveur](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/errors-overview.html#api-error-codes-table-server)) | Réessayer | L'erreur est due à un problème AWS côté serveur et est généralement transitoire. Répétez la demande avec une stratégie de réduction appropriée. | 