AWS Lambda函数未写入DynamoDB

时间:2019-11-16 03:23:59

标签: javascript amazon-web-services aws-lambda amazon-dynamodb

我有一个lambda函数,该函数应该正在写入数据库。当我在本地计算机上运行它时,它可以工作,但是当我将其上载到lambda并对其进行测试时,它不会在数据库中放入任何内容。我使用的功能具有对DynamoDB的完全访问权限,并且与从笔记本电脑运行DynamoDB时完全一样的代码可以正常工作。知道为什么会这样吗?

这是我的lambda。 dao类包含实际访问dynamo的代码。我只是想立即上传一些常量字符串。

const DAO = require('./PostStatusDAO.js');

exports.handler = async (event, context, callback) => {
    var dao = new DAO();
    dao.post("this is a test", "@jordan", "@matt", "none");       
    const response = {
        statusCode: 200,
        body: {
            result: "good"
        }
    };
    return response;
};
const AWS = require('aws-sdk');

const ddb = new AWS.DynamoDB.DocumentClient({region: 'us-west-2'});

class PostStatusDAO {
    post(in_text, in_user, in_author, in_attachment) {
        var params = {
            Item: {
                user: String(in_user),
                timestamp: Date.now(),
                author: String(in_author),
                text: String(in_text),
                attachment: String(in_attachment),
            },

            TableName: 'Feed',
        };

        console.log(params);

        var result = ddb.put(params, (err, data) => {
            console.log("callback");
            if(err) {
                console.log("Error: ", err);
            } else {
                console.log("Data: ", data);
            }
        });

        // console.log(result);
    }
}

module.exports = PostStatusDAO;

1 个答案:

答案 0 :(得分:1)

要查看函数失败的原因,您必须像这样同步地运行将承诺返回给调用方/运行时

const DAO = require('./PostStatusDAO.js');

exports.handler = async(event, context, callback) => {
    var dao = new DAO();

    // Return new promise 
    return new Promise(function(resolve, reject) {
     // Do async job
        dao.post("this is a test", "@jordan", "@matt", "none", function(err, data) {
            if (err) {
                console.log("Error: ", err);
                reject(err);
            }
            else {
                console.log("Data: ", data);
                resolve(data);
            }
        })
    })
};

const AWS = require('aws-sdk');

const ddb = new AWS.DynamoDB.DocumentClient({region: 'us-west-2'});

class PostStatusDAO {
    async post(in_text, in_user, in_author, in_attachment, callback) {
        var params = {
            Item: {
                user: String(in_user),
                timestamp: Date.now(),
                author: String(in_author),
                text: String(in_text),
                attachment: String(in_attachment),
            },

            TableName: 'Feed',
        };

        console.log(params);

        return ddb.put(params, callback).promise();
    }
}

module.exports = PostStatusDAO;