Cannot do operations on a non-existent table (DynamoDB Local)

TL;DR — 这是 DynamoDB Local 对 ResourceNotFoundException 的措辞,而陷阱在于"non-existent"的范围被限定在这个实例为你当前的访问密钥 + 区域所打开的那个数据库文件内。没有 -sharedDb 时,Local 会为每个凭证/区域组合保留一套_独立的_表——所以你用 CLI 创建的表对你的应用可能是不可见的。用 -sharedDb 运行 Local(或者在各处固定完全相同的虚拟凭证 + 区域),并记住 -inMemory 每次重启都从空开始。

含义

ResourceNotFoundException: Cannot do operations on a non-existent table

你的请求到达了一个正在运行的 DynamoDB Local,它查找了表却没找到——在它为你请求的身份所使用的那个数据库中。真实的 AWS 对同样的失败措辞不同(Requested resource not found),因此这条确切的消息强烈暗示你正在与一个模拟器对话。

为什么会发生

  • 凭证/区域的裂脑(经典情形)。 没有 -sharedDb 时,DynamoDB Local 会以每个请求的访问密钥 ID 和区域来命名其数据库文件。因此你的 CLI(--profile 用密钥 local、区域 us-east-1)和你的应用(密钥 fake、区域 local)会看到两套不同的表——各自"为自己"创建了那张表。
  • -inMemory + 重启——内存模式不在磁盘上保留任何东西;每次重启都是一个空白数据库。
  • 一个没有卷的全新容器——docker run amazon/dynamodb-local 从空开始;上一个容器的表都没了,除非你挂载了 -dbPath 存储。
  • 表确实没被创建——安装脚本没运行,或者是针对不同的端口/实例创建的。
  • 同一份代码分别指向真实 AWS 和 Local——表在云端存在但在模拟器中不存在(或反之)。

如何修复

  1. 看看这个身份能看到什么——用你的应用实际使用的确切凭证/区域/端点列出表:

    AWS_ACCESS_KEY_ID=local AWS_SECRET_ACCESS_KEY=local \
    aws dynamodb list-tables --endpoint-url http://localhost:8000 --region us-east-1

    如果表在这里缺失但"某处"存在,那就是范围限定问题。

  2. -sharedDb 运行 Local,让每个客户端无论凭证/区域如何都共享一个数据库:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
    # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
  3. 或者在各处固定一个身份——在 CLI profile、SDK 客户端配置和测试设置中使用相同的虚拟 accessKeyIdsecretAccessKeyregion

  4. 跨重启持久化——去掉 -inMemory,设置 -dbPath,并(在 Docker 中)把它挂载为一个卷。

  5. 在安装时创建表——对于测试,在测试套件的引导过程中创建表(并等待它就绪),这样一个全新的实例永远不会带来意外。

范围限定问题_看_起来比推断出来容易得多——DynoTable 桌面应用连接到 DynamoDB Local,并准确显示某个端点 + 凭证组合能看到哪些表,因此裂脑一眼就能看出来。在准备种子数据?DynamoDB JSON 转换器能把普通 JSON 转成带类型的项目。

FAQ

为什么 DynamoDB Local 说表不存在,可我刚刚才创建了它? 没有 -sharedDb 时,DynamoDB Local 会为每个访问密钥 ID 和区域保留一个独立的数据库文件,因此如果凭证或区域不同,你用 CLI 创建的表对你的应用可能是不可见的。用 -sharedDb 运行 Local,或者在各处固定完全相同的虚拟凭证和区域。

为什么我的 DynamoDB Local 表在重启后消失了?-inMemory 模式下,没有任何东西保留在磁盘上,因此每次重启都是一个空白数据库。一个没有挂载卷的全新 Docker 容器同样从空开始。去掉 -inMemory,设置 -dbPath,并把它挂载为一个卷来持久化表。

相关错误

References

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

无需控制台即可使用 DynamoDB

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