首页 > 解决方案 > 无法将部署在 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 秒后超时”

有人帮我解决这个问题吗?

标签: node.jsaws-lambdaamazon-rds

解决方案


确保 RDS 和 Lambda 在同一个安全组中,并且您的 lambda 具有所需的权限

  • AmazonRDSFullAccess
  • AWSLambdaFullAccess
  • AmazonVPCFullAccess
  • AWSLambdaExecute
  • AWSLambdaVPCAccessExecutionRole。
  • AWSLambdaVPCAccessExecutionRole

如果它在 VPC 中创建一个新的 VPC 安全组(用于在 lambda 函数中使用)。并为您的 VPC 添加接受所有流量的入站规则

如果您的函数需要对无法通过 AWS API 或 Internet 访问的资源(如关系数据库)进行网络访问,请将其配置为连接到您的 VPC。


推荐阅读