View a markdown version of this page

Garantire l'idempotenza - Amazon Elastic Container Service

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.

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 RunTask le richieste nel Cluster X. Le RunTask richieste ad altri cluster sono considerate una richiesta separata. Pertanto, è possibile utilizzare ClientToken A per una RunTask richiesta 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. STOPPED Quando si utilizza RunTask per 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" }

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.

Codici di risposta della serie 400 (errori del client)

Non riprovare

La richiesta presenta uno dei problemi seguenti:

  • Include un parametro o una combinazione di parametri non validi.

  • Utilizza un'azione o una risorsa per la quale non si dispone delle autorizzazioni.

  • Utilizza una risorsa che sta cambiando stato.

Se la richiesta riguarda una risorsa che sta cambiando stato, un nuovo tentativo potrebbe avere esito positivo.

Codici di risposta della serie 500 (errori del server)

Riprova

L'errore è causato da un problema AWS sul lato server ed è generalmente temporaneo. Ripeti la richiesta con una strategia di back-off appropriata.