Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Garantire l'idempotenza
Quando esegui un'operazione di mutazione, potresti visualizzare un'eccezione a causa di timeout o problemi del server che si verificano dopo la modifica delle risorse. Ciò può rendere difficile determinare se si è verificata la mutazione e può portare a più tentativi. Tuttavia, se l'operazione originale e i tentativi successivi hanno effettivamente eseguito le mutazioni, è possibile che abbiate applicato modifiche di sovrapposizione o creato più risorse del previsto. L'idempotenza garantisce che un'operazione modifichi le risorse non più di una volta. Con una richiesta idempotente, se la richiesta originale è stata modificata correttamente, tutti i tentativi successivi vengono completati correttamente senza eseguire ulteriori mutazioni.
Argomenti
Idempotenza in Amazon ECS
Le seguenti azioni API supportano opzionalmente l'idempotenza utilizzando un token client. I AWS CLI comandi corrispondenti supportano anche l'idempotenza utilizzando un token client. Un token client è una stringa unica con distinzione tra maiuscole e minuscole. Per effettuare una richiesta API idempotente utilizzando una di queste azioni, specifica un token client nella richiesta. Non dovresti riutilizzare lo stesso token client per altre richieste API. Se riprovi una richiesta completata correttamente utilizzando lo stesso token client e gli stessi parametri, il nuovo tentativo ha esito positivo senza eseguire ulteriori azioni.
Idempotente utilizzando un token client
-
CreateService
Il token client può contenere fino a 36 caratteri ASCII nell'intervallo da 33 a 126 (inclusi).
-
CreateTaskSet
Il token client può contenere fino a 36 caratteri ASCII nell'intervallo da 33 a 126 (inclusi).
RunTask
Il token client può contenere fino a 64 caratteri ASCII nell'intervallo da 33 a 126 (inclusi).
Tipi di idempotenza
-
cluster: le richieste con lo stesso token nello stesso cluster sono idempotenti. Ad esempio, ClientToken A può essere utilizzato come parametro di richiesta solo una volta per
RunTaskle richieste nel Cluster X. LeRunTaskrichieste ad altri cluster sono considerate una richiesta separata. Pertanto, è possibile utilizzare ClientToken A per unaRunTaskrichiesta per il cluster Y.
Idempotenza per RunTask
L'RunTaskAPI supporta l'idempotenza utilizzando un token client. Un token client è una stringa univoca che specifichi quando effettui una richiesta API. Se tenti di nuovo di eseguire una richiesta API con lo stesso token client e gli stessi parametri della richiesta dopo che è stata completata correttamente, viene restituito il risultato della richiesta originale. Se riprovi una richiesta con successo utilizzando lo stesso token client, ma uno o più parametri sono diversi, diversi dalla regione o dalla zona di disponibilità, il nuovo tentativo fallisce e restituisce un. ConflictException Se non specificate il vostro token client, inserite l' AWS SDK e generate AWS Command Line Interface automaticamente un token client per la richiesta per assicurarvi che sia idempotente. Un token client può essere qualsiasi stringa che include fino a 64 caratteri ASCII nell'intervallo da 33 a 126 (inclusi).
Il time to live (TTL) per il token RunTask client è di 24 ore. Non dovresti riutilizzare lo stesso token client per richieste diverse. Il TTL massimo del token client è valido per qualsiasi dei due valori seguenti sia inferiore:
-
24 ore
-
Durata della risorsa più un'ora
La durata di una risorsa è il timestamp in cui l'attività è stata creata rispetto al timestamp in cui è passato l'ultimo status ()
lastStatus.STOPPEDQuando si utilizzaRunTaskper avviare più di un'attività, la durata della risorsa è uguale alla durata dell'ultima attività a cui è stata effettuata la transizione.STOPPED
RunTask Riprova le regole e le risposte
Quando riprovi una richiesta perché hai ricevuto un'eccezione 5xx, la nuova risposta riuscita include in genere tutte le informazioni che la richiesta originale avrebbe restituito. Le attività che sono state interrotte per meno di un'ora includono solo l'ARN dell'attività, lo stato dell'ultimo e lo stato desiderato.
Di seguito è riportato un frammento di esempio della risposta di un nuovo tentativo quando c'è un'attività in esecuzione, un'attività interrotta e un'attività che non è stata avviata.
{ "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", ... } ] }
Gli errori che risalgono a più di un'ora includono solo il numero di attività non riuscite.
Esempi
AWS CLI esempi di comandi
Per rendere un AWS CLI comando idempotente, aggiungete l'opzione. --client-token
Esempio: create-service
Il seguente comando create-service utilizza l'idempotenza in quanto include un token 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
Esempio: create-task-set
Il seguente comando create-task-set utilizza l'idempotenza in quanto include un token 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
Esempio: run-task
Il seguente comando run-task utilizza l'idempotenza in quanto include un token client.
aws ecs run-task \ --cluster MyCluster \ --task-definition MyTaskDefinition:2 \ --client-token 550e8400-e29b-41d4-a716-446655440000
Esempi di richieste API
Per rendere idempotente una richiesta API, aggiungete il parametro. clientToken
Esempio: CreateService
La seguente richiesta CreateServiceAPI utilizza l'idempotenza in quanto include un token 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" }
Esempio: CreateTaskSet
La seguente richiesta CreateTaskSetAPI utilizza l'idempotenza in quanto include un token 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" }
Esempio: RunTask
La seguente richiesta RunTaskAPI utilizza l'idempotenza in quanto include un token 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" }
Riprova i consigli per le richieste idempotenti
La tabella seguente mostra alcune risposte comuni che si potrebbero ricevere per richieste API idempotenti e fornisce consigli per effettuare nuovi tentativi.
| Risposta | Raccomandazione | Commenti |
|---|---|---|
|
200 (OK) |
Non riprovare |
La richiesta originale è stata completata con successo. Qualsiasi tentativo successivo ottiene esito positivo. |
|
Non riprovare |
La richiesta presenta uno dei problemi seguenti:
Se la richiesta riguarda una risorsa che sta cambiando stato, un nuovo tentativo potrebbe avere esito positivo. |
|
|
Riprova |
L'errore è causato da un problema AWS sul lato server ed è generalmente temporaneo. Ripeti la richiesta con una strategia di back-off appropriata. |