首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambda函数在10秒后超时

Lambda函数在10秒后超时
EN

Stack Overflow用户
提问于 2017-09-07 16:44:17
回答 1查看 1.8K关注 0票数 0

代码:

代码语言:javascript
复制
const knex = require('knex')({
    client: 'mysql',
    connection: {
        host: process.env.database_host,
        user: process.env.database_user,
        password: process.env.database_pass,
        database: process.env.database_db,
        charset: 'utf8'
    }
});
const bcrypt = require('bcrypt');
const bookshelf = require('bookshelf')(knex);
const User = bookshelf.Model.extend({
    tableName: 'users'
});

const checkValues = (values) => {
    // todo: add data validation
    return true;
};

exports.test = (database) => {
    // todo: add tests
};

exports.handler = (event, context, callback) => {
    let salt = bcrypt.genSaltSync();

    let values = {
        first_name: event.firstname,
        last_name: event.lastname,
        username: event.username,
        date_of_birth: event.birthday,
        password: bcrypt.hashSync(event.password, salt),
        password_salt: salt
    };

    if (!checkValues(values)) {
        callback(null, {
            success: false,
            error: {
                id: 2,
                details: 'data validation error'
            }
        });

        context.done(null, "User not created");

        return;
    }

    try {
        new User({
            'first_name': values.first_name,
            'last_name': values.last_name,
            'username': values.username,
            'date_of_birth': values.date_of_birth,
            'password': values.password,
            'password_salt': values.password_salt
        }).save();

        callback(null, {
            success: true
        });

        context.done(null, "User created");
    } catch (err) {
        console.log(err);

        callback(null, {
            success: false,
            error: {
                id: 1,
                details: 'error inserting user into database'
            }
        });

        context.done(null, "User not created");
    }
};

我正在尝试使用AWS api Gateway和Lambda functions创建基本注册API端点,但是每次我将信息发布到api网关时都会收到错误消息

代码语言:javascript
复制
{
    "errorMessage": "2017-09-07T08:38:50.174Z f2368466-93a7-11e7-b4bc-01142a109ede Task timed out after 10.00 seconds"
}

我尝试过使用不同的数据库库,但似乎总是遇到相同的问题。数据库连接可以工作我知道这一点,因为用户实际上被添加到数据库中的users表中,并且密码被成功地散列。

我也试过使用异步bcrypt,但它对结果没有任何影响,它仍然有效,但显示超时。

Lambda似乎没有正确终止,有什么东西让进程仍然在运行,我不知道是什么,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-09-08 03:08:43

我在使用API网关调用我的lambda时遇到了类似的问题。

API网关默认超时时间为30秒。如果您的响应在30秒内没有准备好,您将超时,但您的lambda仍将运行!

因此可能会尝试在30秒内返回响应。如果没有,从API调用一个lambda并立即返回响应,让第一个lambda调用您的第二个lambda,这将运行到最大时间,即5分钟。

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46091820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档