适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误

Posted

技术标签:

【中文标题】适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误【英文标题】:AWS Lambda functions NodeJs for postgreSQL - timeout error 【发布时间】:2020-10-05 03:30:06 【问题描述】:

我是 AWS 新手。我正在尝试使用 Lambda 函数连接到 AWS RDS postgreSQL 实例。我关注了aws documentation。但它使用 python 来处理 Lambda 函数。下面是我的代码。

'use strict';
var pg = require('pg');
exports.handler = function (event, context) 
    var dbConfig = 
        username: '<username>',
        password: '<password>',
        database: '<database>',
        host: '<db-endpoint>',
    ;
    var client = new pg.Client(dbConfig);
    try 
        client.connect();
        context.callbackWaitsForEmptyEventLoop = false;
        client.end();
    
    catch (err) 
        console.log(err);
        client.end();
    
;

我收到如下超时错误

START RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847 Version: $LATEST
2020-06-15T16:28:18.911Z    368e619e-ed9d-4241-93a5-764ee01aa847    INFO    connected
END RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847
REPORT RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847  Duration: 20020.16 ms   Billed Duration: 20000 ms   Memory Size: 128 MB Max Memory Used: 70 MB  Init Duration: 150.01 ms    
2020-06-15T16:28:38.901Z 368e619e-ed9d-4241-93a5-764ee01aa847 Task timed out after 20.02 seconds

请告知错误。

我还有几个问题要确认我的代码是否正确

我为 db-endpoint 提供了 db 实例端点 url。那正确吗?或者如果不是我应该在那里使用什么?

对于像我这样的初学者,是否有任何适当的文档可用,关于使用 nodejs 连接 RDS 上的 postgres 的 Lambda 函数?

【问题讨论】:

【参考方案1】:

你没有从 lambda 返回任何东西。所以请求会一直挂起而没有响应,直到超时。

使用提供给处理程序的第三个参数callback 来响应或返回Promise

'use strict';
var pg = require('pg');
exports.handler = function (event, context,callback) 
    var dbConfig = 
        username: '<username>',
        password: '<password>',
        database: '<database>',
        host: '<db-endpoint>',
    ;
    var client = new pg.Client(dbConfig);
    try 
        client.connect();
        context.callbackWaitsForEmptyEventLoop = false;
        client.end();

        //send the response
        callback(null,"Some Response")
    
    catch (err) 
        console.log(err);
        client.end();
        callback(err)
    
;

AWS 示例:AWS Lambda NodeJS Connect to RDS Postgres Database

您可以在此处阅读包含所有方法和属性的官方 js 文档:https://docs.aws.amazon.com/AWSjavascriptSDK/latest/AWS/RDS.html

希望这会有所帮助!

【讨论】:

感谢您的回复。有用。但我有一个问题。在您分享的另一个堆栈溢出问题中,池函数用于初始化。但在我的代码中,我使用了客户端功能。有什么区别? 它被称为连接池。 ashnik.com/… 谢谢。 AWS 文档根本没有帮助。尤其是像我这样的初学者。是否有任何其他教程或文档可以简单地解释使用 node.js 用于 RDS postgres 的 lambda 函数? @HemantParasha 为什么在 lambda 中需要池化?

以上是关于适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:重用适用于虚拟表数据的函数代码

适用于 AWS 的 SaaS 或 DaaS

适用于网站的 AWS 服务

ruby 适用于AWS的SD

Postgresql:适用于(时间戳,字符串)的多列索引

使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域