Iniciante2 min de leitura

Rodando o DynamoDB Local com Docker

O DynamoDB Local é o mesmo mecanismo do DynamoDB em um único processo — sem conta AWS, sem rede, sem cobrança por requisição. Use-o para desenvolvimento local e testes de integração e depois aponte o mesmo código para a nuvem em produção.

Inicie o contêiner

docker run -p 8000:8000 amazon/dynamodb-local

Isso expõe o mecanismo em http://localhost:8000.

docker-compose

A maioria dos projetos o fixa em docker-compose.yml para que toda a equipe tenha o mesmo endpoint:

services:
  dynamodb:
    image: amazon/dynamodb-local
    command: '-jar DynamoDBLocal.jar -sharedDb -dbPath /data'
    ports:
      - '8000:8000'
    volumes:
      - dynamodb-data:/data
volumes:
  dynamodb-data:

Persistência

Por padrão, o DynamoDB Local é em memória — toda tabela some quando o contêiner para. Dois flags o tornam durável:

  • -sharedDb mantém todos os clientes em um único banco de dados compartilhado (sem ele, cada conjunto de credenciais/região recebe seu próprio banco isolado — uma surpresa comum do tipo "onde foi parar minha tabela?").
  • -dbPath /data + um volume montado grava esse arquivo em disco, então os dados sobrevivem ao docker compose down.

Aponte o SDK para ele

Apenas o endpoint muda — as credenciais podem ser quaisquer valores fictícios:

import {DynamoDBClient} from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({
  endpoint: 'http://localhost:8000',
  region: 'local',
  credentials: {accessKeyId: 'x', secretAccessKey: 'x'}
});

Crie uma tabela

aws dynamodb create-table \
  --endpoint-url http://localhost:8000 \
  --table-name AppData \
  --attribute-definitions AttributeName=PK,AttributeType=S AttributeName=SK,AttributeType=S \
  --key-schema AttributeName=PK,KeyType=HASH AttributeName=SK,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

Um schema PK/SK de tabela única como este é um bom padrão. Quando você carregar fixtures, converta JSON puro para o formato de transporte com o conversor de DynamoDB-JSON.

Verifique se o contêiner está no ar e se a tabela foi criada:

aws dynamodb list-tables --endpoint-url http://localhost:8000

As chamadas pelo CLI ficam tediosas rápido. As opções de sempre são a interface web open-source dynamodb-admin ou um cliente desktop. O DynoTable conecta direto a localhost:8000 (ou a qualquer endpoint do LocalStack — veja conectar ao DynamoDB Local e LocalStack) e permite navegar, consultar com o SQL Workbench e editar tabelas locais com a mesma interface que você usa para tabelas na nuvem — sem idas e voltas ao CLI aws.

Atualizado