在 AWS Lambda 上使用 mysql2 和 Express 时出现 ETIMEDOUT
ETIMEDOUT while using mysql2 with Express on AWS Lambda
我正在使用 mysql2 包和 Express Framework,部署在 AWS Lamda 上。我将 Aws Lambda 的预置并发设置为 3。
我没有直接连接到 MySQL。我在两者之间有 RDS 代理。
我随机收到以下错误。
{
"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:178:17)",
" at listOnTimeout (internal/timers.js:554:17)",
" at processTimers (internal/timers.js:497:7)"
]
}
以下是我的代码:
var AWS = require("aws-sdk");
const mysql = require('mysql2');
class DBConnection {
constructor() {
var signer = new AWS.RDS.Signer({
region: 'us-east-1',
hostname: process.env.DB_HOST,
port: 3306,
username: process.env.DB_USER
});
let connectionConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
database: process.env.DB_NAME,
ssl: 'Amazon RDS',
authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() }
};
this.db = mysql.createConnection(connectionConfig);
}
query = async (sql, values) => {
return new Promise((resolve, reject) => {
this.db.execute(sql, values, (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
});
});
}
}
module.exports = new DBConnection().query;
const results = await query('SELECT COUNT(*) AS total_listens FROM analytics WHERE event_name="PLAYED"');
任何问题可能出在哪里的线索?
使用 AWS Lambda function
最好使用 mysql.createPool
而不是 mysql.createconnection
。我不知道具体原因是什么,但使用 mysql.createconnection
而不是 mysql.createPool
也给我带来了问题。当查询成功时,还需要 release
连接。
我正在使用 mysql2 包和 Express Framework,部署在 AWS Lamda 上。我将 Aws Lambda 的预置并发设置为 3。
我没有直接连接到 MySQL。我在两者之间有 RDS 代理。
我随机收到以下错误。
{
"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:178:17)",
" at listOnTimeout (internal/timers.js:554:17)",
" at processTimers (internal/timers.js:497:7)"
]
}
以下是我的代码:
var AWS = require("aws-sdk");
const mysql = require('mysql2');
class DBConnection {
constructor() {
var signer = new AWS.RDS.Signer({
region: 'us-east-1',
hostname: process.env.DB_HOST,
port: 3306,
username: process.env.DB_USER
});
let connectionConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
database: process.env.DB_NAME,
ssl: 'Amazon RDS',
authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() }
};
this.db = mysql.createConnection(connectionConfig);
}
query = async (sql, values) => {
return new Promise((resolve, reject) => {
this.db.execute(sql, values, (error, result) => {
if (error) {
reject(error);
return;
}
resolve(result);
});
});
}
}
module.exports = new DBConnection().query;
const results = await query('SELECT COUNT(*) AS total_listens FROM analytics WHERE event_name="PLAYED"');
任何问题可能出在哪里的线索?
使用 AWS Lambda function
最好使用 mysql.createPool
而不是 mysql.createconnection
。我不知道具体原因是什么,但使用 mysql.createconnection
而不是 mysql.createPool
也给我带来了问题。当查询成功时,还需要 release
连接。