Penanganan kesalahan dengan DynamoDB - Amazon DynamoDB

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

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 (seperti400).

  • 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 keadaan UPDATING 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 melihat apakah ada masalah operasional dengan layanan ini.

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 seperti PutItem, UpdateItem, atau DeleteItem, 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 menentukan ClientRequestToken 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. BatchGetItemmembaca 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.