Соединение с базой данных висит на AWS Lamda - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь установить базовое соединение с БД в 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
}

странная вещьзаключается в том, что приведенный выше код зависает как минимум на 5 секунд в AWS Lambda, в то время как он отлично работает в обычном режиме go run / go build.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вероятно, это группы безопасности AWS

Лямбда пытается установить соединение, но группы безопасности истекают, поскольку они блокируют его навсегда

Присоедините политику AWSLambdaVPCAccessExecutionRole к вашей лямбде и убедитесь, что лямбда работаетв VPC.Проверьте, что группы безопасности базы данных разрешают доступ из VPC

. В этом вопросе есть еще несколько указателей Разрешить AWS Lambda доступ к базе данных RDS

0 голосов
/ 27 июня 2018

Если это операция RDS, я думаю, что время ожидания истекло. Время ожидания лямбда-функции по умолчанию составляет 6 секунд, и поэтому время ожидания истекает до завершения операции с RDS. Чтобы избежать этого, вам не нужно увеличивать время ожидания. Вместо этого вы можете установить «callBackWaitsForEmptyEventLoop» в качестве первой строки кода в лямбда-функции.

...