入門閱讀時間 1 分鐘

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

已更新