AWS Lambda/APIG - 新 Sequelize 的新 PostgresDialect 的新 ConnectionManager 出错
Posted
技术标签:
【中文标题】AWS Lambda/APIG - 新 Sequelize 的新 PostgresDialect 的新 ConnectionManager 出错【英文标题】:AWS Lambda/APIG - Error at new ConnectionManager at new PostgresDialect at new Sequelize 【发布时间】:2018-09-25 01:03:12 【问题描述】:我正在使用 AWS Lambda 和使用 Nodejs 的 API Gateway 开发 Web 应用程序。当我通过无服务器离线(指向我的生产数据库,在 AWS RDS 上)使用 localhost 运行我的 api 时,一切正常。但是,当我部署到 AWS 时,我得到以下信息:
模块初始化错误:新 ConnectionManager 出错 (/var/task/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:29:15) 在新的 Postgres 方言 (/var/task/node_modules/sequelize/lib/dialects/postgres/index.js:14:30) 在新的续集 (/var/task/node_modules/sequelize/lib/sequelize.js:239:20) 在 目的。 (/var/task/src/controllers/run-controller.js:4
我认为这意味着连接到数据库时出现了一些问题。我通过 localhost 使用邮递员访问它没有问题,但是使用我的 APIG url,上面的错误被抛出并显示在 cloudwatch 日志中。
请让我知道我可以提供哪些其他信息!
更新 进一步缩小范围,当我在 lambda 控制台中针对我的一个函数运行测试时,它显示以下内容:
"errorMessage": "Please install 'pg' module manually"
我的节点模块似乎不可用?就像我说的,我使用的是 Serverless,sls deploy
不包含节点模块吗?
更新 2 确实存在节点模块 pg 未包含在包中的问题。我已添加 pg 强制包含以下内容:
custom:
webpackIncludeModules:
forceInclude:
- pg
这解决了上述需要手动安装 pg 的问题。但是,我现在只从我部署的函数中获得超时,但它们仍然在本地工作。
【问题讨论】:
您是否将策略附加到 lambda 以访问 RDS?如果没有,那肯定会导致连接失败。 facepalm 谢谢!这几乎肯定是问题所在,我正在考虑添加该政策。 @KimBurgaard - 除了上述更新之外,我还添加了一个带有以下语句的策略: "Effect": "Allow", "Action": [ "rds-db:connect" ], "资源": [ "arn:aws:rds-db:us-west-2:rds-db is not a recognized service
和 connect is not a recognized action
... 有什么建议吗?我发现了问题所在。我不仅需要确保 pg 正确包含在 webpack 中,而且还需要在我的 serverless.yml 中的 provider
部分下设置 VPC 配置:
vpc:
securityGroupIds:
- sg-######
subnetIds:
- subnet-######
- subnet-######
- subnet-######
这为我的所有功能设置了配置,允许它们访问我的数据库。
【讨论】:
以上是关于AWS Lambda/APIG - 新 Sequelize 的新 PostgresDialect 的新 ConnectionManager 出错的主要内容,如果未能解决你的问题,请参考以下文章
Storyboard & Seque:展示的 VC 如何知道展示的 VC 啥时候解散自己?
Disclosure Indicator 不调用 seque 而 Detail Disclosure 调用
iOS Swift 在 NSSUrlSession Completion Handler 之后在 Seque 中传递数据