モチベーション
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すればよかったですね。