Как отладить мою вставку динамод не работает - PullRequest
0 голосов
/ 15 июня 2019

Я не могу вставить элемент в мою таблицу DynamodB.

Мой код следующий:

   function insert() {
        const item = {
            itemId: 'itemId',
            name: 'itemName',
            status: 'itemStatus'
        };

        const params = {
            TableName: 'sls-basic-operations-items-dev',
            Item: item
        };

        console.log('ready to insert', params);

        var docClient = new AWS.DynamoDB.DocumentClient();

        docClient.put(params, function (err, data) {
            if (err) {
                console.log(err);
                return false;
            } else {
                console.log(data);
                return true;
            }
        });
    }

    module.exports.handler = async (event) => {
        const message = event.Records[0].Sns.Message;
        console.log('new event to be consumed', message);

        await insert();
}

записи лямбда-журнала тоже не очень подробны.

все, что я вижу, это:

START RequestId: b71ea056-85f0-424d-ad55-4b4571aeeccf Version: $LATEST
2019-06-14T23:13:13.012Z    b71ea056-85f0-424d-ad55-4b4571aeeccf    new event to be consumed
{
    "description": "test item"
}

    2019-06-14T23:13:13.032Z    b71ea056-85f0-424d-ad55-4b4571aeeccf    ready to insert { TableName: 'sls-basic-operations-items-dev',
    Item: { itemId: 'itemId', name: 'itemName', status: 'itemStatus' } }
    END RequestId: b71ea056-85f0-424d-ad55-4b4571aeeccf
    REPORT RequestId: b71ea056-85f0-424d-ad55-4b4571aeeccf  Duration: 119.28 ms Billed Duration: 200 ms Memory Size: 1024 MB    Max Memory Used: 76 MB  

больше ничего и никаких записей в таблице ...

Есть мысли?

1 Ответ

2 голосов
/ 15 июня 2019

Проблема в том, что функция insert() реализована как синхронный вызов функции (она возвращает undefined сразу при вызове docClient.put()), несмотря на намерение быть асинхронным.

Попробуйте изменить последние строки функции insert(), чтобы вернуть обещание:

 return docClient.put(params).promise();

Затем вы можете заключить вызов в insert() в try / catch:

 try {
    const data = await insert();
    console.log('success', data);
 } catch (err) {
    console.log('failure', err);
    throw err;
 }:

Более подробную информацию об использовании Promise и async / await в функциях Lambda можно найти в среде выполнения Node.js 8.10, которая теперь доступна в AWS Lambda * 1020.*

...