LambdaからDynamoDB Localにアクセスする方法

開発時のコストを下げるため、DynamoDBではなくDynamoDB Localで開発するケースは結構あるかと思います。

ただそうなると難しくなってくるのがLambda連携。

そんな問題を解決するためにlambda-localを作ってくれた方がいるので、これを使うとよさそうです。

リポジトリはこちら

https://github.com/ashiina/lambda-local

詳しい設定手順はこちらのブログが参考になります。

http://takamints.hatenablog.jp/entry/2016/02/25/query-aws-dynamodb-by-aws-lambda-function

https://hacknote.jp/archives/18779/

に書いた方法で、アクセス先のDynamoDBをあわせるには、

export AWS_ACCESS_KEY_ID='yourKeyId'

をJavaからアクセスした際のものと共通にしておくこと、以下のようにして、regionおよびendpointを調整しておくことが重要になります。

process.env.TZ = "Asia/Tokyo";
var aws = require('aws-sdk');
aws.config.update({
    region: 'ap-northeast-1'
});

var dynamodb = new aws.DynamoDB({apiVersion: '2012-08-10',region: 'us-east-1',endpoint: "http://localhost:8000"});
var sqs = new aws.SQS({apiVersion: '2012-11-05', region: 'ap-northeast-1'});

exports.handler = function (event, context) {
    console.log(dynamodb); 
     dynamodb.listTables().eachPage(function(err, data) {
    if (err) {
        console.log(err); // an error occurred
    } else if (data) {
        console.log(data);
    }
});
};

DynamoDBだけLocalを見に行くようにしてSQSは普通のエンドポイントを見に行くようにするとかの設定も可能です。

これでローカルだけでDynamoDBとLambdaの動く環境が用意できるようになります!