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 agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。