ローカルPCを汚さずに手元のDockerでDynamoDBを手軽に検証する

前提

この記事の手順で必要なもの。

  • Docker

gitとかawscliとか抜けばDockerだけ。追加のソフトウェアインストールも不要です。

環境構築

この項目がこの記事のメインです。簡単にDynamoDBの検証環境がローカルに構築できます。

# リポジトリをClone
git clone https://github.com/yomon8/dynamodblocal.git

# コンテナをビルド
./dynamodblocal/build.sh

# 起動
./dynamodblocal/start.sh

これで起動しているはずです。

$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
c79e4652985f        dynamodblocal:latest   "/docker-entrypoin..."   6 seconds ago       Up 3 seconds        0.0.0.0:8081->8000/tcp   dyanmodblocal

停止はこちら。

./dynamodblocal/stop.sh

ポートの設定変えたければこちらを修正してください。

$ cat dynamodblocal/config
DYNAMODB_LOCAL_PORT=8081

awscliで接続してみる

以下のプロファイルをawscliの設定ファイル(~/.aws/credentials)に追加します。

[dynamodblocal]
aws_access_key_id =
aws_secret_access_key =
region=ap-northeast-1

上記で設定したプロファイル(--profile)とポート指定したURL(--endpoint-url)を指定してawscliを実行すれば良いのですが、面倒なので簡単なクライアント用意しました。

$ ./dynamodblocal/awscli-dynamodb-local.sh list-tables
{
    "TableNames": []
}

中身はこんな感じでシェルの中身はシンプルです。

#!/bin/bash
if [ $# -eq 0 ];then
  aws dynamodb help
  exit 1
fi
SCRIPT_DIR=$(cd $(dirname $0) && pwd)
source ${SCRIPT_DIR}/config
aws dynamodb --profile dynamodblocal --endpoint-url http://localhost:${DYNAMODB_LOCAL_PORT} "$@"

試しにテーブル作ってみます。

./dynamodblocal/awscli-dynamodb-local.sh create-table \
--table-name Music \
--key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
--attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1

ARNが arn:aws:dynamodb:ddblocal:000000000000:table/Music とローカルになっています。

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

リポジトリみるとわかるのですが東京リージョンのDynamoDBをダウンロードして使っています。必要に応じて関連URLからリージョン毎のDynamoDBに変更して使ってください。 https://github.com/yomon8/dynamodblocal/blob/1st/files/Dockerfile#L7

関連URL

docs.aws.amazon.com

github.com