Como Conectar ao DynamoDB Local e ao LocalStack
Você tem um DynamoDB local rodando e seu código fala com ele sem problemas — mas você quer
ver as tabelas, não escrever um script de scan toda vez. Conectar um cliente a um endpoint
local são duas mudanças: apontar para a URL certa e passar para ele credenciais descartáveis.
Os detalhes abaixo são onde as pessoas travam — namespacing por região, a regra de chave
alfanumérica e a divisão de portas 8000 vs 4566.
DynamoDB Local vs LocalStack: ao que você está se conectando
Ambos te dão uma API do DynamoDB em localhost sem conta AWS, mas são coisas diferentes:
- O DynamoDB Local é o motor do DynamoDB para download em um único processo — a AWS o
distribui como um JAR e uma imagem Docker
(
amazon/dynamodb-local). É DynamoDB e nada mais. Porta padrão 8000 (docs da AWS). Veja rodar o DynamoDB Local com Docker. - O LocalStack emula uma pilha de serviços AWS atrás de um único endpoint. Seu DynamoDB é ele próprio movido pelo DynamoDB Local, mas tudo passa pela porta de borda 4566 única do LocalStack.
Então a única diferença prática para conectar é a URL do endpoint: :8000 para o DynamoDB
Local autônomo, :4566 para o DynamoDB-via-LocalStack. Todo o resto — a API, o truque das
credenciais, a configuração da GUI — é idêntico.
A configuração de endpoint + credenciais fictícias que confunde todo mundo
Os SDKs e a CLI da AWS exigem uma access key e uma região mesmo ao falar com um endpoint local — mas esses valores não precisam ser reais. As próprias docs da AWS dizem que esses valores "não precisam ser valores AWS válidos para rodar localmente" (docs da AWS).
Duas pegadinhas que não são óbvias:
- A região/access-key faz namespacing silencioso dos seus dados. Sem a flag
-sharedDb, o DynamoDB Local escreve um arquivomyaccesskeyid_region.dbseparado por combinação de access-key-ID + região — a nomenclatura exata da AWS. Conecte com uma chave ou região diferente da que seu app usou e suas tabelas parecem ter sumido; elas só estão em outro arquivo. Rode com-sharedDb(um únicoshared-local-instance.dbpara todos os clientes) ou use exatamente a mesma chave + região que seu app usa. - O access key ID precisa ser alfanumérico no DynamoDB Local — sem símbolos.
As docs da AWS
afirmam que
AWS_ACCESS_KEY_IDsó pode conterA–Z,a–ze0–9; a AWS introduziu isso no DynamoDB Local 2.0.0 (e 1.23.0+), então uma chave com caracteres especiais que funcionava numa imagem anterior agora falha (AWS re:Post). Veja o erro abaixo.
Para o LocalStack o padrão seguro é test / test: ele
ignora a secret key inteiramente
e nunca valida o valor do secret. Chaves com cara real (AKIA…/ASIA…) são
rejeitadas como salvaguarda e recaem na conta fictícia 000000000000 —
a mesma conta para a qual uma chave arbitrária como test resolve. Fique com test.
Conectando com a AWS CLI (verificação de sanidade)
Antes de apontar uma GUI para ele, confirme pela CLI que o endpoint está ativo. A CLI
não consegue usar um endpoint local por padrão,
então você passa --endpoint-url em cada comando.
DynamoDB Local:
aws dynamodb list-tables --endpoint-url http://localhost:8000LocalStack (mesmo comando, porta diferente):
aws dynamodb list-tables --endpoint-url http://localhost:4566Se você tiver alguma credencial configurada (mesmo falsas em ~/.aws/credentials ou via
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY), isso retorna sua lista de tabelas. Uma lista
vazia sem erro significa que o endpoint funciona, mas você está olhando para um namespace de
chave/região diferente — veja a pegadinha acima.
GUI para DynamoDB Local: navegando e consultando tabelas locais no DynoTable
Uma vez que a CLI funcione, uma GUI precisa dos mesmos três valores: endpoint, região e quaisquer credenciais fictícias. A CLI retorna DynamoDB-JSON que você lê de olho; uma GUI renderiza os mesmos dados como uma tabela que você pode ordenar, filtrar e editar.
No DynoTable, adicione uma conexão e defina um endpoint personalizado:
- Endpoint:
http://localhost:8000(DynamoDB Local) ouhttp://localhost:4566(LocalStack) - Região: o que seu app usa — por exemplo
us-east-1. Aqui é um rótulo, não uma região AWS real, mas precisa coincidir para você cair no mesmo namespace de dados. - Access key / secret: qualquer coisa (
test/testé o convencional). Apenas alfanumérico para a access key no DynamoDB Local.
A partir daí você navega pelos itens, roda uma Query ou um Scan e edita linhas visualmente
em vez de fazer marshalling de JSON à mão na CLI. Quando você carrega fixtures, o
conversor de DynamoDB-JSON transforma JSON puro no formato de
transporte, e Query vs Scan cobre qual leitura usar. Mesma rotina para
um visualizador de DynamoDB do LocalStack — só a porta muda para
4566.
O DynoTable é software desktop apenas local, então apontá-lo para localhost mantém suas
fixtures na sua máquina. Para uma visão mais ampla do cenário de GUIs, veja a
comparação de GUIs para DynamoDB.
Erros comuns (incompatibilidade de região, porta, credenciais)
- Connection refused. Porta errada —
8000é DynamoDB Local,4566é LocalStack. Confirme também que o container realmente publicou a porta (docker run -p 8000:8000 amazon/dynamodb-local). Para o LocalStack, verifique se o serviço está no ar emhttp://localhost:4566/_localstack/health. The Access Key ID or Security Token is Invalidno DynamoDB Local. Desde a imagem 2.0.0 (e 1.23.0+), o access key ID precisa ser apenas alfanumérico. Uma chave com símbolos que funcionava numa imagem anterior agora falha — substitua por letras/números (por exemplotest) e atualize toda ferramenta para coincidir.The security token included in the request is invalidcontra o LocalStack. Isso é quase sempre um problema de endpoint, não de credenciais — seu cliente SDK perdeu o--endpoint-url/endpoint_urle atingiu o endpoint real da AWS, que rejeita sua chave fictícia. Confirme que o cliente está de fato apontado parahttp://localhost:4566.- Erros de credencial do SDK/CLI. Mesmo endpoints locais precisam de alguma credencial
presente. Defina
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY(ou um profile falso) para que a cadeia de credenciais do SDK resolva. httpvshttps. Endpoints locais sãohttppuro. Uma URLhttps://falhará no handshake TLS.
O DynamoDB Local tem os mesmos dados das minhas tabelas AWS reais?
Não — local e nuvem são stores completamente separados. O DynamoDB Local (e o DynamoDB do LocalStack) mantém os dados em um arquivo local ou em memória; ele nunca toca na sua conta AWS, e Regiões/contas AWS não são suportadas no nível do cliente localmente. Esse é o objetivo: é para desenvolvimento e testes. Se você quiser as mesmas fixtures na nuvem depois, a AWS sugere valores de chave/região com cara de válidos localmente, para que você só troque o endpoint ao migrar. Para modelar esse schema antes de colocá-lo no ar, single-table design e GSI vs LSI cobrem as decisões que não mudam entre local e produção.
FAQ
Preciso de credenciais AWS reais? Não. Tanto o DynamoDB Local quanto o LocalStack aceitam valores fictícios. Eles só precisam estar presentes, alfanuméricos (para o DynamoDB Local) e consistentes entre suas ferramentas.
Por que minhas tabelas somem quando troco de ferramenta? Sem -sharedDb, o DynamoDB Local
particiona os dados por access-key + região em arquivos myaccesskeyid_region.db separados. Use
-sharedDb ou mantenha esses valores idênticos em todo lugar.
Qual a diferença entre a porta 8000 e a 4566? 8000 é o padrão do DynamoDB Local autônomo;
4566 é a porta de borda única do LocalStack que fica na frente de todos os seus serviços
emulados, DynamoDB incluído.
Uma GUI consegue conectar a ambos? Sim — eles falam a mesma API do DynamoDB. Só a URL do
endpoint muda (:8000 vs :4566).
O DynamoDB Local é gratuito? Sim. A AWS distribui o DynamoDB Local sem custo como um JAR e uma imagem Docker — não há "custos de throughput provisionado, armazenamento de dados ou transferência de dados"; é destinado apenas a desenvolvimento e testes, não a produção.
Posso rodar SQL contra minhas tabelas locais? O DynamoDB local fala a mesma API que a
nuvem, então as mesmas regras de padrão de acesso valem — e os mesmos limites: a
gramática do SELECT do PartiQL
do DynamoDB é apenas SELECT … FROM … WHERE … ORDER BY — sem JOIN, sem GROUP BY e
sem funções de agregação
como COUNT/SUM/AVG (veja PartiQL vs SQL). O SQL Workbench do
DynoTable roda essas consultas analíticas sobre qualquer conexão, local incluído.
Experimente o DynoTable para conectar direto ao localhost:8000 ou
localhost:4566 e navegar, consultar e editar suas tabelas locais com uma GUI.