【问题标题】:How can I query a MySQL database that is outside AWS, using AWS Lambda (nodeJS)?如何使用 AWS Lambda (nodeJS) 查询 AWS 外部的 MySQL 数据库?
【发布时间】:2021-09-13 22:57:57
【问题描述】:

我无法从 AWS Lambda 访问外部数据库,真的可以吗?我做错了吗?

(我已经在本地通过 npm 安装了 mysql,并将带有模块的 .zip 导入控制台)

谢谢!

var mysql = require('mysql');
var config = require('./config.json');

var pool = mysql.createPool({
    host: config.dbHost,
    user: config.dbUser,
    password: config.dbPassword,
    database: config.dbName
})

exports.handler = (event,context,callback) => {
    context.callbackWaitsForEmptyEventLoop = false;
    pool.getConnection(function(error,connection){
        connection.query(`SELECT * from dot LIMIT 10`,function (error,results,fields){
            connection.release();
            if (error) callback(error);
            else callback(null,results);
        });
    });
};

我收到以下回复:

{
  "errorType": "TypeError",
  "errorMessage": "Cannot read property 'query' of undefined",
  "trace": [
    "TypeError: Cannot read property 'query' of undefined",
    "    at /var/task/index.js:18:21",
    "    at Handshake.onConnect (/var/task/node_modules/mysql/lib/Pool.js:58:9)",
    "    at Handshake.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:526:10)",
    "    at Handshake._callback (/var/task/node_modules/mysql/lib/Connection.js:488:16)",
    "    at Handshake.Sequence.end (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)",
    "    at Protocol.handleNetworkError (/var/task/node_modules/mysql/lib/protocol/Protocol.js:369:14)",
    "    at PoolConnection.Connection._handleNetworkError (/var/task/node_modules/mysql/lib/Connection.js:418:18)",
    "    at Socket.emit (events.js:376:20)",
    "    at emitErrorNT (internal/streams/destroy.js:106:8)",
    "    at emitErrorCloseNT (internal/streams/destroy.js:74:3)"
  ]
}

【问题讨论】:

  • 你应该在尝试访问连接之前检查getConnection()的回调中是否有error。如果连接时出现问题,connection 将是未定义的(即你所看到的),error 会给你一些提示,有什么问题。

标签: node.js database aws-lambda


【解决方案1】:

此端点是否在您的 AWS 账户中?如果是这样,并且您的 MYSQL 数据库位于 VPC 中,那么如果您将 Lambda 配置为在同一 VPC 中运行,那么您将能够访问它。

否则,端点必须可以通过互联网访问。我会尝试从 Lambda 内部 ping 您的数据库端点,看看是否可行。

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2020-11-14
    • 2018-09-16
    • 2019-10-13
    • 2017-05-16
    • 2018-09-03
    • 2021-03-19
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多