gpt4 book ai didi

node.js - AWS Lambda NodeJS 连接到 RDS Postgres 数据库

转载 作者:搜寻专家 更新时间:2023-10-31 23:14:56 28 4
gpt4 key购买 nike

我正在尝试测试我的 Lambda 和 RDS 实例之间的连接。我将它们都放在同一个私有(private)子网上,所有端口都在安全组中打开。当我触发 Lambda 时,我确实看到在 RDS 实例上打开了一个连接。但是,Lambda 在 4 分 40 秒后超时。 PG 环境变量在 Lambda 配置中设置。

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 日志中的连接返回响应 - 或者在响应正文中获得更好的响应?

最佳答案

您需要更好地处理客户端连接。这意味着捕获客户端可能通过的任何异常并正确释放连接。此代码会将查询的输出返回到响应正文:

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);
}
};

关于node.js - AWS Lambda NodeJS 连接到 RDS Postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982115/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com