从 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)。