Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Penanganan kesalahan dengan DynamoDB
Bagian ini menjelaskan kesalahan runtime dan cara menanganinya. Kode dan pesan kesalahan yang khusus untuk Amazon DynamoDB juga dijelaskan dalam bagian ini. Untuk daftar kesalahan umum yang berlaku untuk semua AWS layanan, lihat Manajemen Akses
Topik
Komponen kesalahan
Ketika program Anda mengirimkan permintaan, DynamoDB mencoba untuk memprosesnya. Jika permintaan berhasil, DynamoDB mengembalikan HTTP kode status sukses 200 OK
(), bersama dengan hasil dari operasi yang diminta.
Jika permintaan tidak berhasil, DynamoDB menampilkan kesalahan. Setiap kesalahan memiliki tiga komponen:
-
Kode HTTP status (seperti
400
). -
Nama pengecualian (seperti
ResourceNotFoundException
). -
Pesan kesalahan (seperti
Requested resource not found: Table:
).tablename
not found
AWS SDKsBerhati-hatilah menyebarkan kesalahan ke aplikasi Anda sehingga Anda dapat mengambil tindakan yang tepat. Misalnya, dalam program Java, Anda bisa menulis logika try-catch
untuk menangani ResourceNotFoundException
.
Jika Anda tidak menggunakan AWS SDK, Anda perlu mengurai konten respons tingkat rendah dari DynamoDB. Berikut ini adalah contoh respons tersebut.
HTTP/1.1 400 Bad Request x-amzn-RequestId: LDM6CJP8RMQ1FHKSC1RBVJFPNVV4KQNSO5AEMF66Q9ASUAAJG Content-Type: application/x-amz-json-1.0 Content-Length: 240 Date: Thu, 15 Mar 2012 23:56:23 GMT {"__type":"com.amazonaws.dynamodb.v20120810#ResourceNotFoundException", "message":"Requested resource not found: Table:
tablename
not found"}
Kesalahan transaksional
Untuk informasi tentang kesalahan transaksional, lihat Penanganan konflik transaksi di DynamoDB
Pesan dan kode kesalahan
Berikut ini adalah daftar pengecualian yang dikembalikan oleh DynamoDB, dikelompokkan berdasarkan kode status. HTTP Jika Boleh diulang? adalah Ya, Anda dapat mengirimkan permintaan yang sama lagi. Jika Boleh diulang? adalah Tidak, Anda harus memperbaiki masalah di sisi klien sebelum mengirimkan permintaan baru.
HTTPkode status 400
Kode HTTP 400
status menunjukkan masalah dengan permintaan Anda, seperti kegagalan otentikasi, parameter yang diperlukan hilang, atau melebihi throughput yang disediakan tabel. Anda harus memperbaiki masalah di aplikasi Anda sebelum mengirimkan permintaan lagi.
- AccessDeniedException
-
Pesan: Akses ditolak.
Klien salah menandatangani permintaan. Jika Anda menggunakan AWS SDK, permintaan ditandatangani untuk Anda secara otomatis; jika tidak, buka proses penandatanganan Signature versi 4 di Referensi Umum AWS.
Ingin mengulang? Tidak
- ConditionalCheckFailedException
-
Pesan: Permintaan bersyarat gagal.
Anda menentukan syarat yang dievaluasi ke false. Misalnya, Anda mungkin telah mencoba melakukan pembaruan bersyarat pada suatu item, tetapi nilai atribut sebenarnya tidak cocok dengan nilai yang diharapkan dalam kondisi yang dihadapi.
Boleh diulang? Tidak
- IncompleteSignatureException
-
Pesan: Tanda tangan permintaan tidak sesuai dengan standar AWS .
Tanda tangan permintaan tidak menyertakan semua komponen yang diperlukan. Jika Anda menggunakan AWS SDK, permintaan ditandatangani untuk Anda secara otomatis; jika tidak, buka proses penandatanganan Versi Tanda Tangan 4 di Referensi Umum AWS.
Ingin mengulang? Tidak
- ItemCollectionSizeLimitExceededException
-
Pesan: Ukuran koleksi terlampaui.
Untuk tabel dengan indeks sekunder lokal, sekelompok item dengan nilai kunci partisi yang sama telah melampaui batas ukuran maksimum 10 GB. Untuk informasi selengkapnya tentang kumpulan item, lihat Kumpulan item dalam Indeks Sekunder Lokal.
Boleh diulang? Ya
- LimitExceededException
-
Pesan: Terlalu banyak operasi untuk pelanggan tertentu.
Terlalu banyak operasi bidang kontrol secara bersamaan. Jumlah kumulatif tabel dan indeks dalam
CREATING
,DELETING
, atau keadaanUPDATING
tidak boleh melebihi 500.Boleh diulang? Ya
- MissingAuthenticationTokenException
-
Pesan: Permintaan harus berisi ID Kunci Akses AWS yang valid (terdaftar).
Permintaan tidak menyertakan header otorisasi yang diperlukan, atau formatnya salah. Lihat DynamoDB tingkat rendah API.
Boleh diulang? Tidak
- ProvisionedThroughputExceededException
-
Pesan: Anda melampaui throughput maksimum yang diizinkan untuk sebuah tabel atau untuk satu atau beberapa indeks sekunder global. Untuk melihat metrik kinerja untuk throughput yang disediakan vs. throughput yang dikonsumsi, buka konsol Amazon. CloudWatch
Contoh: Tingkat permintaan Anda terlalu tinggi. AWS SDKsUntuk DynamoDB secara otomatis mencoba kembali permintaan yang menerima pengecualian ini. Permintaan Anda akhirnya berhasil, kecuali antrean percobaan ulang Anda terlalu besar untuk diselesaikan. Kurangi frekuensi permintaan menggunakan Percobaan ulang kesalahan dan penundaan eksponensial.
Boleh diulang? Ya
- RequestLimitExceeded
-
Pesan: Throughput melebihi batas throughput saat ini untuk akun Anda. Untuk meminta peningkatan batas, hubungi AWS Support di https://aws.amazon.com/support
. Contoh: Tingkat permintaan sesuai permintaan melebihi throughput akun yang diizinkan dan tabel tidak dapat diskalakan lebih lanjut.
Boleh diulang? Ya
- ResourceInUseException
-
Pesan: Sumber daya yang Anda coba ubah sedang digunakan.
Contoh: Anda mencoba untuk membuat ulang tabel yang sudah ada, atau menghapus tabel yang saat ini dalam status
CREATING
.Boleh diulang? Tidak
- ResourceNotFoundException
-
Pesan: Sumber daya yang diminta tidak ditemukan.
Contoh: Tabel yang diminta tidak ada, atau terlalu dini dalam status
CREATING
.Boleh diulang? Tidak
- ThrottlingException
-
Pesan: Tingkat permintaan melebihi throughput yang diizinkan.
Pengecualian ini dikembalikan sebagai AmazonServiceException respons dengan kode EXCEPTION status THROTTLING _. Pengecualian ini mungkin dikembalikan jika Anda melakukan API operasi pesawat kontrol terlalu cepat.
Untuk tabel yang menggunakan mode sesuai permintaan, pengecualian ini mungkin dikembalikan untuk API operasi pesawat data apa pun jika tingkat permintaan Anda terlalu tinggi. Untuk mempelajari lebih lanjut tentang penskalaan sesuai permintaan, lihat. Throughput awal dan properti penskalaan
Boleh diulang? Ya
- UnrecognizedClientException
-
Pesan: ID Kunci Akses atau token keamanan tidak valid.
Tanda tangan permintaan tidak benar. Penyebab yang paling mungkin adalah ID kunci AWS akses atau kunci rahasia yang tidak valid.
Boleh diulang? Ya
- ValidationException
-
Pesan: Bervariasi, tergantung pada kesalahan tertentu yang dialami
Kesalahan ini dapat terjadi karena beberapa alasan, seperti parameter yang diperlukan tidak ada, nilai di luar rentang, atau jenis data tidak cocok. kesalahan berisi detail tentang bagian tertentu dari permintaan yang menyebabkan kesalahan.
Boleh diulang? Tidak
HTTPkode status 5xx
Kode HTTP 5xx
status menunjukkan masalah yang harus diselesaikan oleh AWS. Kemungkinan ini adalah kesalahan sementara, sehingga Anda dapat mencoba lagi permintaan Anda hingga berhasil. Jika tidak, masuk ke Service Health Dashboard AWS
Untuk informasi selengkapnya, lihat Bagaimana cara mengatasi kesalahan HTTP 5xx di Amazon DynamoDB?
- InternalServerError (HTTP 500)
-
DynamoDB tidak dapat memproses permintaan Anda.
Boleh diulang? Ya
catatan
Anda mungkin mengalami kesalahan server internal saat menggunakan item. Ini diduga terjadi selama masa aktif tabel. Setiap permintaan yang gagal dapat segera dicoba kembali.
Ketika Anda menerima kode status 500 pada operasi tulis, operasi tersebut mungkin berhasil atau gagal. Jika operasi tulis adalah permintaan
TransactWriteItem
, maka boleh saja mencoba ulang operasi tersebut. Jika operasi tulis adalah permintaan tulis item tunggal sepertiPutItem
,UpdateItem
, atauDeleteItem
, maka aplikasi Anda akan membaca status item sebelum mencoba kembali operasi tersebut, dan/atau menggunakan Contoh ekspresi kondisi DynamoDB CLI untuk memastikan item tetap dalam status yang benar setelah mencoba ulang, terlepas dari apakah operasi sebelumnya berhasil atau gagal. Jika idempotensi adalah persyaratan untuk operasi tulis, gunakan TransactWriteItem, yang mendukung permintaan idempoten dengan menentukanClientRequestToken
secara otomatis untuk membedakan beberapa upaya untuk melakukan tindakan yang sama.
- ServiceUnavailable (HTTP 503)
-
DynamoDB saat ini tidak tersedia. (Ini harus merupakan status sementara.)
Boleh diulang? Ya
Penanganan kesalahan dalam aplikasi Anda
Agar aplikasi Anda berjalan lancar, Anda perlu menambahkan logika untuk menangkap dan merespons kesalahan. Pendekatan umum termasuk menggunakan blok try-catch
atau pernyataan if-then
.
AWS SDKsMelakukan percobaan ulang dan pengecekan kesalahan mereka sendiri. Jika Anda menemukan kesalahan saat menggunakan salah satu AWS SDKs, kode kesalahan dan deskripsi dapat membantu Anda memecahkan masalah itu.
Anda juga akan melihat Request ID
dalam respons. Ini Request
ID
dapat membantu jika Anda perlu bekerja dengan AWS Support untuk mendiagnosis suatu masalah.
Percobaan ulang kesalahan dan penundaan eksponensial
Banyak komponen pada jaringan, seperti DNS server, switch, load balancer, dan lainnya, dapat menghasilkan kesalahan di mana saja dalam kehidupan permintaan yang diberikan. Teknik biasa untuk menangani respons kesalahan ini dalam lingkungan jaringan adalah dengan menerapkan percobaan ulang dalam aplikasi klien. Teknik ini meningkatkan keandalan aplikasi.
Masing-masing AWS SDK mengimplementasikan logika coba lagi secara otomatis. Anda dapat mengubah parameter percobaan ulang sesuai kebutuhan Anda. Misalnya, pertimbangkan aplikasi Java yang memerlukan strategi gagal cepat (fail fast), dengan tidak memperbolehkan percobaan ulang jika terjadi kesalahan. Dengan AWS SDK for Java, Anda dapat menggunakan ClientConfiguration
kelas dan memberikan maxErrorRetry
nilai 0
untuk mematikan percobaan ulang. Untuk informasi selengkapnya, lihat AWS SDK dokumentasi untuk bahasa pemrograman Anda.
Jika Anda tidak menggunakan AWS SDK, Anda harus mencoba kembali permintaan asli yang menerima kesalahan server (5xx). Namun, kesalahan klien (4xx, selain ThrottlingException
atau ProvisionedThroughputExceededException
) menunjukkan bahwa Anda perlu merevisi permintaan itu sendiri untuk memperbaiki masalah sebelum melakukan percobaan ulang.
Selain percobaan ulang sederhana, masing-masing AWS SDK mengimplementasikan algoritma backoff eksponensial untuk kontrol aliran yang lebih baik. Konsep di balik penundaan eksponensial adalah menggunakan waktu tunggu yang lebih lama di antara percobaan ulang untuk respon kesalahan berturut-turut. Sebagai contoh, hinga 50 milidetik sebelum percobaan ulang pertama, hingga 100 milidetik sebelum percobaan ulang kedua, hingga 200 milidetik sebelum percobaan ulang ketiga, dan seterusnya. Namun, setelah satu menit, jika permintaan tidak berhasil, masalahnya mungkin pada ukuran permintaan yang melebihi throughput yang disediakan, dan bukan pada tingkat permintaan. Tetapkan jumlah maksimum percobaan ulang untuk berhenti sekitar satu menit. Jika permintaan tidak berhasil, selidiki opsi throughput yang disediakan.
catatan
AWS SDKsMengimplementasikan logika coba ulang otomatis dan backoff eksponensial.
Kebanyakan algoritma penundaan eksponensial menggunakan jitter (penundaan acak) untuk mencegah tabrakan berturut-turut. Karena Anda tidak berusaha menghindari tabrakan seperti itu dalam kasus ini, Anda tidak perlu menggunakan nomor acak ini. Namun, jika Anda menggunakan klien secara bersamaan, jitter dapat membantu permintaan Anda berhasil lebih cepat. Untuk informasi selengkapnya, lihat postingan blog tentang Penundaan eksponensial dan jitter
Operasi batch dan penanganan kesalahan
DynamoDB API tingkat rendah mendukung operasi batch untuk membaca dan menulis. BatchGetItem
membaca item dari satu atau beberapa tabel, dan BatchWriteItem
menempatkan atau menghapus item dalam satu atau beberapa tabel. Operasi batch ini diimplementasikan sebagai pembungkus di sekitar operasi DynamoDB non-batch lainnya. Dengan kata lain, BatchGetItem
menginvokasi GetItem
sekali untuk setiap item dalam batch. Demikian pula, BatchWriteItem
menginvokasi DeleteItem
atau PutItem
, jika sesuai, untuk setiap item dalam batch.
Operasi batch dapat menoleransi kegagalan permintaan individual dalam batch. Misalnya, pertimbangkan BatchGetItem
untuk membaca lima item. Meskipun beberapa permintaan GetItem
yang mendasarinya gagal, ini tidak menyebabkan seluruh operasi BatchGetItem
gagal. Namun, jika kelima operasi baca gagal, maka seluruh BatchGetItem
akan gagal pula.
Operasi batch mengembalikan informasi tentang masing-masing permintaan yang gagal sehingga Anda dapat mendiagnosis masalah dan mencoba kembali operasi tersebut. Untuk BatchGetItem
, tabel dan kunci primer yang dimaksud dikembalikan dalam nilai UnprocessedKeys
respons. Untuk BatchWriteItem
, informasi serupa dikembalikan dalam UnprocessedItems
.
Kemungkinan besar penyebab gagalnya baca atau tulis adalah throttling. Untuk BatchGetItem
, satu atau beberapa tabel dalam permintaan batch tidak memiliki kapasitas baca yang memadai untuk mendukung operasi. Untuk BatchWriteItem
, satu atau beberapa tabel tidak memiliki kapasitas tulis yang memadai.
Jika DynamoDB mengembalikan item yang belum diproses, Anda harus mencoba ulang operasi batch pada item tersebut. Namun, kami sangat merekomendasikan agar Anda menggunakan algoritma penundaan eksponensial. Jika Anda segera mencoba ulang operasi batch, permintaan baca atau tulis yang mendasarinya masih bisa gagal karena throttling pada masing-masing tabel. Jika Anda menunda operasi batch menggunakan penundaan eksponensial, masing-masing permintaan dalam batch kemungkinan besar akan berhasil.