DynamoDB ReplicaNotFoundException

TL;DR — 你試圖更新或移除的區域副本不是這個全域性表的一部分。通常是區域名稱錯誤、一個已經被移除的副本,或者一個與另一個進行中的副本更新競速的呼叫。用 DescribeTable 確認當前的副本,然後指向一個存在的。

這是什麼意思

ReplicaNotFoundException: The specified replica is no longer part of the global table.

全域性表操作(UpdateGlobalTable,或帶 ReplicaUpdates/DeleteUpdateTable)按 AWS 區域來定位副本。這個 HTTP 400 意味著你指定的區域當前不是全域性表的一個副本。它屬於用戶端錯誤,在你指向一個真實的副本之前不可重試

為什麼會發生

  • 區域程式碼錯誤——副本在 us-east-1 時用了 us-east-2,或者一個從未被新增的區域。
  • 副本已經被移除——針對一個先前更新已經從表中刪除的區域做刪除。
  • 重疊的副本變更——UpdateTable 在表仍因先前變更處於 UPDATING 時無法執行,而 AWS 建議為每個副本的新增/移除發起一個單獨的請求;競速的自動化可能指向一個另一個任務已經移除的副本。
  • 把主表與副本混淆——對一個不託管該表任何副本的區域進行操作。
  • 版本混淆——混用舊版 2017.11.29(GlobalTable)和當前 2019.11.21(表上副本)的 API。

如何修正

  1. 列出當前的副本及其狀態:
    aws dynamodb describe-table --table-name <Table> \
      --query "Table.Replicas[].{Region:RegionName,Status:ReplicaStatus}"
  2. 指向一個確實在列表中的區域——精確複製區域程式碼。
  3. 一次更改一個副本。 在下一個更新之前,等表返回 ACTIVE(且先前的新增/移除完成)。
  4. 在移除一個已經沒了的副本? 無事可做——對一個刪除而言,把 ReplicaNotFoundException 當作已經滿足。
  5. 使用當前(2019.11.21)API——透過 UpdateTableReplicaUpdates 管理副本,而不是舊版全域性表 API。

在跨區域管理表?DynoTable 桌面應用會顯示每張表的副本及其狀態,讓你能對一個確實屬於全域性表的區域採取行動。

先在 DynoTable 中檢查

在執行UpdateTable``ReplicaUpdates之前,開啟DynoTable中的表並檢查表統計資訊/副本列表中實際存在的區域。使用 ⌘P 切換設定檔案,以便你檢視擁有全域性表的帳戶。當副本區域消失時,DynoTable 只是忽略它 - 沒有陳舊的主控台卡可供單擊。根據實時列表交叉檢查區域程式碼,然後從 IaC 或 CLI 重新發出控制平面更改。對於跨副本的日常讀取,請為每個區域保留一個 DynoTable 設定檔案,並使用 ⌘1⌘9 進行切換,而不是猜測 ARN。 query builder 保留在活動設定檔案區域中,因此你永遠不會將 us-east-1 Query 與 us-west-2 表名稱混合。

來源

相關錯誤

參考資料

最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。

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

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

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