从 MySQL 数据库查询数据时 aws lambda 函数超时
Posted
技术标签:
【中文标题】从 MySQL 数据库查询数据时 aws lambda 函数超时【英文标题】:aws lambda function timed out when querying data from MySQL database 【发布时间】: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 上超时?
【问题讨论】:
【参考方案1】:如果我不得不猜测这是一个权限问题,当您在本地运行时,它将从您的本地机器/环境中获取凭据 - 当您在 lambda 中运行它时,您需要为具有权限的 lambda 分配一个角色它需要访问mysql数据库。
另外,请确保 mysql 数据库可供兰巴访问 - 即您没有尝试通过 lambda 函数访问您机器本地的 mysql 数据库(我假设您使用的是 rds)。
【讨论】:
谢谢。你的猜测是对的。我没有为 lambda 函数正确设置 IAM 角色。 对了,你知道如何配置我的RDS的安全组的入站规则,使其可以被lambda函数访问吗?我不希望从任何地方都可以访问 RDS。 @Brian 您只需要允许来自您的 Lambda 安全组的入站流量到您的 RDS 实例。即,为入站规则指定一个安全组而不是 IP 地址。以上是关于从 MySQL 数据库查询数据时 aws lambda 函数超时的主要内容,如果未能解决你的问题,请参考以下文章
从 AWS API Gateway Web 界面配置 AWS Lambda 时无法选择/查看 Lambda 函数
Lambda 在本地连接到 Aurora MySql - 部署到 AWS 时超时
从 MySQL 读取位数据类型并使用 AWS Glue 转换为 Redshift 的问题