node.js - 无法将部署在 AWS Lamda 上的节点 js express API 连接到 AWS RDS(My SQL)
问题描述
我在 AWS Lamda 上部署了我的 node js express 应用程序,我可以使用我的 API 路由器方法,例如 get、post 等。但是当我尝试从 amazon RDS 获取数据时,它在浏览器控制台中返回 502 错误并且没有 DB 调用API 很好地返回了硬编码的响应。我尝试在初始阶段连接我的 API 并使用以下代码
var mysql = require('mysql');
var pool = mysql.createPool({
host: 'rds end point',
user: 'xxxx',
password: 'xxxx',
database: 'TestDb'
});
exports.handler = (event, context,callback) => {
context.callbackWaitForEmptyEventLoop=false;
pool.getConnection(function(err,connection) {
connection.query("select count(*) as count from Classes", function(error,result,fields) {
connection.release();
if(error) callback(error);
else callback(null,result[0].count)
})
})
}
在 LAMDA 控制台日志中,我得到低于错误而不是计数
“errorMessage”:“2019-04-04T12:06:39.020Z 7ffa5ee4-4000-4254-82fc-27617eb9975a 任务在 5.01 秒后超时”
有人帮我解决这个问题吗?
解决方案
确保 RDS 和 Lambda 在同一个安全组中,并且您的 lambda 具有所需的权限
- AmazonRDSFullAccess
- AWSLambdaFullAccess
- AmazonVPCFullAccess
- AWSLambdaExecute
- AWSLambdaVPCAccessExecutionRole。
- AWSLambdaVPCAccessExecutionRole
如果它在 VPC 中创建一个新的 VPC 安全组(用于在 lambda 函数中使用)。并为您的 VPC 添加接受所有流量的入站规则
如果您的函数需要对无法通过 AWS API 或 Internet 访问的资源(如关系数据库)进行网络访问,请将其配置为连接到您的 VPC。
推荐阅读
- laravel - 在 Laravel 的控制器中获取输入数据值
- laravel - Laravel 发送具有多个复选框值的邮件
- python - 更改 numpy 数组中字符串的位置
- javascript - Javascript - 显示类型错误:播放器为空
- ios - 如何检查单击了哪个按钮?
- java - 抛出 Sub-Exception,捕获为 Super Exception 并重新抛出它,但声明 throws Sub-Exception
- png - 是否可以保存在 Google 幻灯片中绘制的具有高 DPI 的绘图?
- stanford-nlp - 斯坦福 NLP regexNER 关于引理
- reactjs - 如何制作动态复选框并使用 fetch post 发布数据?
- reactjs - ReactJS中带有参数问题的路由