使用 AWS CLI 執行 DynamoDB TransactWriteItems

aws dynamodb transact-write-items 把多達 100 個寫入組成一個全有或全無的操作 — 要嘛每個動作都提交,要嘛都不。動作放在 --transact-items 中,是一個混合 PutUpdateDeleteConditionCheck 的 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 包括 ConditionalCheckFailedTransactionConflict(另一個交易在過程中觸及某個項目 — 可安全重跑)、ProvisionedThroughputExceededValidationErrorNone 標記無辜的動作。這裡第一個 update 的條件(Awards >= 1)失敗了;第二個動作沒問題。
  • ConditionCheck — 對交易修改的項目斷言一個條件,若失敗則否決整個交易。
  • --client-request-token — 傳入一個固定的 token 讓重跑在 10 分鐘內具冪等性;逾時後再以完全相同的指令重跑,也無法把寫入套用兩次。
  • 成本 — 交易式寫入的計費約為一般寫入 WCU 的 (準備 + 提交)。若只需要單一項目的 atomic 性,條件式寫入 是較便宜的工具。
  • 提示:把動作陣列放進檔案並以 --transact-items file://transaction.json 傳入。

改用視覺化操作

每個動作裡的條件與 update 運算式是繁瑣的部分 — DynamoDB Expression Builder 會連同 name/value map 一起組裝它們並複製可直接執行的指令。

想在 GUI 中編輯項目並審視產生的運算式 — 下載 DynoTable

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。