可以在本機執行 DynamoDB 嗎?
可以。AWS 提供 DynamoDB Local,這是一個免費、可下載的 DynamoDB 版本,能以 Docker 映像檔、Java 可執行檔或 Apache Maven 相依項的形式,在你自己的機器上執行。它提供與網路服務相同的 API,所以你可以離線開發與測試,之後只要把程式碼指向 AWS 即可。
三種執行方式
- Docker 映像檔 — 最常見的選擇:一道
docker run,端點就跑在本機連接埠上。 - 可下載的封存檔 — 一支你直接啟動的 Java 應用程式(需要 JRE)。
- Apache Maven 相依項 — 內嵌到 JVM 測試套件裡。
為什麼要在本機開發
資料庫完全在你電腦上自給自足,所以你省下了輸送量、資料儲存與資料傳輸費用 — 開發時也不需要網際網路連線。準備部署時,把程式碼裡的本機端點拿掉,它就會指向 DynamoDB 網路服務。
留意差異
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 連接本機端點的方式,和它連接 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,在 Node v24.18.0 上以 @aws-sdk/client-dynamodb 3.1095.0,對照 DynamoDB Local 3.3.0(amazon/dynamodb-local、Corretto 17.0.17)重現。上方每一行輸出都是引擎自己的原文,未經編輯。