Amazon DynamoDB は AWS が提供するクラウド専用のマネージドサービスであり、 一般的な Linux サーバーにインストールして本番運用することはできません。
その理由としては以下のようなことがあります。
- 分散アーキテクチャ前提
- AWS 内部の専用インフラで動作
- ストレージやレプリケーションも AWS 側で制御
しかし例外として、開発用途に限りローカル環境で実行させることが可能です。
DynamoDB Local とは
AWS が提供している DynamoDB のローカル実行版です。
- Java ベース
- Docker でも起動可能
- Linux サーバー上でも動く
- ただし本番用途ではない
Setting up DynamoDB local (downloadable version) - Amazon DynamoDB https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html
以下に DynamoDB Local のインストール手順を覚え書きとして記します。
実行環境は WSL2 上の Ubuntu です。Docker を使えば簡単に動かせます。
AWS CLI v2のインストール
まずは AWS CLI をインストールします。
依存パッケージを確認
$ sudo apt update
$ sudo apt install unzip curl -y
AWS CLI v2をダウンロード
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
解凍してインストール
$ unzip awscliv2.zip
$ sudo ./aws/install
動作確認
$ aws --version
aws-cli/2.31.34 Python/3.13.9 Linux/6.6.87.2-microsoft-standard-WSL2 exe/x86_64.ubuntu.24
アンインストール (必要なとき)
$ sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --remove
AWS CLI の設定 (DynamoDB Local用)
AWSアカウントがなくてもOKです。適当なダミーキーを設定します。
$ aws configure --profile local-dynamo
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: ap-northeast-1
Default output format [None]: json
Dockerを使った実行
注意点
- 永続化したい場合は -dbPath オプションを指定してローカルディレクトリをマウント
- AWS 本番とは一部仕様が異なる(特に認証・制限系)
- パフォーマンスやスループットの概念はシミュレートされない
永続化しない場合
$ docker run -d -p 8000:8000 amazon/dynamodb-local
永続化する場合
(1) 保存用ディレクトリを作成(WSL 内)
$ mkdir -p ~/dynamodb_local/data
(2) 永続化付きで起動
$ docker run -d --name ddb-local \
-p 8000:8000 \
--restart unless-stopped \
-v "$HOME/dynamodb_local/data:/home/dynamodblocal/data" \
amazon/dynamodb-local \
-jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data
オプションの意味
-v ...:/home/dynamodblocal/dataコンテナのDB保存先をホスト(WSL)にマウント-sharedDbプロファイル/認証情報に依存しない単一DBに統一(開発時はこれが便利)--restart unless-stoppedWSL 再起動後も自動再起動
(3) 動作確認
$ aws dynamodb list-tables \
--endpoint-url http://localhost:8000 \
--profile local-dynamo
{
"TableNames": []
}
テーブルを作ってコンテナを再起動しても、~/dynamodb_local/data に保存されるので残ります。
$ docker restart ddb-local
Windows側のパスを直接マウントしたい場合
-v "/mnt/c/Users/<YourName>/dynamodb_data:/home/dynamodblocal/data"のように/mnt/c形式で指定する- 権限やパフォーマンスの都合で、WSL内のホームディレクトリに置くのが無難
docker-compose 派なら
# docker-compose.yml
services:
dynamodb:
image: amazon/dynamodb-local
container_name: ddb-local
ports: ["8000:8000"]
command: -jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data
volumes:
- ./data:/home/dynamodblocal/data
restart: unless-stopped
$ mkdir -p ./data
$ docker compose up -d
確認
$ aws dynamodb list-tables \
--endpoint-url http://localhost:8000 \
--profile local-dynamo