DynamoDB ResourceNotFoundException

TL;DR — DynamoDB 在你客户端所指向的区域/账户中找不到你所命名的表(或索引)。检查表名中的拼写错误、错误的 region,或另一个账户的凭证。几乎从来不是表真的没了。

含义

ResourceNotFoundException: Requested resource not found: Table: <table-name> not found

# on DynamoDB Local:
ResourceNotFoundException: Cannot do operations on a non-existent table

第一条是线上服务返回的内容——它会点出自己找过的那张表。第二条是 DynamoDB Local 返回的内容,看到它基本就能确定:你连的是模拟器,而不是 AWS。无论哪种,操作都指向了一个从这个客户端的角度看不存在的表或索引——表名 + AWS 区域 + 账户(凭证)的组合。三者都必须对齐。DynamoDB 以 HTTP 状态码 400 返回它,且不可重试——在你修正名称、区域或凭证之前(或表完成创建之前:一张过早处于 CREATING 状态的表也可能返回这个错误),同样的请求会一直失败。

为什么会发生

  • 区域不匹配——表在 us-east-1,但客户端默认到 us-west-2(或者没有设置区域,因此 SDK 选了一个不同的默认值)。
  • 表名错误——一个拼写错误、错误的大小写(在 Web 服务上名称区分大小写),或一个带环境前缀的名称(prod-OrdersOrders)。
  • 账户错误——凭证解析到的 AWS 账户不是拥有该表的那个。
  • 查询一个不存在或还未 ACTIVE 的索引(一个 GSI 仍在回填)——API 参考指出"一个不存在的表或索引",其"状态可能不是 ACTIVE"。
  • 表确实被删除了,或者你指向的是从空开始的 DynamoDB Local。

如何修复

  1. 在客户端上显式固定区域,并确认它与表所在的位置匹配。
  2. 核实确切的表名——列出该区域中的表(aws dynamodb list-tables --region <r>)并逐字复制名称。
  3. 确认凭证解析到拥有该表的账户(aws sts get-caller-identity)。
  4. 检查索引名称 + 状态,如果调用使用了 IndexNameDescribeTable → GSI 必须是 ACTIVE)。

示例

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';

// Pin the region so the client can't silently target the wrong one:
const client = new DynamoDBClient({region: 'us-east-1'});

常见问题

如何修复 DynamoDB 中的 ResourceNotFoundException? 检查表名称、AWS 区域和帐户(凭据)是否全部对齐:将区域显式固定在客户端上,列出该区域中的表以验证确切的名称,并使用 aws sts get-caller-identity 确认凭据解析为所属帐户。

ResourceNotFoundException 是否意味着我的表已被删除? 很少。这通常意味着客户端正在寻找错误的位置 - 区域不匹配、表名称中的拼写错误或大小写错误,或者不同帐户的凭据。当你查询不存在或尚未激活的索引时,或者当你指向以空开头的 DynamoDB Local 时,它也会触发。

DynoTable 工作台

DynoTable 在侧栏中列出了活动配置文件和区域的表格。如果一个表丢失,请按⌘P确认配置文件并检查选项卡上的区域 - 此处的不匹配是导致此错误的最常见原因该应用程序。 ⌘K按名称打开表格 可让你键入确切的表格当 ListTables 被拒绝或列表按表前缀过滤时的名称。针对 DynamoDB Local,添加具有端点 http://localhost:8000 的配置文件并匹配占位符凭据 (Connect to DynamoDB Local) — Local 开始为空,直到你创建表。

相关错误

来源

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

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