我正在使用 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/