DynamoDB Streams — The ARN provided is invalid

TL;DR — 一个 Streams API 调用(DescribeStreamGetShardIteratorGetRecords)收到了一个不是格式良好、当前的 stream 描述符的 stream ARN——通常是一个 /stream/latest 占位符、误用的表 ARN,或一个陈旧/被截断的 ARN。从 DescribeTableLatestStreamArn 获取真实的 ARN 并原样传入。

含义

ValidationException: The ARN provided is invalid

一个 DynamoDB stream ARN 有严格的形态:

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

末尾的 /stream/<ISO-8601 timestamp> 是一个特定的 stream 描述符,而不是一个符号名称。Streams 端点会以 The ARN provided is invalid 拒绝任何无法解析为有效、现存 stream ARN 的东西。

为什么会发生

  • 一个 /stream/latest(或类似)占位符——某些工具和本地模拟器接受它,但真实的 DynamoDB 要求具体的带时间戳的描述符。
  • 传入了表 ARN.../table/TestTable),而本应是一个 stream ARN。
  • 一个陈旧的 ARN——Streams 被禁用并重新启用了,因此表当前的 stream 有一个新描述符;旧的 stream 在被禁用后只保持可读 24 小时,然后它的记录过期。
  • 一个手工构建或被截断的 ARN——区域错误、账户错误、缺少 /stream/... 段,或一个多余的空白/换行。
  • 区域不匹配——Streams 客户端配置的区域与 ARN 编码的不同。

如何修复

  1. 从真相之源获取 ARN。 调用 DescribeTable 并读取 Table.LatestStreamArn;使用那个确切的字符串。
  2. 绝不手工合成 ARN或使用 /stream/latest——时间戳段由 DynamoDB 分配,无法猜出。
  3. 使用 DynamoDB Streams 端点,而不是主 DynamoDB 端点,来做 DescribeStream/GetShardIterator/GetRecords
  4. 让客户端的区域与 ARN 中的区域匹配
  5. 在任何 Streams 切换后重新获取——一次禁用/启用循环会创建一个带不同描述符的全新 stream,因此之前的 ARN 不再指向活动的 stream。

在处理 Streams 并想把真实的 stream ARN 摆在眼前?DynoTable 桌面应用会显示表的活动 stream 描述符,让你复制正确的 ARN,而不是一个猜出来的。

在 DynoTable 中定位

DynoTable 在表元数据面板中显示每个表的 LatestStreamArn — 逐字复制它,而不是手动构建 /stream/latest 占位符。在连接 Lambda 或 KCL 使用者之前,使用 ⌘K 打开表并展开 Stream 详细信息。使用 Query Builder 确认可以使用拥有该流的相同配置文件访问该表。 ⌘P切换区域;设置上的 Test Connection → 配置文件必须与 ARN 的区域匹配。参见连接 AWS安装。切勿手动构建 /stream/<timestamp> 后缀 - 每次都从 DescribeTable 复制 LatestStreamArn。表 ARN (.../table/Name) 不是流 ARN,会触发相同的验证失败。

来源

相关错误

参考资料

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

无需控制台即可使用 DynamoDB

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

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