使用 AWS CLI 執行 DynamoDB TransactWriteItems
aws dynamodb transact-write-items 把多達 100 個寫入組成一個全有或全無的操作 — 要嘛每個動作都提交,要嘛都不。動作放在 --transact-items 中,是一個混合 Put、Update、Delete 與 ConditionCheck 的 JSON 陣列,每個都可帶一個選用的條件。
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"}}
}
}
]'成功時,指令不印出任何內容並以 0 結束。若任何條件失敗,整個交易會取消:
An error occurred (TransactionCanceledException) when calling the TransactWriteItems
operation: Transaction cancelled, please refer cancellation reasons for specific
reasons [ConditionalCheckFailed, None]說明
--transact-items— 多達 100 個Put/Update/Delete/ConditionCheck動作,合計 4 MB,值為 DynamoDB JSON。動作可橫跨表格(同一帳戶 + Region),但沒有兩個動作可鎖定同一個項目 — 光是這樣就會取消交易。- 取消原因會以動作順序附在錯誤訊息中 — code 包括
ConditionalCheckFailed、TransactionConflict(另一個交易在過程中觸及某個項目 — 可安全重跑)、ProvisionedThroughputExceeded與ValidationError;None標記無辜的動作。這裡第一個 update 的條件(Awards >= 1)失敗了;第二個動作沒問題。 ConditionCheck— 對交易不修改的項目斷言一個條件,若失敗則否決整個交易。--client-request-token— 傳入一個固定的 token 讓重跑在 10 分鐘內具冪等性;逾時後再以完全相同的指令重跑,也無法把寫入套用兩次。- 成本 — 交易式寫入的計費約為一般寫入 WCU 的 2×(準備 + 提交)。若只需要單一項目的 atomic 性,條件式寫入 是較便宜的工具。
- 提示:把動作陣列放進檔案並以
--transact-items file://transaction.json傳入。
改用視覺化操作
每個動作裡的條件與 update 運算式是繁瑣的部分 — DynamoDB Expression Builder 會連同 name/value map 一起組裝它們並複製可直接執行的指令。
想在 GUI 中編輯項目並審視產生的運算式 — 下載 DynoTable。
相關範例
- 在 Node.js 中使用 DynamoDB TransactWriteItems — 以 AWS SDK v3 執行相同的交易。
- 在 Python 中使用 DynamoDB TransactWriteItems — 以 boto3 執行相同的交易。
- 使用 AWS CLI 執行 DynamoDB BatchWriteItem — 不需 atomic 性時的大量寫入。
- DynamoDB 交易 — 隔離、冪等性,以及何時交易值得。
- DynamoDB TransactionCanceledException — 每個取消原因 code 的解碼。
- "Too many actions in a TransactWriteItems call" — 100 個動作與 4 MB 的交易上限。
- "Transaction request cannot include multiple operations on one item" — 每個交易中每個項目只能有一個動作。
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
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。