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 定价计算器会显示额外区域带来的持续成本。

相关错误

References

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。