【问题标题】:aws lambda function timed out when querying data from MySQL database从 MySQL 数据库查询数据时 aws lambda 函数超时
【发布时间】:2018-09-03 15:58:24
【问题描述】:

我有一个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 上超时?

【问题讨论】:

    标签: mysql node.js amazon-web-services aws-lambda amazon-rds


    【解决方案1】:

    如果我不得不猜测这是一个权限问题,当您在本地运行时,它将从您的本地机器/环境中获取凭据 - 当您在 lambda 中运行它时,您需要为具有权限的 lambda 分配一个角色它需要访问mysql数据库。

    另外,请确保 mysql 数据库可供兰巴访问 - 即您没有尝试通过 lambda 函数访问您机器本地的 mysql 数据库(我假设您使用的是 rds)。

    【讨论】:

    • 谢谢。你的猜测是对的。我没有为 lambda 函数正确设置 IAM 角色。
    • 对了,你知道如何配置我的RDS的安全组的入站规则,使其可以被lambda函数访问吗?我不希望从任何地方都可以访问 RDS。
    • @Brian 您只需要允许来自您的 Lambda 安全组的入站流量到您的 RDS 实例。即,为入站规则指定一个安全组而不是 IP 地址。
    猜你喜欢
    • 2017-07-24
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2017-05-20
    • 2019-06-17
    相关资源
    最近更新 更多