2017年4月22日

DynamoDBローカルを使ってみる

Share

公式ドキュメント

前提

  • AWS CLIの設定とJavaが導入済み
    $ aws --version
    aws-cli/1.11.76 Python/2.7.10 Darwin/16.5.0 botocore/1.5.39
    
    $ java -version
    java version "1.8.0_121"
    Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
    

ダウンロード

$ cd your_path
$ mkdir dynamodb_local_latest
$ curl -sL https://s3-ap-northeast-1.amazonaws.com/dynamodb-local-tokyo/dynamodb_local_latest.tar.gz | tar zx -C your_path/dynamodb_local_latest

実行

$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

Initializing DynamoDB Local with the following configuration:
Port:	8000
InMemory:	false
DbPath:	null
SharedDb:	true
shouldDelayTransientStatuses:	false
CorsParams:	*

実行オプション

-cors value

JavaScript で CORS (Cross-Origin Resource Sharing) のサポートを有効にします。特定のドメインのカンマ区切りの “許可” リストを指定する必要があります。 -cors のデフォルト設定は、パブリックアクセスを許可するアスタリスク(*)です。

-dbPath value

DynamoDB がそのデータベースファイルを書き込むディレクトリ。このオプションを指定しない場合、ファイルは現在のディレクトリに書き込まれます。 -dbPath と -inMemory の両方を同時に指定することはできません。

-delayTransientStatuses

DynamoDB で特定のオペレーションの遅延を発生させます。DynamoDB は、テーブルやインデックスでの作成/更新/削除オペレーションなど、一部のタスクをほぼ瞬時に実行できます。 ただし、実際の DynamoDB サービスでは、それらのタスクにはより多くの時間が必要です。 このパラメーターを設定すると、DynamoDB は Amazon DynamoDB ウェブサービスの動作をより正確にシミュレートできます(現在、このパラメータではステータスが CREATING または DELETING のグローバルセカンダリインデックスに対してのみ遅延が発生します)。

-help

使用方法の概要とオプションを出力します。

-inMemory

DynamoDB は、データベースファイルを使用する代わりにメモリで実行されます。DynamoDB を停止したとき、保存されるデータはありません。 -dbPath と -inMemory の両方を同時に指定することはできません。

-optimizeDbBeforeStartup

コンピュータで DynamoDB を開始する前に、基になるデータベーステーブルを最適化します。 このパラメータを使用するときは、-dbPath も指定する必要があります。

-port value

DynamoDB がアプリケーションと通信するために使用するポート番号。 このオプションを指定しない場合、デフォルトポートは 8000 になります。

-sharedDb

DynamoDB は、認証情報とリージョンごとに別のファイルを使用する代わりに、単一のデータベースファイルを使用します。 -sharedDb を指定すると、すべての DynamoDB クライアントは、リージョンと認証情報の設定にかかわらず、テーブルの同じセットを操作します。

動作確認

テーブルリストを表示

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

テーブルを作成

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

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

テーブルリストを表示

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

できた。