用 Docker 运行 DynamoDB Local
DynamoDB Local 是运行在单一进程中的真正 DynamoDB 引擎 —— 无需 AWS 账户、无需网络、没有按请求计费。用它进行本地开发和集成测试,然后在生产环境中把同一套代码指向云端。
启动容器
docker run -p 8000:8000 amazon/dynamodb-local这会在 http://localhost:8000 上暴露该引擎。
docker-compose
大多数项目会在 docker-compose.yml 中固定它,好让整个团队使用同一个 endpoint:
services:
dynamodb:
image: amazon/dynamodb-local
command: '-jar DynamoDBLocal.jar -sharedDb -dbPath /data'
ports:
- '8000:8000'
volumes:
- dynamodb-data:/data
volumes:
dynamodb-data:持久化
默认情况下 DynamoDB Local 是内存中运行的 —— 容器一停止,每张表都会消失。有两个标志可以让它持久化:
-sharedDb让所有客户端使用同一个共享数据库文件(不加它,每组凭据/区域都会得到各自独立的 DB —— 一个常见的“我的表去哪了?”意外)。-dbPath /data加上一个挂载的卷,会把该文件写入磁盘,从而让数据在docker compose down之后依然存在。
将 SDK 指向它
只需更改 endpoint —— 凭据可以是任意的占位值:
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({
endpoint: 'http://localhost:8000',
region: 'local',
credentials: {accessKeyId: 'x', secretAccessKey: 'x'}
});创建一张表
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像这样的单表 PK/SK schema 是一个不错的默认选择。加载固定数据时,用 DynamoDB-JSON 转换器把纯 JSON 转换为传输格式。
验证容器已启动且表已就位:
aws dynamodb list-tables --endpoint-url http://localhost:8000用 GUI 浏览它
CLI 调用很快就会变得繁琐。常见的选择是开源的 dynamodb-admin 网页 UI 或一个桌面客户端。DynoTable 直接连接到 localhost:8000(或任意 LocalStack endpoint —— 参见连接 DynamoDB Local 与 LocalStack),让你用与处理云端表完全相同的 UI 来浏览、用 SQL Workbench 查询并编辑本地表 —— 无需 aws CLI 来回往返。