数据库连接挂在aws lamda上

4smxwvx5  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(258)

我试图用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中工作正常。

qvk1mo1f

qvk1mo1f1#

可能是aws安全组织
lambda试图连接,但是安全组会超时,因为他们会永远阻止它
将awslambdavpcaccessexecutionrole策略附加到lambda并确保lambda位于专有网络中。检查数据库安全组是否允许从专有网络访问
在这个问题中有更多的指针允许aws lambda访问rds数据库

k4aesqcs

k4aesqcs2#

如果是rds操作,我想是超时了。lambda函数的默认超时时间是6秒,因此在操作完成之前会获得超时。为了避免这种情况,您不必增加超时时间。相反,您可以将“callbackhaitsforemptyeventloop”设为false,作为lambda函数中的第一行代码。

相关问题