Penulisan Bersyarat DynamoDB dengan AWS CLI
Sebuah penulisan bersyarat melampirkan --condition-expression ke put-item, update-item, atau delete-item: DynamoDB mengevaluasinya terhadap item saat ini dan menerapkan penulisan hanya jika kondisi terpenuhi — secara atomik, tanpa race read-modify-write. Ini adalah primitif optimistic-locking DynamoDB. Contoh ini menjaga sebuah update dengan pemeriksaan versi.
Code
aws dynamodb update-item \
--table-name 'Music' \
--key '{"Artist":{"S":"Arturo Sandoval"},"SongTitle":{"S":"Cubano Chant"}}' \
--update-expression 'SET #upd0 = :updValue0, #version = :newVersion' \
--condition-expression 'attribute_exists(#cond0) AND #version = :expectedVersion' \
--expression-attribute-names '{"#upd0":"Genre","#version":"Version","#cond0":"Artist"}' \
--expression-attribute-values '{":updValue0":{"S":"Latin Jazz"},":expectedVersion":{"N":"7"},":newVersion":{"N":"8"}}'Pada keberhasilan perintah tidak mencetak apa pun dan keluar 0. Jika penulis lain lebih dulu tiba, kondisinya gagal:
An error occurred (ConditionalCheckFailedException) when calling the UpdateItem operation:
The conditional request failedPenjelasan
--condition-expression— diperiksa terhadap item tersimpan secara atomik bersama penulisan. Fungsi yang tersedia:attribute_exists,attribute_not_exists,attribute_type,contains,begins_with,size, plus komparator (=,<>,<,>,<=,>=,BETWEEN,IN) danAND/OR/NOT.- Dua idiom andalan:
attribute_exists(#key)pada update = "hanya update, tidak pernah membuat". Tanpanya,update-itempada key yang hilang diam-diam membuat item (bug upsert tak sengaja).attribute_not_exists(#key)pada put = "hanya membuat, tidak pernah menimpa" — ditunjukkan di halaman PutItem.
- Optimistic locking — baca item (versi 7), lalu tulis dengan
#version = :expectedVersionsambil menaikkan ke 8. Dua penulis serentak tidak bisa keduanya menang; yang kalah keluar non-zero denganConditionalCheckFailedException, membaca ulang, dan mencoba lagi pada versi baru. --return-values-on-condition-check-failure ALL_OLD— meminta DynamoDB melampirkan item saat ini ke kegagalan (nilai validALL_OLD|NONE; tidak ada kapasitas baca yang dikonsumsi). SDK memunculkan item itu pada exception; output error default CLI hanya mencetak pesannya, jadi skrip biasanya membaca ulang denganget-itemsetelah kegagalan.- Penulisan bersyarat yang gagal tetap menagih upaya penulisan — jangan gunakan kondisi sebagai penyelidik keberadaan gratis.
Lakukan secara visual
Condition expression persis apa yang dibangun DynamoDB Expression Builder — pilih fungsinya, dapatkan expression + map name/value sebagai perintah CLI yang siap dijalankan.
Untuk mengedit item dengan expression yang dihasilkan dan bisa ditinjau alih-alih placeholder yang dikutip-shell — unduh DynoTable.
Contoh terkait
- Penulisan bersyarat DynamoDB di Node.js — optimistic lock yang sama dengan AWS SDK v3.
- Penulisan bersyarat DynamoDB di Python — optimistic lock yang sama dengan boto3.
- DynamoDB PutItem dengan AWS CLI — put
attribute_not_existshanya-membuat. - Condition expression DynamoDB — setiap fungsi, dengan polanya.
- Memahami ReturnValues — apa yang diberikan setiap opsi return.
- DynamoDB ConditionalCheckFailedException — kapan pemeriksaan yang gagal itu diharapkan, dan cara menanganinya dengan murah.
References
- UpdateItem — Amazon DynamoDB API Reference
- update-item — AWS CLI Command Reference
- Condition expressions — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.