我尝试在AWS Lambda中使用Go进行基本的数据库连接,由于某种原因,它在db.prepare()处卡住了,并且在cloudwatch中没有显示日志。
func Handler(request Request) (Response, error) {
db, err := sql.Open("mysql", dbUsername+":"+dbPassword+"@tcp("+dbURL+":"+dbPort+")/"+dbName)
if err != nil {
log.Fatal(err)
}
defer db.Close()
stmt, err := db.Prepare("SELECT id, password FROM package_passwords WHERE password = ?")
return Response{
Message: "rows",
Ok: false,
}, nil
}
奇怪的是,上面的代码在AWS Lambda中停留了至少5秒以上,而在普通的Go Run/ Go Build中工作正常。
2条答案
按热度按时间wh6knrhe1#
可能是AWS的安全小组
lambda尝试连接,但是安全组超时,因为它们永远阻止它
将AWSLambdaVPCAccessExecutionRole策略附加到lambda并确保Lambda位于VPC中。检查数据库安全组是否允许从VPC进行访问
这个问题中还有一些指针Allow AWS Lambda to access RDS Database
093gszye2#
如果它是一个RDS操作,我认为它会超时。lambda函数的默认超时是6秒,因此在RDS操作完成之前它会超时。为了避免这种情况,您不必增加超时。相反,您可以将“callBackWaitsForEmptyEventLoop”设置为false作为lambda函数的第一行代码。