AWS CLI ile DynamoDB TransactWriteItems
aws dynamodb transact-write-items, 100'e kadar yazmayı tek bir ya hep ya hiç işleminde gruplar — ya her eylem işlenir ya da hiçbiri işlenmez. Eylemler --transact-items içinde, her biri isteğe bağlı bir koşula sahip Put, Update, Delete ve ConditionCheck'i karıştıran bir JSON dizisi olarak yer alır.
Code
aws dynamodb transact-write-items \
--transact-items '[
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}},
"UpdateExpression": "SET #upd0 = #upd0 - :one",
"ConditionExpression": "#upd0 >= :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}}
}
},
{
"Update": {
"TableName": "Music",
"Key": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}},
"UpdateExpression": "SET #upd0 = if_not_exists(#upd0, :zero) + :one",
"ExpressionAttributeNames": {"#upd0": "Awards"},
"ExpressionAttributeValues": {":one": {"N": "1"}, ":zero": {"N": "0"}}
}
}
]'Başarı durumunda komut hiçbir şey yazdırmaz ve 0 ile çıkar. Herhangi bir koşul başarısız olursa işlemin tamamı iptal olur:
An error occurred (TransactionCanceledException) when calling the TransactWriteItems
operation: Transaction cancelled, please refer cancellation reasons for specific
reasons [ConditionalCheckFailed, None]Açıklama
--transact-items— en fazla 100Put/Update/Delete/ConditionCheckeylemi, toplamda 4 MB, DynamoDB JSON'daki değerler. Eylemler tablolara yayılabilir (aynı hesap + Bölge), ancak hiçbir iki eylem aynı öğeyi hedefleyemez — bu tek başına işlemi iptal eder.- İptal nedenleri hata iletisinde eylem sırasıyla yer alır — kodlar
ConditionalCheckFailed,TransactionConflict(başka bir işlem ilerleme sırasında bir öğeye dokundu — yeniden çalıştırmak güvenli),ProvisionedThroughputExceededveValidationErroriçerir;None, masum eylemleri işaretler. Burada ilk güncellemenin koşulu (Awards >= 1) başarısız oldu; ikinci eylem sorunsuzdu. ConditionCheck— işlemin değiştirmediği bir öğe üzerinde bir koşul öne sürer ve başarısız olursa işlemin tamamını veto eder.--client-request-token— yeniden çalıştırmaları 10 dakika boyunca idempotent yapmak için sabit bir belirteç geçirin; bir zaman aşımından sonra tam komutu yeniden çalıştırmak böylece yazmaları iki kez uygulayamaz.- Maliyet — işlemsel yazmalar, düz yazmaların kabaca 2× WCU'sunu faturalandırır (hazırla + işle). Tek bir öğede atomiklik için bir koşullu yazma daha ucuz araçtır.
- İpucu: eylem dizisini bir dosyada tutun ve
--transact-items file://transaction.jsonolarak geçirin.
Görsel olarak yapın
Her eylemin içindeki koşul ve güncelleme ifadeleri zahmetli kısımdır — DynamoDB Expression Builder bunları ad/değer eşlemeleriyle bir araya getirir ve çalıştırmaya hazır komutları kopyalar.
Öğeleri düzenlemek ve üretilen ifadeleri bir grafik arayüzde (GUI) gözden geçirmek için — DynoTable'ı indirin.
İlgili örnekler
- Node.js'te DynamoDB TransactWriteItems — AWS SDK v3 ile aynı işlem.
- Python'da DynamoDB TransactWriteItems — boto3 ile aynı işlem.
- AWS CLI ile DynamoDB BatchWriteItem — atomikliğe ihtiyaç duymadığınızda toplu yazmalar.
- DynamoDB işlemleri — yalıtım, idempotentlik ve işlemlerin ne zaman buna değdiği.
- DynamoDB TransactionCanceledException — çözümlenmiş her iptal-nedeni kodu.
- "Too many actions in a TransactWriteItems call" — 100-eylem ve 4 MB işlem sınırları.
- "Transaction request cannot include multiple operations on one item" — işlem başına öğe başına bir eylem.
References
- TransactWriteItems — Amazon DynamoDB API Reference
- transact-write-items — AWS CLI Command Reference
- Amazon DynamoDB transactions: how it works — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.