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

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