0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DynamoDB を Docker で動かす

Last updated at Posted at 2021-09-11

DynamoDB の Docker イメージが公式から提供されていたので、このイメージを使用してローカルに DynamoDB をデプロイしてみます。さらに、ローカルに構築した DynamoDB にデータをインサートしてテーブルの中身を確認するところまでやってみたいと思います。

Docker で DynamoDB を構築

docker-compose.yamlを用意して、次の内容をファイルにコピーして保存します。

docker-compose.yaml
version: '3.8'
services:
  dynamodb-local:
    command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
    image: "amazon/dynamodb-local:latest"
    container_name: dynamodb-local
    ports:
      - "8000:8000"
    volumes:
      - "./docker/dynamodb:/home/dynamodblocal/data"
    working_dir: /home/dynamodblocal

コンテナを立ち上げます。

docker-compose up -d

DynamoDB Local の構築は以上で終わりです。さすが Docker といった感じでとても簡単です。

サンプル: データをインサートする

ローカルに DynamoDB が構築できたら、実際にデータを登録してみます。まずは、テーブルを作成します。

aws dynamodb create-table \
    --region ap-northeast-1 \
    --endpoint-url http://localhost:8000 \
    --table-name animals \
    --key-schema AttributeName=id,KeyType=HASH \
    --attribute-definitions AttributeName=id,AttributeType=S \
    --billing-mode PAY_PER_REQUEST

テーブルが作成できたか、list-tables コマンドを使って確認します。

$ aws dynamodb list-tables --endpoint-url http://localhost:8000
{
    "TableNames": [
        "animals"
    ]
}

テーブルが作成できたら、データをインサートしてみます。今回は、AWS SDK for JavaScript v3を使ってデータを登録してみます。

まずは、必要なモジュールをインストールします。

npm install @aws-sdk/client-dynamodb uuid

insert-data.jsに SDK を使って DynamoDB に登録する処理を書きます。

insert-data.js
const { DynamoDBClient, PutItemCommand } = require("@aws-sdk/client-dynamodb");
const { v4: uuidv4 } = require('uuid');

(async () => {
    const client = new DynamoDBClient({
      region: "ap-northeast-1",
      endpoint: "http://localhost:8000"
    });
    const command = new PutItemCommand({
        TableName: 'animals',
        Item: {
            "id": {"S": uuidv4()},
            "Name": {"S": "pug"},
            "AnimalType": {"S": "Dog"}
        }
    });
    try {
      const results = await client.send(command);
      console.log('result:', results);
    } catch (err) {
      console.error(err);
    }
})();

スクリプトを実行します。

$ node insert-data.js
result: {
  '$metadata': {
    httpStatusCode: 200,
    requestId: 'c910a473-f2a4-41b2-8aab-5cdb6021d0ef',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Attributes: undefined,
  ConsumedCapacity: undefined,
  ItemCollectionMetrics: undefined
}

データが登録できたか、scan コマンドを実行して確認します。

$ aws dynamodb scan --endpoint-url http://localhost:8000 --table-name animals
{
    "Items": [
        {
            "AnimalType": {
                "S": "Dog"
            },
            "id": {
                "S": "350d582d-b9cf-4c3f-9f5e-ef78b5493be6"
            },
            "Name": {
                "S": "pug"
            }
        }
    ],
    "Count": 1,
    "ScannedCount": 1,
    "ConsumedCapacity": null
}

データが登録できているのが確認できました。お金をかけずに DynamoDB を使った開発ができそうですね。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?