空の下でひっそりと

てきとーに更新していきます。レーザーカッターや3Dプリンタが好き

簡単なAPIをawsで作成!APIGatewayからlambdaを通してDBから値を返す時に困ったところ

少し前からサーバレスでHPを作ってみたい!と思って、awsを触っています。

今回はlambdaでDynamoDBから値を取得して返すところまでやっており、ほとんどは参考にしたリンクでできたのですが、個人的につまずいたところだけここで紹介していこうと思っています。

参考にしたリンクはこちらです↓

基本的にはこちら(AWSのLambdaとDynamoDBとAPIGatewayの連携 - Qiita)のリンクを参考に進めています。

こちらもかなり参考にしました。 初めての、LambdaとDynamoDBを使ったAPI開発 - Qiita

とりあえずここまでは進められた

"IAMでDynamoDBにアクセス可能なロールの作成"と"DynamoDBにテーブル作り項目の作成をする"までは記事通りにできると思います。

IAM作って

f:id:yabu_sw:20190121234046p:plain

DynamoDB作成

f:id:yabu_sw:20190121233615p:plain

lambdaで関数をテストしようとすると、、、?

ここでいよいよlambdaで関数作成だ、、、!って思ったのですが、DBから取得して値を返すところができずに困ってしまいました。

// ~~~省略~~~

dynamo.query(params, function(err, data) {
    console.log("dynamo_data:", data);
    console.log("dynamo_err:", err);
    context.done(null, data);
});

これがなんか実行できない、、、(一時間くらい調べてよくわかんなかった

一旦ゴールは値を返すところまでにすることにして、とにかく動けという感じで調べてみます。

すると、二つ目のリンクからデータベースの指定したテーブルの値を全部返すdynamo.scanを使う方法が載っていたので、そちらを参考にするとなんとかDBの値を返すことはできました。

regionを自分のDBを作成した場所にしするのと、tablenameはDB作成時に作った名前に変更すれば、さっき作ったテーブル中身を全部返してくれると思います。

僕が作ったのだとこんな感じ↓

var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB({
    region: 'ap-northeast-1' //regionはDBを作ったregion
});
exports.handler = (event, context, callback) => {
    var params = {
        "TableName": "test"
    };
    console.log("event:", event);
    dynamo.scan(params, function(err, data) {
        console.log("dynamo_data:", data);
        console.log("dynamo_err:", err);
        context.done(null, data);
    });
};

いちおうテストして値が返ってくるか検証しましょう。

→大きく詰まったのはこれくらいでしたが、結局指定した値までは取れてないので、そこはまた勉強が必要かな、、、

残るはAPIGatewayの設定

APIGatewayの設定は2つめのリンクを参考にしました。(めっちゃわかりやすかった

初めての、LambdaとDynamoDBを使ったAPI開発 - Qiita

最後に

記事通りに進めて自分が詰まったところを書きました。

参考になればうれしいです!

個人的には、結構簡単なとこで詰まってる気がしてつらい、、、笑

できるとこまでは一応進むことができたので、次はS3を使って静的サイトを作って見ようと思ってます✌️

参考サイト

qiita.com

qiita.com