AWS Lambda NodeJS连接到RDS Postgres数据库 [英] AWS Lambda NodeJS Connect to RDS Postgres Database
问题描述
我正在尝试测试Lambda和RDS实例之间的连接性.我将它们都放在同一私有子网中,并在安全组中打开了所有端口.当我触发Lambda时,我确实看到RDS实例上打开了一个连接.但是,Lambda在4分钟40秒后超时. PG环境变量在Lambda配置中设置.
I'm trying to test connectivity between my Lambda and an RDS instance. I have them both on the same private subnets with all ports open in the security group. When I trigger the Lambda I do see a connection opened on the RDS instance. However, the Lambda times out after 4 minutes, 40 seconds. The PG environment variables are set in the Lambda configuration.
const { Client } = require('pg');
const client = new Client();
var hello = [
{ name: 'test', description: 'testerface' }
];
exports.handler = async (event, context, callback) => {
// Postgres Connect
client.connect();
const res = client.query('SELECT $1::text as message', ['Hello world!']);
console.log(res);
var response = {
"statusCode": 200,
"headers": {
"Content-Type" : "application/json"
},
"body": JSON.stringify(hello),
"isBase64Encoded": false
};
callback(null, response);
};
如何从Lambda的日志中获取连接的响应-甚至在响应正文中更好?
How can I get back the response from the connection in the Lambda's logs - or even better in the response body?
推荐答案
您需要更好地处理客户端连接.这意味着捕获客户端可能通过的任何异常并正确释放连接.这段代码会将查询的输出返回到响应主体:
You need to handle the client connection better. That means catching any exceptions that the client may through and releasing the connection properly. This code will return the output of the query to the response body:
const pg = require('pg')
const pool = new pg.Pool()
async function query (q) {
const client = await pool.connect()
let res
try {
await client.query('BEGIN')
try {
res = await client.query(q)
await client.query('COMMIT')
} catch (err) {
await client.query('ROLLBACK')
throw err
}
} finally {
client.release()
}
return res
}
exports.handler = async (event, context, callback) => {
try {
const { rows } = await query("select * from pg_tables")
console.log(JSON.stringify(rows[0]))
var response = {
"statusCode": 200,
"headers": {
"Content-Type" : "application/json"
},
"body": JSON.stringify(rows),
"isBase64Encoded": false
};
callback(null, response);
} catch (err) {
console.log('Database ' + err)
callback(null, 'Database ' + err);
}
};
这篇关于AWS Lambda NodeJS连接到RDS Postgres数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!