Aws lambda AWS Lambda Dynamo AWS SDK Node.js查询方法问题

Aws lambda AWS Lambda Dynamo AWS SDK Node.js查询方法问题,aws-lambda,amazon-dynamodb,aws-sdk,Aws Lambda,Amazon Dynamodb,Aws Sdk,您好,我有以下基于Node.js的Lambda代码。我无法调用查询方法来检索数据 输入:{key:'value'}--使用测试事件输入 var AWS = require('aws-sdk'); AWS.config.update({region: 'us-east-2'}); var ddb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'}); exports.handler = async (event, contex

您好,我有以下基于Node.js的Lambda代码。我无法调用查询方法来检索数据

输入:
{key:'value'}
--使用测试事件输入

var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-2'});
var ddb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

exports.handler = async (event, context) => {
    const params = {
        TableName: 'Chapter',
        IndexName: 'subjectId-index', // Global Secondary Index
        KeyConditionExpression: 'subjectId = :subjectId',
        ExpressionAttributeValues: {
            ':subjectId': event.key,
        },
    };
    console.log(JSON.stringify(params));
    ddb.query(params, (err, data) => {
        // Console.log('Not executing this part !!!')
        if (err) console.log(err);
        console.log(data);
    });
};

甚至没有调用查询方法或记录任何错误。我真的需要一些帮助。

由于您有控制台日志,您可以使用cloudwatch调试代码以检查lambda日志

您可以选择lambda,如果您看到任何执行日志,您可以单击查看更多详细信息,您将在那里找到控制台日志

调用context.done

您可以尝试的示例程序。我只是写的,没有试过

var AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-2' });
var ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: '2012-08-10' });

const executeQuery = (params) => {
    return new Promise(function (resolve, reject) {
        ddb.query(params, (err, data) => {
            if (err) reject(err);
            resolve(data);
        });
    });
}
exports.handler = async (event, context) => {
    const params = {
        TableName: 'Chapter',
        IndexName: 'subjectId-index', // Global Secondary Index
        KeyConditionExpression: 'subjectId = :subjectId',
        ExpressionAttributeValues: {
            ':subjectId': event.key,
        },
    };
    console.log(JSON.stringify(params));
    executeQuery(params).then((data) => {
        console.log('sucess');
        context.done(data);
    }).catch((err) => {
        console.log('Error occurred');
        context.done(error);
    })
};

这与cloudWatch日志无关。当我将它设置为dynamo db表的触发器时,我可以看到那里的日志。但是没有调用我的查询函数。您在完成任务后没有使用callback contex.done。请阅读我对codebaseUsing承诺的回答,这不是必需的。事件文档不需要这样做。我只需要知道为什么我的查询()dynamo客户端对象的方法未执行。lambda函数需要调用contex.done以等待执行,否则lambda将在超时时退出&lambda的默认时间为3s如果您不想使用promise执行,请尝试增加lambda的超时时间。您应该能够在aws联机编辑器中看到正在使用node.js v8.x.x在Lambda配置中使用哪个版本的nodejs?