

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memastikan idempotensi
<a name="ECS_Idempotency"></a>

Saat Anda melakukan operasi mutasi, Anda mungkin melihat pengecualian karena batas waktu atau masalah server yang terjadi setelah sumber daya dimutasi. Hal ini dapat menyulitkan untuk menentukan apakah mutasi terjadi, dan dapat menyebabkan beberapa percobaan ulang. Namun, jika operasi asli dan percobaan ulang berikutnya benar-benar melakukan mutasi, Anda mungkin telah menerapkan perubahan susun atau membuat lebih banyak sumber daya daripada yang Anda inginkan. Idempotensi memastikan bahwa operasi mengubah sumber daya tidak lebih dari satu kali. Dengan permintaan idempoten, jika permintaan asli berhasil bermutasi, percobaan ulang berikutnya berhasil diselesaikan tanpa melakukan mutasi lebih lanjut. 

**Topics**
+ [Idempotensi di Amazon ECS](#client-tokens)
+ [Idempotensi untuk RunTask](#RunTaskIdempotency)
+ [Contoh](#Run_Task_Idempotency_CLI)
+ [Coba lagi rekomendasi untuk permintaan idempoten](#recommended-actions)

## Idempotensi di Amazon ECS
<a name="client-tokens"></a>

*Tindakan API berikut secara opsional mendukung idempotensi menggunakan token klien.* AWS CLI Perintah yang sesuai juga mendukung idempotensi menggunakan token klien. Token klien adalah string unik yang peka huruf besar/kecil. Untuk membuat permintaan API idempoten menggunakan salah satu tindakan ini, tentukan token klien dalam permintaan. Anda tidak boleh menggunakan kembali token klien yang sama untuk permintaan API lainnya. Jika Anda mencoba lagi permintaan yang berhasil diselesaikan menggunakan token klien yang sama dan parameter yang sama, percobaan ulang berhasil tanpa melakukan tindakan lebih lanjut. 

**Idempoten menggunakan token klien**
+ CreateService

  Token klien dapat mencapai 36 karakter ASCII dalam kisaran 33-126 (inklusif).
+ CreateTaskSet

  Token klien dapat mencapai 36 karakter ASCII dalam kisaran 33-126 (inklusif).
+ RunTask

  Token klien dapat mencapai 64 karakter ASCII dalam kisaran 33-126 (inklusif).

**Jenis idempotensi**
+ cluster — Permintaan dengan token yang sama di cluster yang sama adalah idempoten. Misalnya, ClientToken A hanya dapat digunakan sebagai parameter permintaan satu kali untuk `RunTask` permintaan di Cluster X. `RunTask` permintaan ke cluster lain dianggap sebagai permintaan terpisah. Oleh karena itu, Anda dapat menggunakan ClientToken A untuk `RunTask` permintaan cluster Y.

## Idempotensi untuk RunTask
<a name="RunTaskIdempotency"></a>

`RunTask`API mendukung idempotensi menggunakan token klien. Token klien adalah string unik yang Anda tentukan saat membuat permintaan API. Jika Anda mencoba ulang permintaan API dengan token klien yang sama dan parameter permintaan yang sama setelah berhasil diselesaikan, hasil permintaan awal akan dikembalikan. Jika Anda mencoba kembali permintaan yang berhasil menggunakan token klien yang sama, tetapi satu atau lebih parameter berbeda, selain Wilayah atau Zona Ketersediaan, percobaan ulang gagal dengan. `ConflictException` Jika Anda tidak menentukan token klien Anda sendiri, AWS SDK dan AWS Command Line Interface secara otomatis menghasilkan token klien untuk permintaan untuk memastikan bahwa itu idempoten. Token klien dapat berupa string apa pun yang mencakup hingga 64 karakter ASCII dalam kisaran 33-126 (inklusif).

Waktu untuk hidup (TTL) untuk token `RunTask` klien adalah 24 jam. Anda tidak boleh menggunakan kembali token klien yang sama untuk permintaan yang berbeda. Token klien TTL maksimum berlaku untuk salah satu dari dua nilai berikut yang lebih rendah:
+ 24 jam
+ Masa pakai sumber daya ditambah satu jam

  Masa pakai sumber daya adalah stempel waktu di mana tugas dibuat ke stempel waktu di mana status terakhir () `lastStatus` dialihkan. `STOPPED` Saat Anda menggunakan `RunTask` untuk meluncurkan lebih dari satu tugas, masa pakai sumber daya sama dengan masa pakai tugas terakhir yang dialihkan. `STOPPED`

### RunTask coba lagi aturan dan tanggapan
<a name="retry-response"></a>

Saat Anda mencoba lagi permintaan karena Anda menerima pengecualian 5xx, respons yang berhasil dicoba ulang biasanya mencakup semua informasi yang akan dikembalikan oleh permintaan asli. Tugas yang telah dihentikan selama kurang dari satu jam hanya mencakup tugas ARN, status terakhir, dan status yang diinginkan.

Berikut ini adalah contoh cuplikan respons dari percobaan ulang ketika ada satu tugas yang berjalan, satu tugas yang dihentikan, dan satu tugas yang gagal diluncurkan.

```
{
  "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",
      ...
     }
  ]
}
```

Kegagalan yang berusia lebih dari satu jam hanya mencakup jumlah tugas yang gagal.

## Contoh
<a name="Run_Task_Idempotency_CLI"></a>

### AWS CLI contoh perintah
<a name="cli-example"></a>

Untuk membuat AWS CLI perintah idempoten, tambahkan opsi. `--client-token` 

**Contoh: create-service**  
Perintah [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html#examples) berikut menggunakan idempotency karena menyertakan token klien.

```
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
```

**Contoh: buat-tugas-set**  
Perintah [create-task-set](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-task-set.html#examples) berikut menggunakan idempotency karena menyertakan token klien.

```
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
```

**Contoh: run-task**  
Perintah [run-task](https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html#examples) berikut menggunakan idempotency karena menyertakan token klien.

```
aws ecs run-task \
    --cluster MyCluster \
    --task-definition MyTaskDefinition:2 \
    --client-token 550e8400-e29b-41d4-a716-446655440000
```

### Contoh permintaan API
<a name="api-example"></a>

Untuk membuat permintaan API idempoten, tambahkan parameter. `clientToken`

**Contoh: CreateService**  
Permintaan [CreateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html)API berikut menggunakan idempotensi karena menyertakan token klien.

```
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"
}
```

**Contoh: CreateTaskSet**  
Permintaan [CreateTaskSet](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html)API berikut menggunakan idempotensi karena menyertakan token klien.

```
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" 
}
```

**Contoh: RunTask**  
Permintaan [RunTask](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html)API berikut menggunakan idempotensi karena menyertakan token klien.

```
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" 
}
```

## Coba lagi rekomendasi untuk permintaan idempoten
<a name="recommended-actions"></a>

Tabel berikut menunjukkan beberapa tanggapan umum yang mungkin Anda dapatkan untuk permintaan API idempoten, dan memberikan rekomendasi coba ulang.


| Respons | Rekomendasi | Komentar | 
| --- | --- | --- | 
| 200 (OK) | Jangan coba lagi | Permintaan asli berhasil diselesaikan. Setiap percobaan ulang berikutnya berhasil kembali. | 
| Kode respons 400 seri (kesalahan [klien](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/errors-overview.html#CommonErrors)) | Jangan coba lagi | Ada masalah dengan permintaan, dari antara yang berikut: [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/ECS_Idempotency.html)<br />Jika permintaan melibatkan sumber daya yang sedang dalam proses mengubah status, mencoba kembali permintaan mungkin berhasil. | 
| Kode respons 500 seri (kesalahan [server](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/errors-overview.html#api-error-codes-table-server)) | Coba lagi | Kesalahan ini disebabkan oleh masalah AWS sisi server dan umumnya bersifat sementara. Ulangi permintaan dengan strategi back-off yang sesuai. | 