ReplicaAlreadyExistsException
TL;DR — 你正在新增的區域已經在全域性表的複製組中。新增不是冪等的,因此在第一次成功之後,同一請求的重新執行(重試、重放的部署、漂移的 IaC)會失敗。先描述表,只建立不在其中的副本——或者把這個異常當作"已經完成"並繼續。
這是什麼意思
ReplicaAlreadyExistsException: The specified replica is already part of
the global table.副本管理是一個帶硬性前置條件的控制平面變更:Create 要求區域不存在,Delete 要求區域存在。在 eu-west-1 已經複製該表時請求建立 eu-west-1 違反了那個前置條件——你想要的狀態已經存在。
為什麼會發生
- 一個重試或重放的置備步驟——第一次嘗試成功了(也許在超時掩蓋了成功之後),而重試重新新增了同一個區域。
- 基礎設施即程式碼漂移——副本在主控台中被手動新增了,然後 IaC 流水線試圖再次新增它。
- 兩條自動化路徑競速——並行部署或區域擴充套件任務都提交了同一個副本建立。
如何修正
在變更之前檢查複製組:
aws dynamodb describe-table --table-name orders \ --query 'Table.Replicas[].RegionName'讓操作具有冪等性——在建立時捕獲這個異常(在刪除時捕獲
ReplicaNotFoundException)並把它當作成功;表已經處於期望的狀態:catch (e) { if (e.name === 'ReplicaAlreadyExistsException') return; // desired state reached throw e; }讓 IaC 與現實對齊——把手動新增的副本匯入你的棧,而不是讓每次部署都重試建立。
序列化副本變更——每張表一次一個副本更新;在下一個變更之前,等表返回
ACTIVE(且新副本離開CREATING)。
確認一個副本確實在服務資料——而不只是 API 接受了它——是一個看錶的活兒:DynoTable 桌面應用直接瀏覽每個區域的副本,而 DynamoDB 定價計算器會顯示額外區域帶來的持續成本。
在 DynoTable 中核對
副本建立成功後,確認它提供資料——而不僅僅是 API 接受它。使用⌘P切換到副本區域,使用⌘K開啟表,然後瀏覽項目。 DynoTable並排顯示每個區域的副本,因此靜默的部分故障是顯而易見的。在新增另一個區域之前,請使用 pricing calculator 估計持續的複製寫入成本。在“設定”→“設定檔案”下配置每個區域的設定檔案,並在每個區域上執行 Test Connection。參見連線 AWS和安裝。當你的 IaC 重放達到所需狀態時,將 ReplicaAlreadyExistsException 視為成功 - 該區域已經在複製。
來源
- UpdateGlobalTable — Amazon DynamoDB API Reference(2026-07-13 驗證)
- Global tables — Amazon DynamoDB Developer Guide(2026-07-13 驗證)
相關錯誤
- ReplicaNotFoundException——映象情況:刪除一個不在組中的區域。
- GlobalTableNotFoundException——舊版與當前 API 的混淆。
- ResourceInUseException——表正在修改中。
- 學習:DynamoDB global tables
參考資料
- UpdateGlobalTable — Amazon DynamoDB API Reference
- UpdateTable — Amazon DynamoDB API Reference
- Global tables — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。