代码之家  ›  专栏  ›  技术社区  ›  Dinesh Rawat

AWS Lambda函数无法从EC2实例访问MySQL数据库:SequelizeConnectionError connect ETIMEDOUT

  •  0
  • Dinesh Rawat  · 技术社区  · 6 年前

    我试图访问安装在EC2实例中的MySQL数据库。我在express js中编写了一个简单的AWS Lambda函数。lambda函数需要访问MySQL。当它试图在EC2上建立DB连接时,我得到了下面的每个人:

    {
        "errorType": "SequelizeConnectionError",
        "errorMessage": "connect ETIMEDOUT",
        "name": "SequelizeConnectionError",
        "parent": {
            "errorType": "Error",
            "errorMessage": "connect ETIMEDOUT",
            "code": "ETIMEDOUT",
            "errorno": "ETIMEDOUT",
            "syscall": "connect",
            "fatal": true,
            "stack": [
                "Error: connect ETIMEDOUT",
                "    at Connection._handleTimeoutError (/var/task/node_modules/mysql2/lib/connection.js:173:17)",
                "    at ontimeout (timers.js:436:11)",
                "    at tryOnTimeout (timers.js:300:5)",
                "    at listOnTimeout (timers.js:263:5)",
                "    at Timer.processTimers (timers.js:223:10)"
            ]
        },
        "original": {
            "errorType": "Error",
            "errorMessage": "connect ETIMEDOUT",
            "code": "ETIMEDOUT",
            "errorno": "ETIMEDOUT",
            "syscall": "connect",
            "fatal": true,
            "stack": [
                "Error: connect ETIMEDOUT",
                "    at Connection._handleTimeoutError (/var/task/node_modules/mysql2/lib/connection.js:173:17)",
                "    at ontimeout (timers.js:436:11)",
                "    at tryOnTimeout (timers.js:300:5)",
                "    at listOnTimeout (timers.js:263:5)",
                "    at Timer.processTimers (timers.js:223:10)"
            ]
        },
        "stack": [
            "SequelizeConnectionError: connect ETIMEDOUT",
            "    at Utils.Promise.tap.then.catch.err (/var/task/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:149:19)",
            "    at tryCatcher (/var/task/node_modules/bluebird/js/release/util.js:16:23)",
            "    at Promise._settlePromiseFromHandler (/var/task/node_modules/bluebird/js/release/promise.js:512:31)",
            "    at Promise._settlePromise (/var/task/node_modules/bluebird/js/release/promise.js:569:18)",
            "    at Promise._settlePromise0 (/var/task/node_modules/bluebird/js/release/promise.js:614:10)",
            "    at Promise._settlePromises (/var/task/node_modules/bluebird/js/release/promise.js:689:18)",
            "    at Async._drainQueue (/var/task/node_modules/bluebird/js/release/async.js:133:16)",
            "    at Async._drainQueues (/var/task/node_modules/bluebird/js/release/async.js:143:10)",
            "    at Immediate.Async.drainQueues [as _onImmediate] (/var/task/node_modules/bluebird/js/release/async.js:17:14)",
            "    at runCallback (timers.js:705:18)",
            "    at tryOnImmediate (timers.js:676:5)",
            "    at processImmediate (timers.js:658:5)"
        ]
    }
    

    EC2 Instance configuration

    入站规则: Inbound rules

    Outbound Rules*

    Lambda函数 Lambda management console

    注:vpc、子网、安全组在EC2和lambda中相同

    这是我的代码:- Lambda Function Code

    非常感谢您的帮助!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Thanh Nguyen Van    6 年前

    如果你想从 lambda 函数到ec2实例。

    Ec2 instances lambda函数在同一个VPC中,并且

    其次,你必须创造 NAT gateway 对于lambda函数。EC2实例的子网和lambda函数的子网应该通过 NAT网关 .

    enter image description here

    enter image description here