DynamoDB 錯誤

常見 DynamoDB 錯誤(及修復方法)

開發者最常遇到的 DynamoDB 錯誤——每個都說明其含義、發生原因以及確切的修復方法。

驗證與運算式錯誤 (52)

DynamoDB ValidationException — 原因與修正方法
DynamoDB ValidationException 表示請求在執行前就因格式不正確而被拒絕。以下是常見的觸發原因、該讀哪段訊息,以及各自的修正方式。
"Query condition missed key schema element" — DynamoDB 修正
Query condition missed key schema element 表示你的 KeyConditionExpression 缺少對分割區索引鍵的等值條件。改查 GSI,或改用 Scan。
"The provided key element does not match the schema" — DynamoDB 修正
這個 ValidationException 表示某個索引鍵屬性的名稱或型別與表格的 KeySchema 不符 — 缺少排序索引鍵,或數字被當成字串送出。
"Invalid UpdateExpression" 語法錯誤 — DynamoDB 修復
Invalid UpdateExpression 通常是直接用了保留字,或者缺少 #name 或 :value 預留位置。下面講解如何讀懂這條訊息並修復它。
"ExpressionAttributeValues contains invalid value" — DynamoDB 修復
這個 ValidationException 意味著 ExpressionAttributeValues 中的某個值為空、型別錯誤,或引用了一個你從未定義的預留位置。下面是修復方法。
"Item size has exceeded the maximum allowed size" — DynamoDB 修正
DynamoDB 的項目上限是 400 KB。這個 ValidationException 表示你的項目超過了限制 — 以下說明如何檢查大小並降回限制之內。
DynamoDB ConditionalCheckFailedException — 原因與修正
ConditionalCheckFailedException 表示你的 ConditionExpression 求值為 false,因此 DynamoDB 拒絕了寫入,項目維持不變。
DynamoDB TransactionCanceledException — 解讀取消原因
TransactionCanceledException 表示有一個項目失敗,整筆交易因而回滾。讀 CancellationReasons 陣列,就能知道是哪個項目、為什麼。
DynamoDB SerializationException — 原因與修正
SerializationException 表示你的 JSON 不符合 DynamoDB 的線路格式 — 通常是數字被包成了字串。修正帶型別的 AttributeValue 包裝。
"Supplied AttributeValue is empty" — DynamoDB 修正
這個 ValidationException 表示某個 AttributeValue 沒有帶型別的值 — 空集合、空的索引鍵字串,或未定義的欄位。移除它,或給它一個值。
"One or more parameter values were invalid" — DynamoDB 修正
這個 ValidationException 表示某個值違反了 DynamoDB 規則 — 空集合、空的索引鍵字串,或型別不符。訊息會指名是哪個參數。
"Invalid size for parameter" — DynamoDB 向量寫入修正
當內嵌向量的維度數與向量索引不符時,DynamoDB 會拒絕這次向量寫入。訊息會指名該屬性與兩個大小。
"Search vector contains invalid values" — DynamoDB 修正
SearchVectors 會拒絕被包在 DynamoDB 的 L 型別裡、或帶著非浮點值的查詢向量。這個參數是一個裸 JSON 陣列,不是一個 List 屬性。
"SearchConditionExpression must be provided" — DynamoDB 修正
帶 HASH search-schema 鍵的向量索引要求每一次 SearchVectors 呼叫都釘死恰好一個分割區值。這個過濾在索引建立時就不再是選用的了。
"Query key condition not supported" — DynamoDB 修正
DynamoDB 會拒絕使用索引鍵結構不允許之運算子的 KeyConditionExpression — 分割區索引鍵只接受等值比較。以下是允許的運算子。
"Attribute name is a reserved keyword" — DynamoDB 修正
DynamoDB 會拒絕把 status、name 或 size 這類保留字當成裸露的屬性名稱。請用 ExpressionAttributeNames 佔位符(例如 #status)為它設別名。
"Float types are not supported" — DynamoDB boto3 修正
boto3 會拋出 TypeError "Float types are not supported",因為 DynamoDB 儲存的是精確的十進位數。請透過字串形式把 float 轉成 decimal.Decimal。
"Number overflow" — DynamoDB 數字大小限制修正
DynamoDB 的 N 型別只有 38 位數精度,量級最高約 9.9E+125。超過之後,請把大型 ID 與高精度數值改存成字串。
"The provided expression refers to an attribute that does not exist" — 修正
你的 UpdateExpression 或 ConditionExpression 參照了一條不在項目上的路徑 — 缺少的父層 map、拼字錯誤,或對缺少的屬性做運算。
"Provided list of item keys contains duplicates"(BatchGetItem)— 修復
當某張表的 Keys 列表裡重複了同一個主索引鍵時,DynamoDB 會拒絕這次 BatchGetItem。整個批次都會失敗,所以傳送前先把鍵去重。
"Provided list of item keys contains duplicates"(BatchWriteItem)— 修正
當兩個動作指向同一個主索引鍵時,DynamoDB 會拒絕 BatchWriteItem。一個批次不能對同一項目動兩次,請把重複的合併起來。
"Expression size has exceeded the maximum allowed size"(4 KB)— 修復
DynamoDB 把每個運算式字串限制在 4 KB。超過這個長度的 FilterExpression、ConditionExpression 或 UpdateExpression 都會被拒絕。下面講解如何縮短它。
"Aggregated size of all range keys has exceeded the size limit" — 修復
DynamoDB 把排序索引鍵限制在 1024 位元組,把分割區索引鍵限制在 2048 位元組。下面是這個 ValidationException 背後的位元組計算,以及如何修復你的鍵。
"Filter Expression can only contain non-primary key attributes" — 修復
DynamoDB 會拒絕引用了分割區索引鍵或排序索引鍵的 FilterExpression。鍵屬於 KeyConditionExpression,而非過濾器——下面講解原因,以及如何重構查詢。
DynamoDB BatchGetItem 100 個項目上限 — “Too Many Items” 修復
BatchGetItem 每次呼叫最多支援 100 個項目(且 16 MB)。請求更多,DynamoDB 就會拒絕整個請求。下面講解這條限制,以及分塊讀取的迴圈。
"Too many items requested for the BatchWriteItem call" — 修復
BatchWriteItem 每次呼叫最多接受 25 個 put 或 delete 操作。傳送更多,DynamoDB 就會以 ValidationException 拒絕整個請求。
DynamoDB "Can Not Use Both Expression and Non-Expression Parameters" — 修復
DynamoDB 會拒絕把 KeyConditions 這類舊引數與 KeyConditionExpression 混用的請求。去掉舊引數,改用運算式。
"Local secondary indexes must be specified at table creation" — 修復
本地次要索引只能在建立表時定義,事後無法新增。下面講解這個約束為何存在,以及如何繞過它。
DynamoDB TransactionCanceledException — ConditionalCheckFailed 修正
TransactWriteItems 以 ConditionalCheckFailed 取消,表示某個項目的條件失敗,並回滾了整筆交易。以下說明如何找出它。
"Value provided in ExpressionAttributeNames unused in expressions" — 修復
如果你宣告瞭一個沒有任何運算式引用的 ExpressionAttributeNames 別名,DynamoDB 會拒絕該請求。刪掉它,或者修好漏掉它的運算式。
"Value provided in ExpressionAttributeValues unused in expressions" — 修復
如果你宣告瞭一個沒有任何運算式使用的 ExpressionAttributeValues 預留位置,DynamoDB 會拒絕該請求。刪掉這個孤立的值,或者修好運算式。
DynamoDB S3 匯入失敗 — 格式無效修復
當物件與宣告的 InputFormat 或壓縮方式不匹配,或者項目缺少主索引鍵時,DynamoDB 從 S3 匯入會失敗。下面是修復方法。
"Size of hashkey has exceeded the maximum size limit of 2048 bytes" — 修復
一個 DynamoDB 分割區索引鍵最多 2048 位元組,排序索引鍵最多 1024 位元組。超過任一限制,寫入就會被以 ValidationException 拒絕——下面講解該限制以及如何重新設計鍵。
DynamoDB GSI "Does Not Project" 屬性 — 修正
GSI 只回傳索引鍵屬性加上它的投影,因此向它索取其他屬性就會失敗。改變投影,或改變請求 — 以下說明做法。
"Nesting Levels have exceeded supported limits" — DynamoDB 32 層修復
DynamoDB 把 map 和 list 的巢狀限制在 32 層——更深的文件會丟擲 "Nesting Levels have exceeded supported limits"。下面講解如何扁平化或拆分它們。
"Segment must be less than TotalSegments" — 並行 Scan 修復
並行 Scan 要求 0 ≤ Segment < TotalSegments,且兩者必須一起傳送。給每個工作程序一個從 0 到 TotalSegments − 1 的不同 Segment。
DynamoDB "Cannot Specify AttributesToGet When Select Is COUNT" — 修復
DynamoDB 會拒絕把 Select=COUNT 與 ProjectionExpression 或 AttributesToGet 一起設定的 Query 或 Scan。COUNT 只返回一個數字,所以把投影去掉。
DynamoDB Streams "The ARN provided is invalid" — 修復
DynamoDB Streams 會拒絕格式錯誤的、或像 /stream/latest 這樣的預留位置 stream ARN。請把 DescribeTable 返回的真實 LatestStreamArn 原樣傳入。
"Transaction request cannot include multiple operations on one item" — 修復
當兩個操作指向同一個主索引鍵時,DynamoDB 會拒絕這次 TransactWriteItems 呼叫。合併重複項,或者把其中一個挪到單獨的寫入裡。
DynamoDB TransactWriteItems 100 個動作上限 — 修復
TransactWriteItems 上限是 100 個動作;超出後你會拿到一個關於 TransactItems 長度的 ValidationException。把它拆開,或者改用每次 25 個的 BatchWriteItem。
DynamoDB TTL 屬性必須是數字 — 原因與修正
DynamoDB TTL 只會讓 TTL 屬性是 Unix epoch 秒數 Number 的項目過期。字串、毫秒值或缺少該屬性,都永遠不會過期。
DynamoDB "The expression can not be empty" — 修復
DynamoDB 會拒絕以空字串傳入的運算式引數。沒有內容要傳送時,就完全省略 FilterExpression 或 UpdateExpression。
"ExpressionAttributeNames contains invalid key: Syntax error" — 修復
DynamoDB 會拒絕預留位置鍵破壞了 `#name` 語法的 ExpressionAttributeNames 對映。下面是命名規則,以及真實屬性名該放在哪裡。
"Two document paths overlap with each other"(DynamoDB)— 修正
當 UpdateExpression 同時設定父路徑與巢狀在它裡面的路徑時,DynamoDB 會拒絕它。把子路徑併進父層,或拆成兩次更新。
"The document path provided in the update expression is invalid" — 修正
文件路徑無效,表示你巢狀屬性的父層不存在,或不是一個 map。DynamoDB 不會自動建立它,所以請先把父層建起來。
"An operand in the update expression has an incorrect data type" — 修復
一個更新運算元的型別與儲存的屬性不匹配——對非數字做 ADD、對非列表做 list_append、集合型別不匹配。下面是每種操作的修復方法。
DynamoDB IdempotentParameterMismatchException — 原因與修正
當重試在 10 分鐘冪等視窗內重用 ClientRequestToken 卻帶著不同的負載時,TransactWriteItems 會拒絕它。以下是修正方式。
"Consistent reads are not supported on global secondary indexes" — 修復
用 ConsistentRead true 查詢 GSI 會丟擲 ValidationException。GSI 只提供最終一致讀取。去掉這個標誌,或者改讀基表。
DynamoDB DuplicateItemException(PartiQL INSERT)— 原因與修正
當主索引鍵已存在時,PartiQL INSERT 會以 DuplicateItemException 失敗。它和 PutItem 不同,永遠不會覆寫,請改用 UPDATE 或 PutItem。
"Unexpected from source"(DynamoDB PartiQL)— 修復
當 FROM 裡的表名含有短橫線或其他特殊字元、卻沒有加雙引號時,PartiQL 會丟擲 ValidationException Unexpected from source。一對雙引號就能解決。
boto3 "Parameter validation failed"(ParamValidationError)— 修正
botocore 會在請求抵達 DynamoDB 之前就拋出 ParamValidationError — 通常是 client 與 resource 的型別混用。以下說明如何解讀並修正它。
"The provided starting key is invalid"(DynamoDB)— 修復
DynamoDB 會拒絕一個與你正在分頁的表或索引的鍵模式不精確匹配的 ExclusiveStartKey。把 LastEvaluatedKey 原樣傳回——絕不手工構建它。

輸送量與限流錯誤 (11)

DynamoDB ProvisionedThroughputExceededException — 原因與修正
當讀取或寫入超過資料表或 GSI 的佈建容量時,DynamoDB 會拋出 ProvisionedThroughputExceededException。以下說明耗盡的到底是什麼,以及修正方式。
DynamoDB ThrottlingException — 原因與修復
ThrottlingException 意味著你的請求速率超過了某個限制——常常是控制平面 API 呼叫或帳戶級限制。用指數退避重試並降低呼叫頻率。
DynamoDB ItemCollectionSizeLimitExceededException — 原因與修復
這個錯誤只發生在帶本地次要索引的表上——一個項目集合(所有共享一個分割區索引鍵的項目)超過了 10 GB。下面講解如何修復它。
DynamoDB RequestLimitExceeded — 原因與修正
RequestLimitExceeded 是帳戶層級的速率限制 — 隨需模式預設為每秒 40,000 個讀取與寫入請求單位。請到 Service Quotas 調高它。
DynamoDB TransactionConflictException — 原因與修復
TransactionConflictException 意味著另一個事務正在觸及與你寫入相同的項目。它是瞬時的——用退避重試並讓事務保持小巧。
"Provisioned throughput decreases are limited within a given day" — 修正
DynamoDB 限制每個 UTC 日能調降表格佈建容量的次數。以下是配額計算,以及繞過這個 UpdateTable 錯誤的做法。
DynamoDB On-Demand Throughput Exceeded — 原因與修正
隨需資料表一樣會節流 — 設定的最大輸送量、衝過先前尖峰的兩倍,或資料表配額。以下說明如何提高上限。
DynamoDB 有容量卻被限流 — 熱點分割槽修復
即使表有富餘容量,DynamoDB 也會對單個熱點分割區索引鍵限流,因為每個物理分割槽都有自己 3,000 RCU / 1,000 WCU 的上限。分散鍵,然後重試。下面講解方法。
DynamoDB TransactionInProgressException — 原因與修復
一次 TransactWriteItems 重試複用了仍在執行的那次嘗試的 ClientRequestToken。繼續用退避重試,並把超時調到 5 秒以上。
DynamoDB InternalServerError(HTTP 500)— 該怎麼辦
來自 DynamoDB 的 HTTP 500 是一個瞬時的伺服器端故障——可以安全重試,但一次失敗的寫入仍可能已經被應用。下面是 AWS 記載的重試與冪等處理。
DynamoDB ReplicatedWriteConflictException — 原因與修復
在一張多區域強一致全域性表上,一次寫入因另一個區域正在修改同一項目而被拒絕。它可重試——下面講解如何處理它。

資料表與資源錯誤 (19)

DynamoDB ResourceNotFoundException — 原因與修復
ResourceNotFoundException 意味著表或索引在你呼叫的區域和帳戶中不存在。檢查名稱、區域和憑證。
DynamoDB ResourceInUseException("Table already exists")— 修復
ResourceInUseException 意味著表已經存在,或者仍處於 CREATING、UPDATING 或 DELETING 狀態。動手之前先用 DescribeTable 檢查它的狀態。
DynamoDB LimitExceededException — 原因與修復
LimitExceededException 意味著並行的控制平面呼叫(CreateTable、UpdateTable、DeleteTable)過多,或觸及了某個帳戶限制。下面講解如何保持在它們之下。
"The table does not have the specified index" — 修復
DynamoDB 拒絕了這次呼叫,因為 IndexName 在那張表上不存在、拼寫錯誤,或者 GSI 還沒到 ACTIVE。下面講解如何確認並修復它。
DynamoDB BackupNotFoundException — 原因與修復
BackupNotFoundException 表示 DynamoDB 找不到你傳入的 BackupARN 對應的備份——通常是 ARN 錯誤、備份已刪除或過期,或者區域不對。
DynamoDB ReplicaNotFoundException — 原因與修復
ReplicaNotFoundException 意味著你正在更新的區域副本不是全域性表的一部分——區域錯誤、被移除的副本,或一次競速。下面是修復方法。
"Attempting to modify a GSI that is being created" — 修復
當全域次要索引仍在構建時,DynamoDB 會阻止結構性更改。等 IndexStatus 變為 ACTIVE,或者把你的更改排成先後順序。
DynamoDB ExportTableToPointInTime — PITR 未啟用的修正
ExportTableToPointInTime 需要來源表格啟用時間點還原,否則會拋出 PointInTimeRecoveryUnavailableException。以下是一行指令的修正方式。
DynamoDB 全域性表版本不匹配 — 原因與修復
當副本對不齊時全域性表建立會失敗——非空表、不匹配的鍵模式或 GSI,或者混用 2017 和 2019 的 API 版本。下面是修復方法。
DynamoDB LSI 項目集合 10 GB 限制 — 原因與修復
帶本地次要索引的表把每個項目集合限制在 10 GB——越過它寫入就會失敗。監控 ItemCollectionMetrics 並重新分片。下面講解方法。
DynamoDB Cannot Access Stream — Stream Not Enabled 修復
某個消費者讀取了一張已關閉 Streams 的表上的 DynamoDB stream,或者用了一個陳舊的 ARN。啟用 Streams,並把它指向當前的 LatestStreamArn。
DynamoDB TableAlreadyExistsException / "Table already exists" — 修復
恢復會丟擲 TableAlreadyExistsException;CreateTable 和 ImportTable 則報告 ResourceInUseException。目標名稱已被佔用,換一個新的。
DynamoDB Streams ExpiredIteratorException — 原因與修正
DynamoDB Streams 的 shard iterator 有效期是 15 分鐘。超過後再用,GetRecords 就會拋出 ExpiredIteratorException。以下說明如何在不遺失資料的情況下繼續。
DynamoDB Streams TrimmedDataAccessException — 原因與修復
Stream 記錄保留 24 小時,比這更舊的檢查點會丟擲 TrimmedDataAccessException。從 TRIM_HORIZON 恢復,再從表裡對賬。
DynamoDB BackupInUseException — 原因與修復
DynamoDB BackupInUseException 意味著同一張表上的另一個備份操作仍在執行。等它完成後再重試你的呼叫。
DynamoDB InvalidRestoreTimeException — 原因與修復
InvalidRestoreTimeException 意味著你的 RestoreDateTime 落在表最長 35 天的 PITR 視窗之外。下面講解如何解讀它並選一個有效的恢復時間。
DynamoDB PointInTimeRecoveryUnavailableException — 修復
你試圖對一張從未啟用 PITR 的表做時間點恢復。從現在起啟用連續備份——對於你今天需要的資料,使用一個按需備份。
DynamoDB GlobalTableNotFoundException — 原因與修復
GlobalTableNotFoundException 意味著舊版全域性表 API 看不到你的表——通常是一個透過 UpdateTable 管理的當前 2019.11.21 全域性表。
DynamoDB ReplicaAlreadyExistsException — 原因與修復
你讓 DynamoDB 新增一個已經是全域性表一部分的副本區域。先描述複製組,並讓副本管理具有冪等性。

身分驗證與設定錯誤 (13)

"not authorized to perform dynamodb:..." — AccessDeniedException 修復
DynamoDB AccessDeniedException:你的 IAM 身份沒有許可權執行訊息中指明的操作。下面講解如何解讀它並修復 IAM 策略。
"ConfigError: Missing region in config" — DynamoDB 修復
AWS SDK 無法確定要把 DynamoDB 請求發往哪個區域。在用戶端上、透過 AWS_REGION,或在你的 AWS 配置中設定區域。下面是各個選項。
"The security token included in the request is invalid" — DynamoDB 修復
這個 UnrecognizedClientException 意味著你的 AWS 憑證錯誤、過期,或者根本沒有被讀到。下面講解如何查清是哪一種並修好它。
DynamoDB IncompleteSignatureException — 原因與修復
IncompleteSignatureException 意味著 SigV4 簽名格式有誤——通常是手寫的簽名,或者某個代理改寫了 Authorization 請求頭。
"The security token included in the request is expired" — DynamoDB 修復
ExpiredTokenException 意味著你的臨時 STS、SSO 或擔任角色憑證超時了。重新執行 aws sso login,並清掉陳舊的 AWS_SESSION_TOKEN。
"Unable to locate credentials"(boto3 / DynamoDB)— 修復
當 boto3 的 provider 鏈裡沒有任何東西提供 AWS 憑證時——沒有環境變數、沒有 profile、沒有例項角色——它會丟擲 NoCredentialsError。下面是修復方法。
"The request signature we calculated does not match" — 修復
SigV4 簽名失敗時,DynamoDB 返回的是 InvalidSignatureException,而不是 SignatureDoesNotMatch。通常是金鑰不對,或者你機器上的時鐘偏移。
"Credential should be scoped to a valid region" — DynamoDB 修復
這個 SigV4 簽名錯誤意味著你憑證作用域中的區域與你實際呼叫的區域不匹配。下面講解如何對齊用戶端和端點的區域。
"InvalidSignatureException: Signature expired" — DynamoDB 修復
DynamoDB 會拒絕簽名時間戳偏離 AWS 伺服器時間超過五分鐘的請求。幾乎總是用戶端時鐘偏移——下面講解如何修正它。
"Missing Authentication Token" — DynamoDB 錯誤修復
來自 DynamoDB 的 MissingAuthenticationTokenException 意味著 endpoint URL 或路徑錯誤,又或者請求根本沒有簽名。下面是各自的修復方法。
"Could not load credentials from any providers"(DynamoDB)— 修復
當 AWS SDK for JavaScript v3 的整條憑證鏈都空手而歸時,它會丟擲 CredentialsProviderError。下面講解這條鏈如何解析,以及每一種修復方法。
"The SSO session associated with this profile has expired" — 修復
過期的 IAM Identity Center token 會讓 AWS CLI 和 SDK 對 DynamoDB 的呼叫失敗。執行 aws sso login;如果還不夠,就清掉陳舊的 ~/.aws/sso/cache。
"The config profile could not be found" — AWS CLI 與 boto3 的修復
當指定的 profile 在 ~/.aws/config 中不存在時,AWS CLI 和 boto3 會丟擲 ProfileNotFound。三個常見成因,以及各自的修復方法。

DynamoDB Local 與安裝設定錯誤 (8)

"Unable to start DynamoDB Local process" — 修復
DynamoDB Local 啟動失敗——通常是缺少/不相容的 Java 執行時、埠已被佔用,或安裝路徑錯誤。下面講解各自的修復方法。
"Could not connect to DynamoDB Local"(ECONNREFUSED)— 修復
對 DynamoDB Local 的 ECONNREFUSED 意味著沒有任何東西在監聽。通常是模擬器未執行、埠錯誤,或者 SDK 訪問的是真實 AWS。
"Could not connect to the endpoint URL"(DynamoDB)— 修復
當 botocore 連不上 DynamoDB 時會丟擲 EndpointConnectionError。通常是 endpoint URL 錯誤、DynamoDB Local 未執行,或者區域不對。
DynamoDB Local "Address already in use"(埠 8000)— 修復
當某個東西已經佔用了埠 8000 時,DynamoDB Local 會丟擲 java.net.BindException Address already in use。下面講解如何找到該程序、釋放埠,或在其他埠上啟動 Local。
DynamoDB Local "Failed to load native library sqlite4java" — 修復
DynamoDB Local 在啟動時因 sqlite4java 的 UnsatisfiedLinkError 而崩潰——java.library.path 錯誤或 Apple Silicon 架構不匹配。下面是兩者的修復方法。
"Unable to execute HTTP request"(DynamoDB, Java SDK)— 修復
當 AWS SDK for Java 連不上 endpoint 時,會以 Unable to execute HTTP request 失敗——DynamoDB Local 未執行、埠錯誤,或 Docker 網路問題。
"Cannot do operations on a non-existent table"(DynamoDB Local)— 修復
DynamoDB Local 給每一對憑證和區域各自一個資料庫,所以你建立的表可能看不見。用 -sharedDb 啟動 Local,讓它們共用一個。
DynamoDB Local UnsupportedClassVersionError — 修復
DynamoDB Local 2.6.0 及更新版本需要 Java 17 或更高。在較舊的 JRE 上,JVM 會拒絕載入它。請安裝一個當前的 JDK,或改用 Docker 映象執行。

這些訊息如何驗證

文件是對自身實作的轉述,而轉述會走樣。這些頁面上引用的每一則錯誤訊息,都是實際對真正的 AWS DynamoDB 服務發出會失敗的呼叫,再逐字記錄回傳內容而來 — 不是從 AWS 文件抄來的。

不是 DynamoDB Local。這個模擬器很方便,但 AWS 從未保證它描述錯誤的措辭會和服務一致 — 而我們實測時,它有超過一半的訊息並不相同。凡是差異值得一提之處,頁面會同時列出兩者。

唯一經過編輯的,是描述你的請求而非描述錯誤的部分:資料表名稱,以及服務原樣回傳的那份 payload 副本。只要有頁面引用了服務從未回傳過的字串,就會有一項測試讓建置失敗 — 它之所以存在,是因為我們自己有個頁面引用了一則憑空杜撰的訊息長達數月,直到有人真的去執行那段程式碼。

橫跨 14 種例外類型的 58 則訊息:55 則擷取自實際服務、2 則在請求送出前就被 SDK 拒絕,另有 1 則是以 DynamoDB Local 本身的措辭為主題。其中 6 則附有說明,指出模擬器如何描述同一個失敗。

實際服務
Amazon DynamoDB (live service, us-east-1)
模擬器(供對照)
DynamoDB Local (amazon/dynamodb-local)
JavaScript SDK
@aws-sdk/client-dynamodb 3.1096.0
Python SDK
boto3 1.43.81 on Python 3.14.7
Node.js
v24.20.0

更多 DynamoDB 資源

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

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。