Моя лямбда-функция истекает, когда я пытаюсь пропинговать соединение с БД - PullRequest
0 голосов
/ 07 января 2019

Это кажется очень простой вещью, но мое соединение прерывается каждый раз.

Вот код в лямбда-функции (написанный на Go)

package main

import (
    "database/sql"
    "log"

    _ "github.com/go-sql-driver/mysql"
    // "github.com/aws/aws-sdk-go/service/rds"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func Handler(request events.APIGatewayProxyRequest) {

    db, err := sql.Open("mysql", "username:password(my-database-address:3306)/db_name")

    if err != nil {
        log.Print(err.Error())
    }

    defer db.Close()

    err = db.Ping()

    if err != nil {
        log.Print(err.Error())
    }

}

func main() {
    lambda.Start(Handler)
}

Очевидно, что я удалил настоящее имя пользователя, пароль, адрес и имя базы данных, но я убедился, что все они верны (я могу подключиться к БД через MySQLWorkbench с теми же подробностями).

Я предполагаю, что это связано с разрешениями или чем-то? Моя лямбда-функция имеет разрешение на доступ ко всем функциям RDS.

Я также пытался удалить defer db.Close (), думая, что, возможно, он оставляет соединение открытым на неопределенное время, но это, похоже, не сильно изменилось.

У меня это работало без db.Ping, поскольку sql.Open на самом деле не создает соединение.

Я новичок в AWS, поэтому мне сложно понять, как это отладить. Где я могу найти зарегистрированное событие, показывающее, где находится блокировка? Или что-то не так в соединении, которое я здесь устанавливаю?

...