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 table

Sua 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 (--profile com chave local, region us-east-1) e seu app (chave fake, region local) 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 volumedocker run amazon/dynamodb-local começ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

  1. 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-1

    Se a tabela estiver ausente aqui mas existir "em algum lugar", é o escopo.

  2. Rode o Local com -sharedDb para 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 -sharedDb
  3. Ou fixe uma identidade em todo lugar — os mesmos accessKeyId, secretAccessKey e region dummy no profile da CLI, na config do cliente SDK e no setup de testes.

  4. Persista entre reinícios — descarte -inMemory, defina -dbPath e (no Docker) monte-o como um volume.

  5. 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

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.