我试图用go在aws lambda中实现基本的db连接,由于某些原因,它被困在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
}
奇怪的是,上面的代码在awslambda中至少停留了5秒以上,而在普通的go-run/go-build中工作正常。
2条答案
按热度按时间qvk1mo1f1#
可能是aws安全组织
lambda试图连接,但是安全组会超时,因为他们会永远阻止它
将awslambdavpcaccessexecutionrole策略附加到lambda并确保lambda位于专有网络中。检查数据库安全组是否允许从专有网络访问
在这个问题中有更多的指针允许aws lambda访问rds数据库
k4aesqcs2#
如果是rds操作,我想是超时了。lambda函数的默认超时时间是6秒,因此在操作完成之前会获得超时。为了避免这种情况,您不必增加超时时间。相反,您可以将“callbackhaitsforemptyeventloop”设为false,作为lambda函数中的第一行代码。