无法在AWS Lambda中使用pg-promise查询AWS RDS

问题描述

我有一个lambda函数,该函数 AWS API Gateway Websockets API 触发。只需使用 pg-promise Postgres 查询我的 AWS RDS ,然后控制台记录结果。运行此命令,它将永远不会运行查询或返回调用'RESULT'console.log。

我已将查询替换为插入数据库表中的查询,并且运行该数据库时未更改该数据库

考虑到AWS Lambda的重用Node环境的行为,我是否听说过是否需要手动担心数据库连接的问题回答不一。

有人知道这里可能出什么问题吗?我认为这可能是由于数据库连接或我对async await的使用。

const chalk = require('chalk');
const {getAllTopics} = require('./SubscriptionsAPI');
const db = require('./dbConfig').db;

async function main(event) {
  // Unpack required data from event
  const {routeKey} = event.requestContext;

  // Process Event
  try {
    if (routeKey === '$connect') {
      console.log("Getting Topics");
      const result = await db.query('SELECT * from "Topic"');
      console.log(chalk.bgBlue('RESULT'),result);
      return result;
    }
  } catch(error) {
    console.log(chalk.bgRed('SERVER ERROR'),chalk.red(error.message),error);
  }
}

exports.handler = main;

这是我要从中导入db接口的dbConfig.js文件

try {
  require('dotenv').config();
} catch {
}

const pgp = require('pg-promise')();

const config = {
  host: process.env.RDS_HOSTNAME,port: process.env.RDS_PORT,user: process.env.RDS_USERNAME,password: process.env.RDS_PASSWORD,database: process.env.RDS_DB_NAME,max: process.env.RDS_MAX
};

let db = pgp(config);

module.exports = {
  db,};

这是日志。如您所见,它在查询之前调用console.log,但在等待之后调用console.log。

CloudWatch Logs as Image

2020-11-01T08:51:48.570-05:00   START RequestId: 24abf63c-dffc-4b52-8329-6e47e313ce6e Version: $LATEST

2020-11-01T08:51:48.572-05:00   2020-11-01T13:51:48.572Z 24abf63c-dffc-4b52-8329-6e47e313ce6e INFO Getting Topics

2020-11-01T08:52:18.603-05:00   END RequestId: 24abf63c-dffc-4b52-8329-6e47e313ce6e

2020-11-01T08:52:18.603-05:00   REPORT RequestId: 24abf63c-dffc-4b52-8329-6e47e313ce6e Duration: 30030.61 ms Billed Duration: 30000 ms Memory Size: 128 MB Max Memory Used: 78 MB

2020-11-01T08:52:18.603-05:00   2020-11-01T13:52:18.603Z 24abf63c-dffc-4b52-8329-6e47e313ce6e Task timed out after 30.03 seconds

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)