我正在尝试使用Go在AWS Lambda中进行基本的数据库连接,由于某种原因,它卡在了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中可以正常工作。
答案 0 :(得分:2)
可能是AWS安全组
lambda尝试连接,但是安全组将其永久阻止,因此超时了
将AWSLambdaVPCAccessExecutionRole策略附加到您的lambda,并确保Lambda在VPC中。检查数据库安全组是否允许从VPC进行访问
中还有其他一些要点答案 1 :(得分:0)
如果是RDS操作,我认为它正在超时。 Lambda函数的默认超时为6秒,因此在使用RDS完成操作之前它正在超时。为避免这种情况,您不必增加超时时间。取而代之的是,您可以将“ callBackWaitsForEmptyEventLoop”设置为false作为lambda函数中的第一行代码。