DynamoDB cannot access stream — stream is not enabled

TL;DR — 一個消費者(一個 Lambda 事件源對映、一個 Kinesis 介面卡讀取器,或一個原始的 DescribeStream/GetShardIterator 呼叫)試圖讀取一張 Streams 已關閉的表上的 DynamoDB stream,或者它使用了 Streams 重新啟用之前的一個陳舊 stream ARN。在表上啟用 DynamoDB Streams,並把消費者指向表的當前 LatestStreamArn

這是什麼意思

Cannot access stream arn:aws:dynamodb:us-east-1:111122223333:table/Orders/stream/... .
Please ensure the ARN is correct and the stream is enabled.

DynamoDB Streams must be enabled on the table.

DynamoDB Streams 是一個選擇加入的功能。只有當你設定了一個帶 StreamEnabled: trueStreamSpecification 時,表才有一個 stream。如果一個讀取器——最常見是一個 Lambda 事件源對映——被接到一張沒有活動 stream 的表上(或一個不再存在的 ARN),對映就無法附加,並報告它無法訪問 stream。

為什麼會發生

  • 表上從未啟用 Streams,但一個消費者期望有一個。
  • Streams 被禁用並重新啟用了——每次啟用都會鑄造一個全新的 stream ARN(帶一個新的時間戳字尾)。一個持有舊 ARN 的消費者正在讀取一個被禁用的 stream,它至多再保持可讀 24 小時,然後它的記錄過期。
  • 基礎設施即程式碼漂移——一個 CDK/CloudFormation/Terraform 消費者引用了一張按名稱/ARN 匯入的表,它沒有傳播其 stream 配置,因此工具以為 Streams 是關閉的。
  • stream ARN 錯誤——使用了表 ARN,或一個 .../stream/latest 預留位置,而不是真實的 LatestStreamArn

如何修正

  1. 在表上啟用 Streams。 透過 UpdateTable、主控台或你的 IaC 設定 StreamSpecification { StreamEnabled: true, StreamViewType: NEW_AND_OLD_IMAGES }(或你消費者所需的任何檢視型別)。
  2. 讀取當前的 stream ARN。 呼叫 DescribeTable 並使用 LatestStreamArn 欄位——絕不用一個手工構建或快取的 ARN。
  3. 在任何禁用/啟用迴圈後把消費者重新指向新 ARN;如果 Lambda 事件源對映繫結到了舊 stream,就重新建立它。
  4. 授予讀取許可權——消費者的角色需要在 stream ARN 上有 dynamodb:DescribeStreamGetRecordsGetShardIteratorListStreams
  5. 不要混淆表與 stream ARN——stream ARN 以 /stream/<timestamp> 結尾,表 ARN 不然。

需要在沒有主控台的情況下檢查表及其 stream 配置?DynoTable 桌面應用在表旁邊呈現 stream 狀態,讓你在把讀取器指向它之前確認它是開著的。

在 DynoTable 中重試之前

在附加 Lambda 事件源對映之前,請開啟 DynoTable 中的表並確認 Streams 已啟用以及設定了 StreamViewType(表詳細資訊)。 DynoTable 在模式旁邊顯示流配置,因此你不必透過 AWS 主控台進行跳轉。禁用並重新啟用 Streams 後,ARN 會發生變化 - 重新整理 DynoTable 中的表,並將當前流身份從 AWS(透過 CLI/DescribeTable)複製到使用者中。使用 ⌘P 保持正確的帳戶/區域設定檔案。日常項目檢查停留在DynoTable;流消費者留在 Lambda/Kinesis 工具中。 query builder 有助於驗證表在流切換後是否仍提供鍵控讀取服務。

來源

相關錯誤

參考資料

最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。