Lambda 在连接到 RDS PostgreSQL 数据库时不一致地超时
Lambda inconsistently times out when connecting to RDS PostgreSQL database
我创建了一个与 RDS 中的 PostgreSQL 数据库不一致连接的 Lambda。
当它工作时,它会在很短的时间内连接并完成查询。小于100ms,通常只有20ms。我可以执行这个 lambda 十到二十次,它会正常工作。但最终,它在尝试连接到数据库时卡住了。
连接最终会超时。我已将超时设置为三十秒。延长它似乎没有什么不同。
当确实卡住的时候,有时候我可以等半小时左右再试一下就可以了。有时它仍然会失败,即使过了一天。
当我上传一个新的 zip 时,它通常会工作一段时间。有时,当它在上传新 zip 后没有立即连接到数据库时,我可以通过在 AWS Lambda 控制台中编辑 lambda 并从那里单击部署来让它工作。
有没有人见过这种行为?我究竟做错了什么?
我是节点和 Lambdas 的新手。我也在 C# 中创建了一个 lambda 并获得了相同的行为。
数据库实例配置正确,只有少量连接。
这是代码示例。我不使用 dbConfig,因为我已将它们存储为环境变量。上传到 Lambda 的 zip 包含此文件和 'pg' 及其依赖项的 node_modules 文件夹。
'use strict';
var pg = require('pg');
exports.handler = async (event, context, callback) => {
var dbConfig = {
username: '<username>',
password: '<password>',
database: '<database>',
host: '<database_endpoint>',
};
var client = new pg.Client(dbConfig);
console.log('Waiting to connect');
await client.connect();
console.log('Connected');
console.log('Querying the database');
var res = await client.query('SELECT COUNT(*) FROM books;'); // 'books' is a table in the database
console.log(res);
await client.end();
console.log('Connection closed');
};
使用 pg.Pool 而不是 pg.Client 没有帮助。
将连接代码移到处理程序之外似乎只适用于回调。回调似乎不再适用于 Lambdas。
Nikhil B 的评论解决了这个问题。我删除了一个路由错误的子网 table 并且连接稳定了。
没有更多等待连接到数据库的超时。
我创建了一个与 RDS 中的 PostgreSQL 数据库不一致连接的 Lambda。
当它工作时,它会在很短的时间内连接并完成查询。小于100ms,通常只有20ms。我可以执行这个 lambda 十到二十次,它会正常工作。但最终,它在尝试连接到数据库时卡住了。
连接最终会超时。我已将超时设置为三十秒。延长它似乎没有什么不同。
当确实卡住的时候,有时候我可以等半小时左右再试一下就可以了。有时它仍然会失败,即使过了一天。
当我上传一个新的 zip 时,它通常会工作一段时间。有时,当它在上传新 zip 后没有立即连接到数据库时,我可以通过在 AWS Lambda 控制台中编辑 lambda 并从那里单击部署来让它工作。
有没有人见过这种行为?我究竟做错了什么? 我是节点和 Lambdas 的新手。我也在 C# 中创建了一个 lambda 并获得了相同的行为。
数据库实例配置正确,只有少量连接。
这是代码示例。我不使用 dbConfig,因为我已将它们存储为环境变量。上传到 Lambda 的 zip 包含此文件和 'pg' 及其依赖项的 node_modules 文件夹。
'use strict';
var pg = require('pg');
exports.handler = async (event, context, callback) => {
var dbConfig = {
username: '<username>',
password: '<password>',
database: '<database>',
host: '<database_endpoint>',
};
var client = new pg.Client(dbConfig);
console.log('Waiting to connect');
await client.connect();
console.log('Connected');
console.log('Querying the database');
var res = await client.query('SELECT COUNT(*) FROM books;'); // 'books' is a table in the database
console.log(res);
await client.end();
console.log('Connection closed');
};
使用 pg.Pool 而不是 pg.Client 没有帮助。
将连接代码移到处理程序之外似乎只适用于回调。回调似乎不再适用于 Lambdas。
Nikhil B 的评论解决了这个问题。我删除了一个路由错误的子网 table 并且连接稳定了。
没有更多等待连接到数据库的超时。