只有ECS时无法连接Golang中的RDS mysql

Posted

技术标签:

【中文标题】只有ECS时无法连接Golang中的RDS mysql【英文标题】:Can't connect to RDS mysql in Golang only when ECS 【发布时间】:2020-01-15 16:37:05 【问题描述】:

我尝试在 ECS 中使用午餐应用程序。 在我本地的 docker 环境中吃午饭没有问题。 但由于rds连接问题,无法访问ECS中的api服务器。

我在 api 服务器中使用 golang,在 db 中使用 mysql。 我在 main.go 中调用 db.go

func main() 

    db := db.NewDatabase(os.Getenv("MYSQL_USER"), os.Getenv("MYSQL_PASSWORD"), os.Getenv("MYSQL_HOST"))

连接rds数据库时出错

func NewDatabase(user, password, host string) *Database 
    db, err := sql.Open("mysql", user+":"+password+"@tcp("+host+":3306)/article")
    if err != nil 
        panic(err.Error())
    

    err = db.Ping()
    // error occurs here
    if err != nil 
        panic(err.Error())
    

我将它部署到弹性豆茎。 我检查了环境变量是否设置正确。

这里是完整的源代码:https://github.com/jpskgc/article

我希望弹性 bean 没有错误。 但实际并非如此。 我想知道解决方案。

这是 elastic beanstalk 中的错误日志。

-------------------------------------
/var/log/containers/server-4c66c8d1848a-stdouterr.log
-------------------------------------
panic: dial tcp 172.31.26.91:3306: connect: connection timed out

goroutine 1 [running]:
article/api/db.NewDatabase(0xc00002401b, 0x4, 0xc00002a00f, 0xb, 0xc00002800b, 0x3c, 0xdb94f2)
    /app/db/db.go:20 +0x3bc
main.main()
    /app/main.go:18 +0xee

【问题讨论】:

【参考方案1】:

“连接超时”表示有防火墙限制,你也可以查看你的mysql白名单,里面应该有你的ECS的ip。

【讨论】:

以上是关于只有ECS时无法连接Golang中的RDS mysql的主要内容,如果未能解决你的问题,请参考以下文章

如何允许ECS任务访问RDS

使用阿里云RDS

如何在 CDK 应用程序中获取 RDS 实例主机名?

golang FTP PASS(密码)命令在本地工作,但在 ECS 上运行时不起作用

阿里云服务器的ECS和RDS和OSS和SLB是啥意思

AWS 跨账户 Postgres RDS IAM 身份验证