Почему Dynamodb.put не работает в лямбда-функции?Возвращает ноль.Как отлаживать? - PullRequest
1 голос
/ 08 мая 2019

Отладка лямбды расстраивает.

У меня очень простая лямбда-функция:

const AWS = require('aws-sdk')

const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'ap-southeast-2'});

exports.handler = async (event, context, callback) => {

    const params = {
        TableName: 'people-dev',
        Item: {
            id: '1',
            name: 'person',
            email: 'person@example.com'
        }
    };

    dynamodb.put(params, (err, data) => {
        if(err) {
            callback(err, null)
        } else{
            callback(null, data)
        }

    });

};

Ответ теста:

Response:
null

Request ID:
"3d7e9329-3843-4760-917d-4b4d4781dbd7"

Function Logs:
START RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7 Version: $LATEST
END RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7
REPORT RequestId: 3d7e9329-3843-4760-917d-4b4d4781dbd7  Duration: 243.13 ms Billed Duration: 300 ms     Memory Size: 128 MB Max Memory Used: 29 MB  

В «Динамо» ничего не пишется.Ничего полезного не зарегистрировано в cloudwatch.Да, функция имеет полные права доступа к DynamoDB.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Верните async на свое место, поскольку использование обратных вызовов устарело и намного более подвержено ошибкам. Используйте встроенные promise() методы, доступные в node.js aws-sdk, и просто await в этих обещаниях. Если вы хотите устранить ошибки, просто окружите свой код блоком try/catch.

const AWS = require('aws-sdk')

const dynamodb = new AWS.DynamoDB.DocumentClient({region: 'ap-southeast-2'});

exports.handler = async (event) => {

    const params = {
        TableName: 'people-dev',
        Item: {
            id: '1',
            name: 'person',
            email: 'person@example.com'
        }
    };

    await dynamodb.put(params).promise()

    return {
        statusCode: 200,
        body: JSON.stringify({message: 'Success'})
    }

};

Подробнее о async / await

1 голос
/ 08 мая 2019

Проблема заключалась в том, что обработчик выполнялся асинхронно.

exports.handler = async (event, context, ....

Если изменить его на следующее, устранена проблема:

exports.handler = function (event, context, ....
...