可以在本地运行 DynamoDB 吗?
可以。AWS 提供 DynamoDB Local,一个免费的可下载版 DynamoDB,能以 Docker 镜像、Java 可执行程序或 Apache Maven 依赖的形式在你自己的机器上运行。它暴露与 Web 服务相同的 API,所以你可以离线开发和测试,然后把代码直接指向 AWS。
三种运行方式
- Docker 镜像——最常见的选择:一条
docker run,endpoint 就在本地端口上起来了。 - 可下载归档包——一个你直接启动的 Java 应用(需要 JRE)。
- Apache Maven 依赖——把它嵌进 JVM 测试套件里。
为什么要在本地开发
数据库是自包含在你电脑上的,所以你能省下吞吐量、数据存储和数据传输费用——而且开发时不需要联网。等到要部署的时候,你把代码里的本地 endpoint 去掉,它就指向 DynamoDB Web 服务了。
留意差异
DynamoDB Local 模拟的是 API,但它不是生产引擎——AWS 在使用说明里记录了行为差异(例如不强制执行吞吐量)。请把它当成一个功能性的开发/测试替身,而不是性能模型。
我们实测到的三处分歧
我们常年跑着一个 DynamoDB Local 容器,用来复现我们的错误页面上引用的那些错误,这意味着我们经常撞到它的边界。有三处值得在你信任一次绿色的本地测试之前先知道。
预置吞吐量根本不被强制执行。我们建了一张 1 RCU 的表,放进一个 3.5 KB 的项目,然后在关掉 SDK 重试(maxAttempts: 1)的循环里用强一致读把它读回来:
reads=5000 ok=5000 errors=0 elapsed=2.5s rate=1997/s五千次读取,零次限流,对一张只预置了一个单元的表持续跑出每秒约 2,000 个读取单元。同样的循环对着真实服务会在第 49 次读取时抛出 ProvisionedThroughputExceededException。容量类的 bug 在本地是不可能失败的。
有一个错误换了名字。把同一条 PartiQL INSERT 跑两遍,DynamoDB Local 回的是 DuplicateItem,消息为 Duplicate primary key exists in table。而真实服务回的是 DuplicateItemException,消息为 There was an attempt to insert an item with the same primary key as an item that already exists in the DynamoDB table。按错误名分支的错误处理在本地能通过,到了生产就会落空。
有些 API 干脆就不存在。ExportTableToPointInTime 的回答是:
UnknownOperationException: An unknown operation was requested.那并不是真实服务对同一个调用给出的错误,所以一条以 PointInTimeRecoveryUnavailableException 为防护的代码路径,在本地同样无法被演练到。
深入了解
DynamoDB Local 指南一步步走完安装配置,而本地 & LocalStack 连接指南展示了怎么把 GUI 指向它——DynoTable 连接本地 endpoint 的方式和连接 AWS 完全一样。用表达式构建器测试你的第一个查询。
参考资料
- Setting up DynamoDB local (downloadable version) — Amazon DynamoDB Developer Guide
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide
- Deploying DynamoDB locally on your computer — Amazon DynamoDB Developer Guide
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。
这三处分歧于 2026-07-28 针对 DynamoDB Local 3.3.0(amazon/dynamodb-local,Corretto 17.0.17),用 Node v24.18.0 上的 @aws-sdk/client-dynamodb 3.1095.0 复现。上方每一行输出都是引擎自己的,未经编辑。