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 代理。

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