View a markdown version of this page

Memastikan idempotensi - Amazon Elastic Container Service

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

Memastikan idempotensi

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.

Idempotensi di Amazon ECS

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

RunTaskAPI 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

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

AWS CLI contoh perintah

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

Contoh: create-service

Perintah create-service 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 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 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

Untuk membuat permintaan API idempoten, tambahkan parameter. clientToken

Contoh: CreateService

Permintaan CreateServiceAPI 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 CreateTaskSetAPI 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 RunTaskAPI 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" }

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)

Jangan coba lagi

Ada masalah dengan permintaan, dari antara yang berikut:

  • Ini termasuk parameter atau kombinasi parameter yang tidak valid.

  • Ini menggunakan tindakan atau sumber daya yang Anda tidak memiliki izin.

  • Ini menggunakan sumber daya yang sedang dalam proses mengubah keadaan.

Jika permintaan melibatkan sumber daya yang sedang dalam proses mengubah status, mencoba kembali permintaan mungkin berhasil.

Kode respons 500 seri (kesalahan server)

Coba lagi

Kesalahan ini disebabkan oleh masalah AWS sisi server dan umumnya bersifat sementara. Ulangi permintaan dengan strategi back-off yang sesuai.