Cannot do operations on a non-existent table (DynamoDB Local)
TL;DR — Esta é a redação do DynamoDB Local para ResourceNotFoundException, e a armadilha é que "non-existent" está limitado ao arquivo de banco de dados que esta instância abriu para sua access key + region atuais. Sem -sharedDb, o Local mantém um conjunto de tabelas separado por combinação credenciais/region — então a tabela que você criou com a CLI pode ficar invisível para o seu app. Rode o Local com -sharedDb (ou fixe credenciais dummy + region idênticas em todo lugar), e lembre-se de que -inMemory começa vazio a cada reinício.
O que significa
ResourceNotFoundException: Cannot do operations on a non-existent tableSua requisição chegou a um DynamoDB Local em execução, que procurou a tabela e não a encontrou — no banco de dados que ele está usando para a identidade da sua requisição. A AWS real redige a mesma falha de forma diferente (Requested resource not found), então esta mensagem exata é uma forte pista de que você está conversando com um emulador.
Por que acontece
- Split-brain de credencial/region (o clássico). Sem
-sharedDb, o DynamoDB Local nomeia seu arquivo de banco de dados a partir da access key ID e da region de cada requisição. Sua CLI (--profilecom chavelocal, regionus-east-1) e seu app (chavefake, regionlocal) portanto veem dois conjuntos de tabelas diferentes — cada um criou a tabela "para si mesmo". -inMemory+ um reinício — o modo em memória não mantém nada em disco; cada reinício é um banco de dados em branco.- Um contêiner novo sem volume —
docker run amazon/dynamodb-localcomeça vazio; tabelas do contêiner anterior desaparecem a menos que você tenha montado armazenamento-dbPath. - A tabela genuinamente não foi criada — scripts de setup não rodaram, ou a criaram contra uma porta/instância diferente.
- O mesmo código apontado para a AWS real vs. Local — a tabela existe na nuvem mas não no emulador (ou vice-versa).
Como corrigir
Veja o que ESTA identidade enxerga — liste as tabelas com exatamente as credenciais/region/endpoint que seu app usa:
AWS_ACCESS_KEY_ID=local AWS_SECRET_ACCESS_KEY=local \ aws dynamodb list-tables --endpoint-url http://localhost:8000 --region us-east-1Se a tabela estiver ausente aqui mas existir "em algum lugar", é o escopo.
Rode o Local com
-sharedDbpara que todo cliente compartilhe um banco de dados independentemente de credenciais/region:java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDbOu fixe uma identidade em todo lugar — os mesmos
accessKeyId,secretAccessKeyeregiondummy no profile da CLI, na config do cliente SDK e no setup de testes.Persista entre reinícios — descarte
-inMemory, defina-dbPathe (no Docker) monte-o como um volume.Crie tabelas no setup — para testes, crie a tabela (e aguarde por ela) no bootstrap da suíte para que uma instância nova nunca seja uma surpresa.
O problema de escopo é muito mais fácil de ver do que de deduzir — o app desktop DynoTable conecta-se ao DynamoDB Local e mostra exatamente quais tabelas uma combinação de endpoint + credencial consegue ver, então o split-brain fica visível num relance. Preparando dados de seed? O conversor de DynamoDB JSON transforma JSON comum em itens tipados.
FAQ
Por que o DynamoDB Local diz que a tabela não existe se eu acabei de criá-la?
Sem -sharedDb, o DynamoDB Local mantém um arquivo de banco de dados separado por access key ID e region, então a tabela que você criou com a CLI pode ficar invisível para o seu app se as credenciais ou a region diferirem. Rode o Local com -sharedDb ou fixe credenciais dummy e region idênticas em todo lugar.
Por que minhas tabelas do DynamoDB Local desapareceram após um reinício?
No modo -inMemory nada é mantido em disco, então cada reinício é um banco de dados em branco. Um contêiner Docker novo sem um volume montado também começa vazio. Descarte -inMemory, defina -dbPath e monte-o como um volume para persistir as tabelas.
Erros relacionados
- ResourceNotFoundException — a variante da AWS real (region/conta/nome de tabela errados).
- Could not connect to DynamoDB Local (ECONNREFUSED)
- DynamoDB Local port 8000 in use
- Aprenda: Running DynamoDB Local · Connect to Local & LocalStack
Referências
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (per-credential/Region
myaccesskeyid_region.dbfiles,-sharedDb→shared-local-instance.db,-inMemorykeeps nothing on disk) - Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (Docker Compose
-sharedDb -dbPath ./data+ volume pattern, dummy credentials) - amazon/dynamodb-local — Docker Hub (official image; fresh containers start empty without a mounted volume)
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.