Go语言 AWS Lambda上的数据库连接挂起

1wnzp6jl  于 2022-12-25  发布在  Go
关注(0)|答案(2)|浏览(145)

我尝试在AWS Lambda中使用Go进行基本的数据库连接,由于某种原因,它在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中工作正常。

wh6knrhe

wh6knrhe1#

可能是AWS的安全小组
lambda尝试连接,但是安全组超时,因为它们永远阻止它
将AWSLambdaVPCAccessExecutionRole策略附加到lambda并确保Lambda位于VPC中。检查数据库安全组是否允许从VPC进行访问
这个问题中还有一些指针Allow AWS Lambda to access RDS Database

093gszye

093gszye2#

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

相关问题