使用 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。