今からお前んちこいよ

多摩川沿いにて細々とお勉強。

DynamoDBをローカルで〜DynamoDBLocalの使い方〜

日本語 | English

概要

AWSサービスのDynamoDBをローカルで動かすことができるDynamoDBLocal
用途的には、実際にDynamoDBサービスを使う前段階の開発環境用、サーバー上に配置して本稼働も良いでしょう。

公式ページ)

docs.aws.amazon.com

必要なもの

  • JRE (ここでは7にしてます)
  • DynamoDB.local (公式ページからDL)
    今回は dynamodb_local_2016-05-17.tar.gz を使用
  • アクセス言語 ※ 必要であれば

ブラウザからアクセスできれば、
ローカルコンソールからjsonを投げるだけでも操作可能。
今回はブラウザからjavascriptで操作します。

起動

jarを起動でおk。

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001

こんな感じで起動する。

$ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 8001
Initializing DynamoDB Local with the following configuration:
Port:   8001
InMemory:       false
DbPath: null
SharedDb:       false
shouldDelayTransientStatuses:   false
CorsParams:     *

ブラウザでDynamoDBと戯れる

DBを起動したら、 http://localhost:8001/shell/ でブラウザから確認。
左ペインにクエリを書いて、▶で実行、右ペインに実行結果が表示される。

f:id:hakopako03:20160711113004p:plain

まずはアクセスキー(作業DBファイル)を決めましょう

右上の設定ボタンからアクセスキーを指定する。
このアクセスキーでローカルDBファイルが区別される。
f:id:hakopako03:20160711113023p:plain

とりあえずこんなクエリを流してお近づきになればいいんじゃないですかね?

Create Table
var params = {
    TableName: "tbl_sample",
    KeySchema: [
        {
            AttributeName: "id",
            KeyType: "HASH"
        }
    ],
    AttributeDefinitions: [
        {
            AttributeName: "id",
            AttributeType: "N"
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 1, 
        WriteCapacityUnits: 1
    }
};

dynamodb.createTable(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});
Put Item
var params = {
    TableName: "tbl_sample",
    Item: { 
        id: 1,
        name: "apple",
        price: 120,
    },
    ReturnValues: "NONE",
    ReturnConsumedCapacity: "NONE",
    ReturnItemCollectionMetrics: "NONE"
};
docClient.put(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});
Scan
var params = {
    TableName: 'tbl_sample',
    Limit: 10,
    ConsistentRead: false,
    ReturnConsumedCapacity: 'NONE', 
};
dynamodb.scan(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response
});

終わりに

クエリのサンプルも画面右上メニューに一通りあるので割と容易に遊べる。
ただ、ほんまもんのDynamoDBと若干挙動違くない?ってのも過去にはあったので、その際はあくまで開発用・戯れ用と捉えて使ったほうがいいかもしれない。