ローカル開発環境：boto3 × DynamoDB Localでテーブル作成まで試してみた記録

## はじめに

この記事では、AWSのDynamoDBをローカル環境で再現する方法について紹介します。

本番環境と同じようなAPIで開発・テストを行える「DynamoDB Local」を使うことで、インターネット接続やAWSアカウントが不要になります。

**参考文献**

https://dev.classmethod.jp/articles/try_dynamodb_local/

https://qiita.com/to-fmak/items/3a6df367196ed216b1a4

**個人のまとめ記事となっておりますが、温かい目で見守っていただければ幸いです。**

## 書こうと思ったきっかけ

個人的な開発の一環で、DynamoDBをローカルで試したい場面がありました。

https://aws.amazon.com/jp/dynamodb/

本番環境への影響を避けつつ、スムーズに開発を進めるために、ローカル環境でのDynamoDB構築手順を記事にまとめておこうと思いました。

## DynamoDB Localとは？

* AWS公式のDynamoDBエミュレーター（ローカル実行）
* 本番と同じAPI（boto3など）で操作可能
* インターネット不要、無料で利用可能

**参考文献**

https://hub.docker.com/r/amazon/dynamodb-local

https://zenn.dev/icck/articles/5707ef0dbff544

## 実際にやってみた（おすすめはDocker）

#### 最小構成（とりあえず動かすだけ）

```bash
docker run -d -p 8000:8000 amazon/dynamodb-local
```

* `-d`：バックグラウンド実行
* `-p 8000:8000`：ホスト → コンテナのポート転送

**起動後の画面**

![Screenshot 2025-05-25 at 10.51.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a5b8348b-1774-41e0-9a41-e084790cd2bf.png)

DynamoDB Local が正しく起動しているか確認するために実行した `docker ps` コマンドの出力ログです。

![Screenshot 2025-05-25 at 10.55.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/7203a8b4-3142-42fa-a50e-e150d8cb054c.png)

#### データ永続化付き（再起動しても保持）

```bash
docker run -d -p 8000:8000 \
  -v $PWD/dynamodb_data:/home/dynamodblocal/data \
  amazon/dynamodb-local \
  -jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data
```

* `-v`：永続化ディレクトリマウント
* `-sharedDb`：単一DBファイルで共有
* `-dbPath`：データ保存パス指定

#### docker-composeを使う場合

```yaml
version: '3.8'

services:
  dynamodb:
    image: amazon/dynamodb-local
    container_name: macbookpro-dynamodb-1
    ports:
      - "8000:8000"
    volumes:
      - ./dynamodb_data:/home/dynamodblocal/data
    command: ["-jar", "DynamoDBLocal.jar", "-sharedDb", "-dbPath", "/home/dynamodblocal/data"]
```

起動：

```bash
docker compose up -d
```

確認コマンド（もちろんデータは空）：

```bash
aws dynamodb list-tables --endpoint-url http://localhost:8000
```

レスポンス例：

```json
{"TableNames":[]}
```

## データを入れて確認してみた

### 1. boto3 のインストール

まずは AWS SDK for Python（boto3）をインストールします。

```bash
pip install boto3
```

※ すでにインストールされている場合はこのステップは不要です。

**こんな感じで問題なくインストールできました**

![Screenshot 2025-05-25 at 12.06.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/2f2a355e-6a27-43b5-9b11-930a16e8d4ea.png)

### 2. テーブル作成用Pythonスクリプト

以下のコードを `create_table.py` という名前で保存します。

```python
# create_table.py
import boto3

# DynamoDBローカルに接続（endpoint_url を忘れずに）
dynamodb = boto3.client('dynamodb', endpoint_url='http://localhost:8000')

# "Users" テーブルを作成
dynamodb.create_table(
    TableName='Users',
    KeySchema=[
        {'AttributeName': 'id', 'KeyType': 'HASH'}  # パーティションキー
    ],
    AttributeDefinitions=[
        {'AttributeName': 'id', 'AttributeType': 'S'}  # 文字列型
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 5,
        'WriteCapacityUnits': 5
    }
)

print("作成しました！")
```

---

### 3. スクリプトの実行

ターミナルで以下のコマンドを実行します：

```bash
python create_table.py
```

成功すれば以下のように表示されます：

```
作成しました！
```

確認コマンド（"Users" テーブルが作成されている）：

```bash
aws dynamodb list-tables --endpoint-url http://localhost:8000
```

レスポンス例：

```json
{
    "TableNames": [
        "Users"
    ]
}
```

**実際のターミナル画面**

![Screenshot 2025-05-25 at 11.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6ceb1425-8f95-4a92-b52e-04440de26bb1.png)



## まとめ

ここまで読んでいただき、ありがとうございました！ローカルでDynamoDBの挙動を検証したい場合、DynamoDB Localがとても簡単で便利だと感じました！

今後の開発でも役立つので、手元に環境を整えておくと安心だと思いました...！