Principiante2 min de lectura

Ejecutar DynamoDB Local con Docker

DynamoDB Local es el motor real de DynamoDB en un solo proceso —sin cuenta de AWS, sin red, sin factura por solicitud. Úsalo para desarrollo local y pruebas de integración, y luego apunta el mismo código a la nube en producción.

Arranca el contenedor

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

Eso expone el motor en http://localhost:8000.

docker-compose

La mayoría de los proyectos lo fijan en docker-compose.yml para que todo el equipo obtenga el mismo endpoint:

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

Persistencia

Por defecto, DynamoDB Local está en memoria —cada tabla desaparece cuando se detiene el contenedor. Dos flags lo hacen duradero:

  • -sharedDb mantiene a todos los clientes en una única base de datos compartida (sin él, cada conjunto de credenciales/región obtiene su propia base de datos aislada —una sorpresa habitual del estilo «¿dónde se fue mi tabla?»).
  • -dbPath /data + un volumen montado escribe ese archivo en disco, así que los datos sobreviven a docker compose down.

Apunta el SDK hacia él

Solo cambia el endpoint —las credenciales pueden ser cualquier valor ficticio:

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

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

Crea una tabla

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

Un schema PK/SK de tabla única como este es un buen valor por defecto. Cuando cargues fixtures, convierte el JSON plano al formato de transporte con el conversor de DynamoDB-JSON.

Verifica que el contenedor está en marcha y que la tabla se creó:

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

Explórala con una GUI

Las llamadas por CLI se vuelven tediosas rápido. Las opciones habituales son la interfaz web de código abierto dynamodb-admin o un cliente de escritorio. DynoTable se conecta directamente a localhost:8000 (o a cualquier endpoint de LocalStack —consulta conectar a DynamoDB Local y LocalStack) y te permite explorar, consultar con el SQL Workbench y editar tablas locales con la misma interfaz que usas para las tablas en la nube —sin idas y vueltas por la CLI de aws.

Actualizado