DynamoDB ResourceNotFoundException

TL;DR — DynamoDB non riesce a trovare la tabella (o l'indice) che hai indicato nella regione/account a cui è indirizzato il tuo cliente. Verifica la presenza di un errore di battitura nel nome della tabella, della "regione" sbagliata o delle credenziali per un account diverso. Non capita quasi mai che la tabella sia davvero sparito.

Cosa significa

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

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

Il primo è ciò che restituisce il servizio live: nomina la tabella cercata. Il secondo è ciò che restituisce DynamoDB Local e vederlo è un segno affidabile che stai parlando con l'emulatore anziché con AWS. In ogni caso, l'operazione ha preso di mira una tabella o un indice che non esiste dal punto di vista di questo client: la combinazione di nome tabella + AWS regione + account (credenziali). Tutti e tre devono allinearsi. DynamoDB lo restituisce con lo stato HTTP 400 e non è possibile riprovare: la stessa richiesta continua a fallire finché non si correggono il nome, la regione o le credenziali (o la tabella non termina la creazione: anche una tabella troppo presto nello stato CREATING può restituire questo errore).

Perché succede

  • Non corrispondenza della regione: la tabella è in "us-east-1" ma il client ha come impostazione predefinita "us-west-2" (o non è impostata alcuna regione, quindi l'SDK sceglie un valore predefinito diverso).
  • Nome tabella errato: un errore di battitura, una distinzione tra maiuscole e minuscole errate (i nomi fanno distinzione tra maiuscole e minuscole sul servizio Web) o un nome con prefisso di ambiente (prod-Orders vs Orders).
  • Account sbagliato: le credenziali si risolvono in un account AWS diverso da quello proprietario della tabella.
  • Interrogazione di un indice che non esiste o non è ancora ACTIVE (un GSI sta ancora riempiendo) — il riferimento API richiama "una tabella o un indice inesistente" il cui "stato potrebbe non essere ACTIVE".
  • La tabella è stata davvero cancellata, oppure sei stato indirizzato a DynamoDB Local, che inizia vuoto.

Come risolverlo

  1. Aggiungi esplicitamente la regione sul client e conferma che corrisponda a dove si trova la tabella.
  2. Verifica il nome esatto della tabella: elenca le tabelle in quella regione (aws dynamodb list-tables --region <r>) e copia il nome alla lettera.
  3. Confermare le credenziali risolvere l'account proprietario (aws sts get-caller-identity).
  4. Controlla il nome dell'indice + lo stato se la chiamata utilizza IndexName (DescribeTable → GSI deve essere ACTIVE).

Esempio

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'});

FAQ

Come posso correggere ResourceNotFoundException in DynamoDB? Controlla che il nome della tabella, la regione AWS e l'account (credenziali) siano tutti allineati: aggiungi esplicitamente la regione al client, elenca le tabelle in quella regione per verificare il nome esatto e conferma che le credenziali vengono risolte nell'account proprietario con "aws sts get-caller-identity".

ResourceNotFoundException significa che la mia tabella è stata eliminata? Raramente. Di solito significa che il cliente sta cercando nel posto sbagliato: una mancata corrispondenza della regione, un errore di battitura o un errore nel nome della tabella o le credenziali di un account diverso. Si attiva anche quando interroghi un indice che non esiste o non è ancora ATTIVO, o quando punti a DynamoDB Local, che inizia vuoto.

Workbench DynoTable

DynoTable elenca le tabelle per il profilo attivo e la regione nella barra laterale. Se a manca una tabella, premere ⌘P per confermare il profilo e controllare il regione nella scheda: una mancata corrispondenza qui è la causa più comune di questo errore in l'app. ⌘KApri tabella per nome ti consente di digitare la tabella esatta nome quando "ListTables" viene negato o l'elenco viene filtrato in base a un prefisso di tabella. Contro DynamoDB Locale, aggiungi un profilo con endpoint http://localhost:8000 e credenziali del segnaposto corrispondenti (Connetti a DynamoDB Locale) — Locale inizia vuoto finché non crei le tabelle.

Errori correlati

Fonti

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.