DynamoDB ReplicaNotFoundException
TL;DR — 你試圖更新或移除的區域副本不是這個全域性表的一部分。通常是區域名稱錯誤、一個已經被移除的副本,或者一個與另一個進行中的副本更新競速的呼叫。用 DescribeTable 確認當前的副本,然後指向一個存在的。
這是什麼意思
ReplicaNotFoundException: The specified replica is no longer part of the global table.全域性表操作(UpdateGlobalTable,或帶 ReplicaUpdates/Delete 的 UpdateTable)按 AWS 區域來定位副本。這個 HTTP 400 意味著你指定的區域當前不是全域性表的一個副本。它屬於用戶端錯誤,在你指向一個真實的副本之前不可重試。
為什麼會發生
- 區域程式碼錯誤——副本在
us-east-1時用了us-east-2,或者一個從未被新增的區域。 - 副本已經被移除——針對一個先前更新已經從表中刪除的區域做刪除。
- 重疊的副本變更——
UpdateTable在表仍因先前變更處於UPDATING時無法執行,而 AWS 建議為每個副本的新增/移除發起一個單獨的請求;競速的自動化可能指向一個另一個任務已經移除的副本。 - 把主表與副本混淆——對一個不託管該表任何副本的區域進行操作。
- 版本混淆——混用舊版 2017.11.29(
GlobalTable)和當前 2019.11.21(表上副本)的 API。
如何修正
- 列出當前的副本及其狀態:
aws dynamodb describe-table --table-name <Table> \ --query "Table.Replicas[].{Region:RegionName,Status:ReplicaStatus}" - 指向一個確實在列表中的區域——精確複製區域程式碼。
- 一次更改一個副本。 在下一個更新之前,等表返回
ACTIVE(且先前的新增/移除完成)。 - 在移除一個已經沒了的副本? 無事可做——對一個刪除而言,把
ReplicaNotFoundException當作已經滿足。 - 使用當前(2019.11.21)API——透過
UpdateTable的ReplicaUpdates管理副本,而不是舊版全域性表 API。
在跨區域管理表?DynoTable 桌面應用會顯示每張表的副本及其狀態,讓你能對一個確實屬於全域性表的區域採取行動。
先在 DynoTable 中檢查
在執行UpdateTable``ReplicaUpdates之前,開啟DynoTable中的表並檢查表統計資訊/副本列表中實際存在的區域。使用 ⌘P 切換設定檔案,以便你檢視擁有全域性表的帳戶。當副本區域消失時,DynoTable 只是忽略它 - 沒有陳舊的主控台卡可供單擊。根據實時列表交叉檢查區域程式碼,然後從 IaC 或 CLI 重新發出控制平面更改。對於跨副本的日常讀取,請為每個區域保留一個 DynoTable 設定檔案,並使用 ⌘1–⌘9 進行切換,而不是猜測 ARN。 query builder 保留在活動設定檔案區域中,因此你永遠不會將 us-east-1 Query 與 us-west-2 表名稱混合。
來源
- UpdateGlobalTable — Amazon DynamoDB API Reference(2026-07-13 驗證)
- Global tables — Amazon DynamoDB Developer Guide(2026-07-13 驗證)
相關錯誤
- ResourceNotFoundException——在該區域/帳戶中找不到表本身。
- ResourceInUseException——一個副本變更與表的當前狀態衝突。
- 學習:Global tables
參考資料
- UpdateGlobalTable — Amazon DynamoDB API Reference
- UpdateTable — Amazon DynamoDB API Reference
- Global tables — Amazon DynamoDB Developer Guide
- Determining the global table version you are using — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。