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 官方文档。