挂在AWS Lamda上的数据库连接

时间:2018-06-26 07:26:13

标签: mysql go 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中可以正常工作。

2 个答案:

答案 0 :(得分:2)

可能是AWS安全组

lambda尝试连接,但是安全组将其永久阻止,因此超时了

将AWSLambdaVPCAccessExecutionRole策略附加到您的lambda,并确保Lambda在VPC中。检查数据库安全组是否允许从VPC进行访问

此问题Allow AWS Lambda to access RDS Database

中还有其他一些要点

答案 1 :(得分:0)

如果是RDS操作,我认为它正在超时。 Lambda函数的默认超时为6秒,因此在使用RDS完成操作之前它正在超时。为避免这种情况,您不必增加超时时间。取而代之的是,您可以将“ callBackWaitsForEmptyEventLoop”设置为false作为lambda函数中的第一行代码。