Время лямбда-функции истекло при попытке записи данных в DynamoDB - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь написать лямбда-функцию для вставки нового пользователя в мою таблицу DynamoDB Users

Таблица имеет UserId в качестве индекса

¿Почему этот код не? т работа?

'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid')
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-2'});

exports.handler = function(event, context, callback) {
    
    const params = {
        User: {
            "UserId":uuid.v1(),
            "username":event.username
        },
        TableName: process.env.TABLE_NAME
    }
    docClient.put(params, function(err,data){
        callback(err, data)
    })
  
};

Мой лямбда-тест прост:

{
  "username": "Javierito"
}

Этот тест не возвращает:

Время выполнения задачи истекло через 3,00 секунды

  • Я пытался вручную вставить идентификатор пользователя в тест
  • У лямбда-функции уже есть разрешение AmazonDynamoDBFullAccess
  • I успешно поместил имя таблицы в переменные окружения лямбда-функции
  • Я также проверил, что область базы данных правильна

1 Ответ

2 голосов
/ 17 марта 2020

Основная проблема заключается в том, что модуль uuid не может быть загружен. Он не доступен в стандартной среде Lambda. Ошибка загрузки этого модуля занимает более 3 секунд, и, следовательно, ваша функция Lambda перестает работать (потому что вы используете 3 секунды по умолчанию). Вы можете включить дополнительные модули, такие как uuid, в загрузку развертывания или использовать Lambda Layers.

Если вы увеличите время ожидания Lambda до 30 секунд, вы увидите, что оно завершится с:

"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'uuid'"

Кроме того, несвязанный, ваш params объект неверен. Свойство в нем должно называться Item, а не User.

...