Principiante2 min di lettura

Eseguire DynamoDB Local con Docker

DynamoDB Local è il vero motore DynamoDB in un singolo processo — nessun account AWS, nessuna rete, nessuna bolletta per richiesta. Usalo per lo sviluppo locale e i test di integrazione, poi punta lo stesso codice al cloud in produzione.

Avvia il container

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

Questo espone il motore su http://localhost:8000.

docker-compose

La maggior parte dei progetti lo fissa in docker-compose.yml così tutto il team ottiene lo stesso endpoint:

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

Persistenza

Per impostazione predefinita DynamoDB Local è in memoria — ogni tabella scompare quando il container si ferma. Due flag lo rendono durevole:

  • -sharedDb mantiene tutti i client su un unico database condiviso (senza, ogni insieme di credenziali/regione ottiene il proprio DB isolato — una sorpresa comune del tipo "dov'è finita la mia tabella?").
  • -dbPath /data + un volume montato scrive quel file su disco, così i dati sopravvivono a docker compose down.

Punta l'SDK su di esso

Cambia solo l'endpoint — le credenziali possono essere valori fittizi qualsiasi:

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

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

Crea una tabella

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

Uno schema single-table PK/SK come questo è un buon default. Quando carichi le fixture, converti il JSON semplice nel formato wire con il convertitore DynamoDB-JSON.

Verifica che il container sia attivo e che la tabella sia stata creata:

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

Sfoglialo con una GUI

Le chiamate da CLI diventano presto noiose. Le opzioni più comuni sono la web UI open-source dynamodb-admin o un client desktop. DynoTable si collega direttamente a localhost:8000 (o a qualsiasi endpoint LocalStack — vedi connettersi a DynamoDB Local e LocalStack) e ti permette di sfogliare, interrogare con il Workbench SQL e modificare le tabelle locali con la stessa UI che usi per le tabelle cloud — senza i round-trip della CLI aws.

Aggiornato