為什麼我的 TransactWriteItems API 呼叫在 Amazon DynamoDB 中會失敗?

1 分的閱讀內容
0

我的 TransactWriteItems API 呼叫失敗,我想知道問題的根本原因。

解決方案

TransactWriteItems 請求失敗或被 Amazon DynamoDB 拒絕的原因有很多。

不滿足其中一個條件運算式中的條件

如果不滿足您為 TransactWriteItems 請求中的一項操作設定的條件,則所有操作都會失敗。TransactWriteItems 是一種同步寫入操作,一次最多可發起 25 個動作請求。因此,所有動作請求要麼成功,要麼失敗。

如果您遇到此問題,則會收到與此類似的錯誤訊息:

"message": "Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None, None, None] (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: TransactionCanceledException;..."

若要解決此問題,請確認您為請求設定的所有條件得到滿足。

TransactWriteItems 請求中的資料表位於不同的區域或帳戶中

TransactWriteItems 請求允許您處理不同資料表中的項目。但是,您不能處理位於不同區域或帳戶中的資料表。確認您使用的資料表與您發出 TransactWriteItems 請求的帳戶位於同一區域。

TransactWriteItems 操作中的多個動作處理同一個項目

當 TransactWriteItems 操作中的多個動作處理同一個項目時,請求將失敗並顯示與此類似的訊息:

"Transaction request cannot include multiple operations on one item" (交易請求不能包含對一個項目進行的多項動作)

因此,如果 TransactWriteItems 嘗試對同一項目執行 ConditionCheckPut 操作,則請求將失敗。您可以使用 Amazon CloudWatch 中 DynamoDB 資料表的 TransactionConflict 指標來監控這樣的 TransactionConflict 異常。

沒有足夠的已佈建容量來完成交易

與任何其他操作一樣,當您叫用 TransactWriteItems 操作時,DynamoDB 資料表可能會受到限制。如需解決此問題的詳細資訊,請參閱為什麼我的隨需 Amazon DynamoDB 資料表受到限制?為什麼我的 Amazon DynamoDB 資料表受到限制?

發生 ValidationError 驗證錯誤

如果項目大小大於 400 KB 或本機次要索引 (LSI) 太大,則會發生 ValidationError 驗證錯誤。對交易進行的變更也會導致驗證錯誤。這意味著輸入無法滿足 DynamoDB 服務指定的一個或多個約束。根據不滿足的約束,驗證錯誤會伴隨以下訊息之一:

  • 一個或多個參數值無效。
  • 更新運算式嘗試將次要索引鍵更新為超出所允許限制的大小。
  • 更新資料運算式嘗試將次要索引鍵更新為不受支援的類型。
  • 更新運算式中的運算元具有不正確的資料類型。
  • 要更新的項目超過了允許的最大大小。
  • 您嘗試儲存大於支援範圍的數字或發生數字溢位。
  • 要更新的屬性的類型不相符。
  • 巢狀層級已超過支援的限制。
  • 更新資料運算式中提供的文件路徑對更新無效。
  • 提供的資料運算式參考項目中不存在的屬性。

DynamoDB 限制可以儲存在資料表中的每個項目的大小。如果您的應用程式需要在一個項目中儲存大小超過限制的資料,請壓縮一個或多個較大的屬性。或者,將一個項目分解為多個項目,並透過排序索引鍵進行索引。您還可以將項目作為物件儲存在 Amazon Simple Storage Service (Amazon S3) 中。然後,將相應 Amazon S3 物件識別符儲存在 DynamoDB 項目中。如需詳細資訊,請參閱儲存大型項目和屬性的最佳實務

一個交易中項目的總大小超過 4 MB

TransactWriteItems 操作不能超過 4 MB。這是一個硬性限制。如需詳細資訊,請參閱 DynamoDB 交易

發生使用者錯誤

導致使用者錯誤 (如無效的資料格式) 的原因有多種。例如,由於 TransactWriteItems 操作找不到基礎 DynamoDB 資料表或索引,您會遇到 ResourceNotFoundException 的 4xx 錯誤。DynamoDB 資料表或索引不處於 ACTIVE (作用中) 狀態也會導致此錯誤。

注意:當您使用適用於 Java 的 AWS SDK 時,DynamoDB 會在 CancellationReasons 屬性中列出取消原因。此屬性未針對其他語言設定。交易取消原因依請求項目的順序列出。如果一個項目沒有錯誤,它會列出一個 NONE 碼和空訊息。如需詳細資訊,請參閱 TransactWriteItems


相關資訊

常見錯誤

AWS 官方
AWS 官方已更新 2 年前