如何使用gorm从项目B中的go1.12 Flex实例连接到项目a中的GCP PostgreSQL 11 DB



一些序言:

  • 我没有访问postgres数据库所在项目的权限
  • 有权访问该项目并建立DB的人无法直接与我合作。有人告诉我,他们已经遵循了GCP文件,而且他们的设置是正确的
  • 我能够从应用程序的本地部署进行连接,因为设置DB实例的人允许我的IP地址;这不适用于应用程序引擎flex部署

问题:

我有一个基于golang1.12构建的应用程序引擎flex实例。它使用github.com/jinzhu/gorm连接到另一个项目中的postgreSQL 11 DB Cloud SQL实例,代码如下:

dbUri := fmt.Sprintf("host=%s user=%s dbname=%s password=%s", dbHost, dbUsername, dbName, dbPassword)
conn, err := gorm.Open("postgres", dbUri)
if err != nil {
log.Printf("Database error: %+vn", err)
}

数据库主机当前的格式为数据库的ip地址。

  • 我尝试过/cloudsql/project:region:instance
  • 我尝试过/cloudsql/project:region:instance/.s.pgsql.5432

我正在使用的app.yaml中的相关设置:

beta_settings:
cloud_sql_instances: [project:region:instance]
  • 我已经尝试添加=tcp:5432和上面dbhost的所有变体

错误:

在云控制台中应用程序引擎的日志中,连接仅提供以下信息:

sql:数据库已关闭

据我所知,这意味着无法创建到数据库的连接。

这个错误与我从任何没有从postgreSQL实例将其IP地址添加为授权网络的机器本地运行代码时遇到的错误相匹配。

形式化问题:

鉴于上述情况,我需要添加或更改哪些代码、选项、设置等,才能成功地从应用程序引擎flex部署连接到云SQL数据库?

如果我有权访问postgres Cloud SQL实例所在的项目,我能做些什么来确保连接吗?

谢谢。

我很抱歉回答了我自己的问题。

周末我解决了这个问题。经过反复检查,结果发现云SQL实例没有设置专用IP地址(因此,向我保证该实例设置正确,以及我自己在问题中的保证都是错误的(。

必须创建一个新的云SQL实例,并为其分配一个专用IP地址,因为文档非常清楚地指出,一旦创建了现有云SQL实例就不能为其分配专用IP地址。

App Engine Flex部署能够使用专用IP地址进行连接,没有发生任何意外。

再次抱歉!

最新更新