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.
Rubriques
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
RunTaskdemandes du cluster X. LesRunTaskdemandes adressées à d'autres clusters sont considérées comme une demande distincte. Par conséquent, vous pouvez utiliser ClientToken A pour uneRunTaskdemande 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 ()
lastStatusest passé à.STOPPEDLorsque 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" }
Recommandations de nouvelle tentative pour les demandes idempotentes
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 :
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. |