Transaction request cannot include multiple operations on one item
TL;DR — 同じ TransactWriteItems リクエスト内の2つのアクションが、同じアイテム(同じプライマリキー)を対象としています。DynamoDB はトランザクション内のすべてのアイテムが一意であることを要求するため、いずれかを実行する前に呼び出し全体を拒否します。重複するアクションを1つにまとめるか、一方を別の書き込みに移してください。
意味
ValidationException: Transaction request cannot include multiple operations on one itemTransactWriteItems リクエストは、すべてがコミットするかすべてが失敗する最大 100 個のアクション(Put、Update、Delete、ConditionCheck)をグループ化します。その API の厳格なルールは、2つのアクションが同じアイテムを対象にできない ことです。DynamoDB はアイテムをその完全なプライマリキーで識別し、各キーは最大 1 回しか現れることができません。これは HTTP 400 の ValidationException で、トランザクションが実行される前に捕捉され、そのままでは リトライ不可 です。
発生する理由
- 同じキーへの
ConditionCheckと書き込み — アイテムに条件をアサートし、同じトランザクションでUpdate/Deleteもしようとした。代わりに条件を書き込みのConditionExpressionに折り込みます。 - 同じキーへの2つの書き込み — 例: 同じアイテムへの
PutとUpdate。多くの場合キーで重複排除しないループから。 - 重複キーを持つ生成されたバッチ — ORM やマッピング層が同じパーティション + ソートキーを2回出力した。
- 異なると 思っている テーブルにまたがる2つの異なるアクションでの同じキー — アイテムは一意に
{table, PK, SK}です。同じテーブル内での繰り返しがこれを引き起こします。
修正方法
- トランザクションを組み立てる前に プライマリキーで重複排除します — 各
{PK, SK}は 1 回現れることができます。 ConditionCheckを、それがガードする書き込みにマージします: 別のConditionCheckアクションを追加するのではなく、そのアイテム自身のConditionExpressionにアサーションを置きます。- 2つの変更を1つの
Updateに結合します — 2つのアクションの代わりに、単一のUpdateExpression(SET/ADD/REMOVE)を使います。 - 操作が本当に1つのアクションとして表現できない場合は、避けられない複数ステップのロジックを 別々のトランザクションや書き込みに分割します。
複数アイテムのトランザクションを手作業で組み立てるところに重複キーが忍び込みます。DynoTable デスクトップアプリ は各アイテムをそのプライマリキーで表示するため、リクエストを送る前に繰り返された対象が明白になります。
まず DynoTable で確認
複数アイテムのトランザクションを組む前に、対象のキーを DynoTable で一覧しましょう — ⌘K でテーブルを開き、アクションのリストの中で各プライマリキーが一意であることを確認します。ステージング(⌘S)を使えば、規模を広げる前に単一アイテムのトランザクションを試せます。
条件チェックを書き込みにまとめるには、式ビルダーを使いましょう。プロファイルの切り替えは ⌘P です。AWS に接続するとインストールを参照してください。
出典
- TransactWriteItems — Amazon DynamoDB API Reference (2026-07-13 時点で検証)
- Amazon DynamoDB Transactions: How it works (2026-07-13 時点で検証)
関連するエラー
- TransactionCanceledException — トランザクションは解析されたが、条件や競合がコミット時にキャンセルした。
- Too many items in a TransactWriteItems call — 1つのトランザクションに 100 を超えるアクション。
- ValidationException (overview)
- Code example: TransactWriteItems in Node.js — 適応可能な有効な複数アイテムトランザクション。
- 学習: DynamoDB のトランザクション
参考資料
- TransactWriteItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。