ReplicaAlreadyExistsException

TL;DR — 你正在新增的區域已經在全域性表的複製組中。新增不是冪等的,因此在第一次成功之後,同一請求的重新執行(重試、重放的部署、漂移的 IaC)會失敗。先描述表,只建立不在其中的副本——或者把這個異常當作"已經完成"並繼續。

這是什麼意思

ReplicaAlreadyExistsException: The specified replica is already part of
the global table.

副本管理是一個帶硬性前置條件的控制平面變更:Create 要求區域不存在,Delete 要求區域存在。在 eu-west-1 已經複製該表時請求建立 eu-west-1 違反了那個前置條件——你想要的狀態已經存在。

為什麼會發生

  • 一個重試或重放的置備步驟——第一次嘗試成功了(也許在超時掩蓋了成功之後),而重試重新新增了同一個區域。
  • 基礎設施即程式碼漂移——副本在主控台中被手動新增了,然後 IaC 流水線試圖再次新增它。
  • 兩條自動化路徑競速——並行部署或區域擴充套件任務都提交了同一個副本建立。

如何修正

  1. 在變更之前檢查複製組:

    aws dynamodb describe-table --table-name orders \
      --query 'Table.Replicas[].RegionName'
  2. 讓操作具有冪等性——在建立時捕獲這個異常(在刪除時捕獲 ReplicaNotFoundException)並把它當作成功;表已經處於期望的狀態:

    catch (e) {
      if (e.name === 'ReplicaAlreadyExistsException') return; // desired state reached
      throw e;
    }
  3. 讓 IaC 與現實對齊——把手動新增的副本匯入你的棧,而不是讓每次部署都重試建立。

  4. 序列化副本變更——每張表一次一個副本更新;在下一個變更之前,等表返回 ACTIVE(且新副本離開 CREATING)。

確認一個副本確實在服務資料——而不只是 API 接受了它——是一個看錶的活兒:DynoTable 桌面應用直接瀏覽每個區域的副本,而 DynamoDB 定價計算器會顯示額外區域帶來的持續成本。

在 DynoTable 中核對

副本建立成功後,確認它提供資料——而不僅僅是 API 接受它。使用⌘P切換到副本區域,使用⌘K開啟表,然後瀏覽項目。 DynoTable並排顯示每個區域的副本,因此靜默的部分故障是顯而易見的。在新增另一個區域之前,請使用 pricing calculator 估計持續的複製寫入成本。在“設定”→“設定檔案”下配置每個區域的設定檔案,並在每個區域上執行 Test Connection。參見連線 AWS安裝。當你的 IaC 重放達到所需狀態時,將 ReplicaAlreadyExistsException 視為成功 - 該區域已經在複製。

來源

相關錯誤

參考資料

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

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

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

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