AWS Lambda Dynamo AWS SDK Node.js Метод запроса

Здравствуйте, у меня есть следующий код Lambda, основанный на Node.js. Я не могу вызвать метод запроса для получения данных.

Ввод: { 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.info(JSON.stringify(params));
    ddb.query(params, (err, data) => {
        // Console.log('Not executing this part !!!')
        if (err) console.info(err);
        console.info(data);
    });
};

Метод запроса даже не вызывается или регистрируется какая-либо ошибка. Мне действительно нужна помощь.

какую версию nodejs вы используете в конфигурации Lambda?

Conti 13.06.2018 13:43
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
Доступ AWS Java Lambda к экземпляру AWS RDS MySQL с помощью CDK
В этой статье мы рассмотрим, как включить доступ Java Lambda к экземпляру AWS RDS MySQL.
1
1
244
1

Ответы 1

Поскольку у вас есть журналы консоли, вы можете отлаживать свой код с помощью cloudwatch, чтобы проверить журналы лямбда.

Вы можете выбрать свою лямбду, и если вы видите какие-либо журналы выполнения, вы можете щелкнуть для получения более подробной информации, и вы найдете там свои журналы консоли

Вызов 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.info(JSON.stringify(params));
    executeQuery(params).then((data) => {
        console.info('sucess');
        context.done(data);
    }).catch((err) => {
        console.info('Error occurred');
        context.done(error);
    })
};

Речь идет не о журналах CloudWatch. Это работает. Я могу видеть там журналы, когда устанавливаю его в качестве триггера для таблицы db динамо. Но моя функция запроса не вызывается.

Naveen Vignesh 13.06.2018 12:41

Вы не используете обратный вызов context.done после выполнения своей задачи. Пожалуйста, прочтите мой ответ о кодовой базе

Chandani Patel 13.06.2018 12:56

Использование обещания не требуется. Хотя документ этого не требует. Все, что мне нужно знать, почему мой метод query () клиентского объекта динамо не выполняется.

Naveen Vignesh 13.06.2018 13:18

лямбда-функция требует вызова context.done для ожидания выполнения, иначе лямбда выйдет по таймауту, а время по умолчанию - 3 с для лямбда. Если вы не хотите выполнять ее с обещанием, попробуйте увеличить время ожидания лямбда, вы должны увидеть журналы

Chandani Patel 13.06.2018 13:29

В настоящее время тестирую его в онлайн-редакторе aws с помощью node.js v8.x.x

Naveen Vignesh 14.06.2018 07:58

Я прошу вас увеличить время выполнения лямбда-выражения с консоли aws. Обратитесь к этому изображению files.readme.io/13d03c1-jiralambda-advanced.png

Chandani Patel 14.06.2018 08:30

Другие вопросы по теме