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 failed

Penjelasan

  • --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) dan AND/OR/NOT.
  • Dua idiom andalan:
    • attribute_exists(#key) pada update = "hanya update, tidak pernah membuat". Tanpanya, update-item pada 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 = :expectedVersion sambil menaikkan ke 8. Dua penulis serentak tidak bisa keduanya menang; yang kalah keluar non-zero dengan ConditionalCheckFailedException, 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 valid ALL_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 dengan get-item setelah 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

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.