首页 > 解决方案 > AWS Lambda 和 Aurora 数据库超时

问题描述

我正在尝试使用 Lambda 函数连接到 Amazon Aurora Serverless 数据库,但是,每次我想建立连接时都会超时。我将 AWSLambdaVPCAccessExecutionRole 附加到我的函数并设置了我的数据库正在其中运行的相同安全组。我的入站和出站规则配置为允许同一安全组内端口 3306 上的 TCP 流量。

从来没有少我得到以下错误:

{
    "errorType": "Error",
    "errorMessage": "connect ETIMEDOUT",
    "code": "ETIMEDOUT",
    "errorno": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true,
    "stack": [
        "Error: connect ETIMEDOUT",
        "    at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:409:13)",
        "    at Object.onceWrapper (events.js:416:28)",
        "    at Socket.emit (events.js:310:20)",
        "    at Socket._onTimeout (net.js:479:8)",
        "    at listOnTimeout (internal/timers.js:549:17)",
        "    at processTimers (internal/timers.js:492:7)",
        "    --------------------",
        "    at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:144:48)",
        "    at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol/Protocol.js:51:23)",
        "    at Connection.connect (/var/task/node_modules/mysql/lib/Connection.js:116:18)",
        "    at Object.<anonymous> (/var/task/src/handlers/CognitoVerifyTrigger.js:50:9)",
        "    at Module._compile (internal/modules/cjs/loader.js:1133:30)",
        "    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)",
        "    at Module.load (internal/modules/cjs/loader.js:977:32)",
        "    at Function.Module._load (internal/modules/cjs/loader.js:877:14)",
        "    at Module.require (internal/modules/cjs/loader.js:1019:19)",
        "    at require (internal/modules/cjs/helpers.js:77:18)"
    ]
}

我认为某处存在配置问题,因为我可以很好地连接到本地测试数据库。但万一我错过了什么是我的代码:

const mysql = require('mysql');

var con = mysql.createConnection({
    host: '*******.*********.eu-central-1.rds.amazonaws.com',
    user: '****',
    password: '****',
    database: 'userdata',
    port: 3306
});
con.connect((err) => {
    if (err) {
        console.log('Failed to establish database connection.');
        throw err;
    }
    console.log('Connection to database has been established.');
});

在这一点上,我不知道为什么连接失败。Lambda 和 RDS 在同一个安全组中运行,Lambda 具有访问 VPC 的权限,并配置了入站/出站规则。使用 EC2 实例时,我可以连接到我的 Aurora 数据库,因此我认为我的 Lambda 配置有问题。

除了属性“Role”和“VpcConfig”之外,我是否必须向我的 Lambda 模板文件添加一些特殊的东西?

标签: amazon-web-servicesaws-lambdaamazon-rds

解决方案


尝试将您的 lambda 安全组设置为 RDS 安全组的入站源解决了此问题。


推荐阅读