tech.chakapoko.com
Home / AWS / DynamoDB

[DynamoDB]Dockerを使ってローカル環境でDynamoDBを使う

Dockerを使ったDynamoDBの起動

DynamoDBは開発用にローカル環境で動かすためのDockerイメージが配布されています。

次のコマンドで8000番ポートでDynamoDBを起動できます。

$ docker run -p 8000:8000 amazon/dynamodb-local

aws-cliでテーブルを作成する

--endpoint-url http://localhost:8000 を指定します。

create-table — AWS CLI 1.16.184 Command Reference

$ aws dynamodb create-table \
  --endpoint-url http://localhost:8000 \
  --table-name MusicCollection \
  --attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
  --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
  --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5

テーブル作成に成功すると次のような結果が出力されます。

{
    "TableDescription": {
        "AttributeDefinitions": [
            {
                "AttributeName": "Artist",
                "AttributeType": "S"
            },
            {
                "AttributeName": "SongTitle",
                "AttributeType": "S"
            }
        ],
        "TableName": "MusicCollection",
        "KeySchema": [
            {
                "AttributeName": "Artist",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "SongTitle",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "ACTIVE",
        "CreationDateTime": 1561425583.809,
        "ProvisionedThroughput": {
            "LastIncreaseDateTime": 0.0,
            "LastDecreaseDateTime": 0.0,
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 5,
            "WriteCapacityUnits": 5
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/MusicCollection"
    }
}

aws-sdkからのアクセス

aws-sdk を使ってアクセスするときもendpointを指定します。

'use strict';

const AWS = require('aws-sdk');

AWS.config.update({
  region: 'ap-northeast-1',
  endpoint: 'http://localhost:8000'
});

const docClient = new AWS.DynamoDB.DocumentClient();

const putParam = {
  TableName: 'MusicCollection',
  Item: {
    Artist: 'The Beatles',
    SongTitle: 'Please Please Me',
  }
};

const getParam = {
  TableName: 'MusicCollection',
  Key: {
    Artist: 'The Beatles',
    SongTitle: 'Please Please Me',
  }
};

const data = docClient.put(putParam, (err) => {
  if (err) throw err;

  docClient.get(getParam, (err, data) => {
    if (err) throw err;

    console.log(data);
  });
});

このスクリプトを実行すると次のような出力が得られます。

{ Item: { Artist: 'The Beatles', SongTitle: 'Please Please Me' }