Non è possibile eseguire operazioni su una tabella inesistente (DynamoDB Locale)
TL;DR — Questa è la formulazione di DynamoDB Local di ResourceNotFoundException e la trappola è che "inesistente" ha come ambito il file di database aperto da questa istanza per la tua chiave di accesso corrente + regione. Senza -sharedDb, Local mantiene una tabella separata impostata per combinazione credenziali/regione, in modo che la tabella creata con la CLI possa essere invisibile alla tua app. Esegui Locale con -sharedDb (o aggiungi credenziali fittizie identiche + regione ovunque) e ricorda che -inMemory inizia vuoto ad ogni riavvio.
Cosa significa
ResourceNotFoundException: Cannot do operations on a non-existent tableLa tua richiesta ha raggiunto un DynamoDB Local in esecuzione, che ha cercato la tabella e non l'ha trovata — nel database che sta utilizzando per l'identità della tua richiesta. Real AWS esprime lo stesso errore in modo diverso ("Risorsa richiesta non trovata"), quindi questo messaggio esatto è un forte indizio che stai parlando con un emulatore.
Perché succede
- Credenziale/regione split-brain (il classico). Senza
-sharedDb, DynamoDB Local nomina il suo file di database dopo l'ID della chiave di accesso e la regione di ciascuna richiesta. La tua CLI (--profilecon chiavelocal, regioneus-east-1) e la tua app (chiavefake, regionelocal) vedono quindi due diversi set di tabelle: ciascuno ha creato la tabella "per se stesso". -inMemory+ un riavvio — la modalità in memoria non mantiene nulla sul disco; ogni riavvio è un database vuoto.- Un nuovo contenitore senza volume —
docker run amazon/dynamodb-localinizia vuoto; le tabelle del contenitore precedente scompaiono a meno che non sia stata montata la memoria-dbPath. - La tabella non è stata realmente creata: gli script di installazione non sono stati eseguiti o sono stati creati su una porta/istanza diversa.
- Stesso codice puntato su real AWS vs Local: la tabella esiste nel cloud ma non nell'emulatore (o viceversa).
Come risolverlo
Guarda cosa vede QUESTA identità: elenca le tabelle con esattamente le credenziali/regione/endpoint utilizzati dalla tua app:
AWS_ACCESS_KEY_ID=local AWS_SECRET_ACCESS_KEY=local \ aws dynamodb list-tables --endpoint-url http://localhost:8000 --region us-east-1Esegui Local con
-sharedDbin modo che ogni client condivida un database indipendentemente dalle credenziali/regione:java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDbOppure aggiungi un'identità ovunque: gli stessi
accessKeyId,secretAccessKeyeregionfittizi nel profilo CLI, nella configurazione del client SDK e nella configurazione del test.Perseverare tra i riavvii: rilasciare
-inMemory, impostare-dbPathe (in Docker) montarlo come volume.Crea tabelle nella configurazione: per i test, crea la tabella (e attendila) nel bootstrap della suite in modo che una nuova istanza non sia mai una sorpresa.
DynoTable + Local
Il problema dell'ambito è molto più facile da vedere che da dedurre. Installa DynoTable,
aggiungere un profilo locale (Impostazioni → Profili → Aggiungi profilo) con endpoint
http://localhost:8000 e la stessa chiave di accesso + regione utilizzata dalla CLI, quindi
confrontare l'elenco delle tabelle della barra laterale con aws dynamodb list-tables --endpoint-url http://localhost:8000. Le credenziali non corrispondenti dividono le tabelle in tabelle separate
File myaccesskeyid_region.db (In esecuzione DynamoDB Locale).
Dopo il riavvio di -inMemory, utilizza il convertitore DynamoDB JSON
per ricaricare i dispositivi.
FAQ
Perché DynamoDB Local dice che la tabella non esiste quando l'ho appena creata?
Senza -sharedDb, DynamoDB Local mantiene un file di database separato per ID chiave di accesso e regione, quindi la tabella creata con la CLI può essere invisibile alla tua app se le credenziali o la regione differiscono. Esegui Local con -sharedDb o aggiungi credenziali fittizie e regione identiche ovunque.
Perché le mie DynamoDB tabelle locali sono scomparse dopo il riavvio?
Nella modalità -inMemory nulla viene mantenuto sul disco, quindi ogni riavvio è un database vuoto. Anche un nuovo contenitore Docker senza volume montato inizia vuoto. Rilascia -inMemory, imposta -dbPath e montalo come volume per rendere persistenti le tabelle.
Errori correlati
- ResourceNotFoundException — il vero sapore-AWS (nome regione/account/tabella errato).
- Impossibile connettersi a DynamoDB Locale (ECONNREFUSED)
- DynamoDB Porta locale 8000 in uso
- Impara: Esecuzione DynamoDB Locale · Connetti a Locale e LocalStack
Fonti
DynamoDB note sull'utilizzo locale - Guida per sviluppatori di Amazon DynamoDB (verificato il 13-07-2026 -
-sharedDb,-inMemory, file DB per credenziale)Distribuzione DynamoDB localmente sul tuo computer — Guida per sviluppatori Amazon DynamoDB (verificato il 13-07-2026)
amazon/dynamodb-local — Docker Hub (verificato il 13-07-2026)