selmertsxの素振り日記

ひたすら日々の素振り内容を書き続けるだけの日記

LocalでDynamoDBを起動する

モチベーション

aws lambdaの開発において、開発効率の向上のためにlocalで動作が確認できるようにしたい。 そのためには、localでDynamoDBが動くようにしたい。ここでは、そのために必要な方法について記述する。

DynamoDBの起動

DynamoDB ローカル (ダウンロード可能バージョン) のセットアップ - Amazon DynamoDB

このページから、DynamoDBデータベースをDLします。 そして、下記のコマンドでDynamoDBデータベースを起動します。

# dynamoDB起動コマンド
java -Djava.library.path=./db/DynamoDBLocal_lib -jar ./db/DynamoDBLocal.jar -sharedDb

僕は、下記のようなコードを用意してコマンドで実行できるようにしました。

#!/bin/sh

CMDDIR="$(dirname "$(perl -e 'use Cwd "abs_path";print abs_path(shift)' "$0")")"

case "${1:-}" in
  deploy) shift 1; exec "$CMDDIR/prpolice-deploy" "$@";;
  dynamo) shift 1; exec "$CMDDIR/prpolice-dynamo" "$@";;
  local) shift 1; exec "$CMDDIR/prpolice-local" "$@";;
  setup) shift 1; exec "$CMDDIR/prpolice-db-setup" "$@";; # 今回追加したやつ
  *)
    echo 'Usage: prpolice <subcommand> [<args>]'
    echo
    echo 'Subcommands of pfchecker are:'
    echo '  deploy: deploy lambda function'
    echo '  dynamo: run local dynamo db'
    echo '  local: call lambda in local condition'
    echo '  setup: create local dynamodb table'
    echo
    ;;
esac
#!/bin/sh
cd "$(dirname "$(perl -e 'use Cwd "abs_path";print abs_path(shift)' $0)")"
cd ../
java -Djava.library.path=./db/DynamoDBLocal_lib -jar ./db/DynamoDBLocal.jar -sharedDb

Local DynamoDBにAWS CLIからアクセス

aws-cliを利用する場合は簡単です。 下記のoptionを設定すれば、
大抵のコマンドは動きます。 --endpoint-url http://localhost:8000

aws dynamodb create-table \
  --table-name User \
  --attribute-definitions \
    AttributeName=id,AttributeType=S \
  --key-schema AttributeName=id,KeyType=HASH \
  --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
  --endpoint-url http://localhost:8000

ちなみに、aws cliのhelpを読んでも書いてありませんでした。

ローカルエンドポイントの設定 - Amazon DynamoDB

Local DynamoDBにaws-sdkからアクセス

import AWS from "aws-sdk";

const dynamo = new AWS.DynamoDB({
  endpoint: "http://localhost:8000",
  region: "ap-north-east1"
});

設定としてはこれだけです。下記のscriptを実行すると、LocalのDynamoDBにアクセスすることができるようになります。

# sample.ts
import AWS from "aws-sdk";

const dynamo = new AWS.DynamoDB({
  endpoint: "http://localhost:8000",
  region: "ap-north-east1"
});

const params = {
  TableName: "User",
  Item: { Id: { S: "SlackID" }, github: { S: "GitHubID" } }
};

const getParams = {
  Key: {
    Id: {
      S: "SlackID"
    }
  },
  TableName: "User"
};

// put Item
dynamo.putItem(params, (err, data) => {
  console.log(err);
  console.log(data);
});


// get Item
dynamo.getItem(getParams, (err, data) => {
  console.log(err);
  console.log(data);
});

まとめ

Local DynamoDBの実行に関して、ソフトウェアのダウンロードから、AWS CLI / aws-sdk でのアクセス方法について記載しました。案外簡単にできました。

その他

今考えたら Homebrewを使ってDLすればよかったですね。

brewformulas.org