[英]Database connection hanging on AWS Lambda
我正在尝试使用 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 中运行良好。
可能是 AWS 安全组
lambda 尝试连接,但安全组超时,因为他们永远阻止它
将 AWSLambdaVPCAccessExecutionRole 策略附加到您的 lambda 并确保 Lambda 在 VPC 中。 检查数据库安全组是否允许从 VPC 访问
这个问题Allow AWS Lambda to access RDS Database中还有一些提示
如果是 RDS 操作,我认为它正在超时。 lambda 函数的默认超时为 6 秒,因此在使用 RDS 完成操作之前它会超时。 为避免这种情况,您不必增加超时。 相反,您可以将“callBackWaitsForEmptyEventLoop”设为 false 作为 lambda 函数中的第一行代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.