从 MySQL 数据库查询数据时 aws lambda 函数超时
aws lambda function timed out when querying data from MySQL database
我有一个 index.js
文件,其中包含如下代码:
const dbConfig = require('./config/dbConfig')
const mysql = require('mysql')
var con = mysql.createConnection({
host: dbConfig.host,
user: dbConfig.username,
password: dbConfig.password,
database: dbConfig.database
})
function readMessages (event, context, callback) {
console.log('function triggered')
con.connect((err) => {
if (err) {
console.error(err)
callback(err)
} else {
console.log('Connected!')
con.query('SELECT * FROM Messages WHERE isDeleted = 0;', (err, result, fields) => {
if (err) {
console.error(err)
callback(err)
} else {
console.log(result)
con.end()
callback(null, result)
}
})
}
})
}
exports.handler = readMessages
代码正确地从 mysql 数据库中获取数据,并在我 运行 在我的本地计算机上将其显示在屏幕上时。
但是,当它在 aws-lambda 上为 运行 时,我遇到了 Task timed out after 7.01 seconds
错误。
代码及其依赖项打包在名为 app.zip
的文件中,然后上传到 aws-lambda。
app.zip
├── config
│ └── dbConfig.js
├── index.js
└── node_modules
我的函数打印的唯一日志消息是 function triggered
。我在云监视日志中找不到我的函数生成的其他日志消息。
为什么函数在 aws-lambda 上超时?
如果我不得不猜测这是一个权限问题,当您在本地 运行 时,它将从您的本地 machine/environment 获取凭据 - 当您在 lambda 中 运行 时,您需要为具有访问 mysql 数据库所需权限的 lambda 分配角色。
此外,请确保 mysql 数据库可供 lamba 访问 - 即您不会尝试从 lambda 函数访问计算机本地的 mysql 数据库(我假设你使用的是 rds)。
我有一个 index.js
文件,其中包含如下代码:
const dbConfig = require('./config/dbConfig')
const mysql = require('mysql')
var con = mysql.createConnection({
host: dbConfig.host,
user: dbConfig.username,
password: dbConfig.password,
database: dbConfig.database
})
function readMessages (event, context, callback) {
console.log('function triggered')
con.connect((err) => {
if (err) {
console.error(err)
callback(err)
} else {
console.log('Connected!')
con.query('SELECT * FROM Messages WHERE isDeleted = 0;', (err, result, fields) => {
if (err) {
console.error(err)
callback(err)
} else {
console.log(result)
con.end()
callback(null, result)
}
})
}
})
}
exports.handler = readMessages
代码正确地从 mysql 数据库中获取数据,并在我 运行 在我的本地计算机上将其显示在屏幕上时。
但是,当它在 aws-lambda 上为 运行 时,我遇到了 Task timed out after 7.01 seconds
错误。
代码及其依赖项打包在名为 app.zip
的文件中,然后上传到 aws-lambda。
app.zip
├── config
│ └── dbConfig.js
├── index.js
└── node_modules
我的函数打印的唯一日志消息是 function triggered
。我在云监视日志中找不到我的函数生成的其他日志消息。
为什么函数在 aws-lambda 上超时?
如果我不得不猜测这是一个权限问题,当您在本地 运行 时,它将从您的本地 machine/environment 获取凭据 - 当您在 lambda 中 运行 时,您需要为具有访问 mysql 数据库所需权限的 lambda 分配角色。
此外,请确保 mysql 数据库可供 lamba 访问 - 即您不会尝试从 lambda 函数访问计算机本地的 mysql 数据库(我假设你使用的是 rds)。