Это кажется очень простой вещью, но мое соединение прерывается каждый раз.
Вот код в лямбда-функции (написанный на 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, поэтому мне сложно понять, как это отладить. Где я могу найти зарегистрированное событие, показывающее, где находится блокировка? Или что-то не так в соединении, которое я здесь устанавливаю?