node.js - AWS Lambda/APIG - 在新 Sequelize 的新 PostgresDialect 的新 ConnectionManager 处出错

标签 node.js postgresql aws-lambda serverless-framework

我正在使用 AWS Lambda 和 API Gateway 以及 Nodejs 开发网络应用程序。当我通过无服务器离线(指向我的生产数据库,在 AWS RDS 上)使用本地主机运行我的 api 时,一切正常。但是,当我部署到 AWS 时,我得到以下信息:

module initialization error: Error at new ConnectionManager (/var/task/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:29:15) at new PostgresDialect (/var/task/node_modules/sequelize/lib/dialects/postgres/index.js:14:30) at new Sequelize (/var/task/node_modules/sequelize/lib/sequelize.js:239:20) at Object. (/var/task/src/controllers/run-controller.js:4

我认为这意味着连接到数据库时出现了一些问题。我通过本地主机用 postman 点击它没有问题,但是使用我的 APIG url,上述错误被抛出并显示在 cloudwatch 日志中。

请让我知道我可以提供哪些其他信息!

更新 进一步缩小范围,当我在 lambda 控制台中针对我的一个函数运行测试时,它显示以下内容:

"errorMessage": "请手动安装'pg'模块"

我的 Node 模块似乎不可用?就像我说的,我正在使用无服务器,sls deploy 不包括 Node 模块吗?

更新 2 确实存在一个问题,即 Node 模块 pg 未包含在包中。我添加了 pg 以强制包含在以下内容中:

custom:
  webpackIncludeModules:
    forceInclude:
      - pg

这解决了需要手动安装 pg 的上述问题。但是,我现在只从我部署的函数中获取超时,但它们仍然在本地工作。

最佳答案

我想出了问题所在。我不仅需要确保 pg 正确地包含在 webpack 中,而且我还需要在 provider 部分下的 serverless.yml 中设置 VPC 配置:

vpc:
  securityGroupIds:
    - sg-######
  subnetIds:
    - subnet-######
    - subnet-######
    - subnet-######

这为我的所有函数设置了配置,允许它们访问我的数据库。

关于node.js - AWS Lambda/APIG - 在新 Sequelize 的新 PostgresDialect 的新 ConnectionManager 处出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49837840/

相关文章:

sql - PostgreSQL 中 CREATE TABLE 的基本语法

aws-lambda - 始终需要无服务器框架的阶段参数

node.js - 传单JS : the ZOOM moves the elements

javascript - Gulp/Node.js 错误 : connect ECONNREFUSED

java - 使用 aws-secretsmanager-jdbc 和 Node.js 连接到 RDS?

javascript - PUT 请求发送错误后无法设置 header

postgresql - Postgres 重启/复制

postgresql - 如何将新数据附加到 PostgreSQL 中的日志文件

java - 带有 JAVA 和 Docker Toolbox 的 AWS SAM 本地

android - 从 AWS Lambda Node.js 向 Android 手机发送 AWS SNS 通知