Einsteiger2 Min. Lesezeit

DynamoDB Local mit Docker ausführen

DynamoDB Local ist die echte DynamoDB-Engine in einem einzigen Prozess — kein AWS-Konto, kein Netzwerk, keine Rechnung pro Request. Nutze es für die lokale Entwicklung und Integrationstests, und zeige denselben Code in der Produktion dann auf die Cloud.

Den Container starten

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

Das stellt die Engine unter http://localhost:8000 bereit.

docker-compose

Die meisten Projekte fixieren es in der docker-compose.yml, damit das ganze Team denselben Endpoint bekommt:

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

Persistenz

Standardmäßig ist DynamoDB Local im Speicher — jede Tabelle verschwindet, wenn der Container stoppt. Zwei Flags machen es dauerhaft:

  • -sharedDb hält alle Clients auf einer geteilten Datenbankdatei (ohne es bekommt jeder Satz Credentials/Region seine eigene isolierte DB — eine häufige „Wo ist meine Tabelle hin?“-Überraschung).
  • -dbPath /data + ein gemountetes Volume schreibt diese Datei auf die Festplatte, sodass die Daten ein docker compose down überleben.

Das SDK darauf zeigen

Nur der Endpoint ändert sich — Credentials können beliebige Dummy-Werte sein:

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

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

Eine Tabelle anlegen

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

Ein Single-Table-PK/SK-Schema wie dieses ist ein guter Standard. Wenn du Fixtures lädst, konvertiere reines JSON mit dem DynamoDB-JSON-Konverter ins Wire-Format.

Prüfe, ob der Container läuft und die Tabelle gelandet ist:

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

Mit einer GUI durchsuchen

CLI-Aufrufe werden schnell mühsam. Die üblichen Optionen sind die quelloffene dynamodb-admin-Web-UI oder ein Desktop-Client. DynoTable verbindet sich direkt mit localhost:8000 (oder jedem LocalStack-Endpoint — siehe Verbindung zu DynamoDB Local & LocalStack) und lässt dich lokale Tabellen mit derselben UI durchsuchen, mit der SQL Workbench abfragen und bearbeiten, die du für Cloud-Tabellen nutzt — ohne aws-CLI-Umwege.

Aktualisiert