

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
<a name="ECS_Idempotency"></a>

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. 

**Topics**
+ [Idempotenza in Amazon ECS](#client-tokens)
+ [Idempotenza per RunTask](#RunTaskIdempotency)
+ [Esempi](#Run_Task_Idempotency_CLI)
+ [Riprova i consigli per le richieste idempotenti](#recommended-actions)

## Idempotenza in Amazon ECS
<a name="client-tokens"></a>

*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
<a name="RunTaskIdempotency"></a>

L'`RunTask`API 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
<a name="retry-response"></a>

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
<a name="Run_Task_Idempotency_CLI"></a>

### AWS CLI esempi di comandi
<a name="cli-example"></a>

Per rendere un AWS CLI comando idempotente, aggiungete l'opzione. `--client-token` 

**Esempio: create-service**  
Il seguente comando [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html#examples) 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](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-task-set.html#examples) 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](https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html#examples) 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
<a name="api-example"></a>

Per rendere idempotente una richiesta API, aggiungete il parametro. `clientToken`

**Esempio: CreateService**  
La seguente richiesta [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)API 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 [CreateTaskSet](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html)API 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 [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)API 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
<a name="recommended-actions"></a>

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)](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/errors-overview.html#CommonErrors) | Non riprovare | La richiesta presenta uno dei problemi seguenti: [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/AmazonECS/latest/developerguide/ECS_Idempotency.html)<br />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)](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/errors-overview.html#api-error-codes-table-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. | 