View a markdown version of this page

Garantir l'idempuissance - Amazon Elastic Container Service

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

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.

L'impuissance dans Amazon ECS

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

L'RunTaskAPI 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

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

AWS CLI exemples de commandes

Pour rendre une AWS CLI commande idempotente, ajoutez l'--client-tokenoption.

Exemple : create-service

La commande create-service 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 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 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

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

Exemple : CreateService

La demande CreateServiced'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 CreateTaskSetd'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 RunTaskd'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" }

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)

Ne pas réessayer

La demande présente un problème, parmi les suivants :

  • Elle inclut un paramètre ou une combinaison de paramètres invalide.

  • Elle utilise une action ou une ressource pour laquelle vous n’avez pas les autorisations nécessaires.

  • Elle utilise une ressource qui est en train de changer d’état.

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)

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.