AWS Lambda NodeJS连接到RDS Postgres数据库 [英] AWS Lambda NodeJS Connect to RDS Postgres Database

查看:313
本文介绍了AWS Lambda NodeJS连接到RDS Postgres数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试测试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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆