【发布时间】:2020-10-30 12:56:20
【问题描述】:
一些前言:
- 我无权访问托管 postgres 数据库的项目。
- 有权访问该项目并设置数据库的人无法直接与我合作。有人告诉我,他们已遵循 GCP 文档,并且最终设置正确。
- 我能够从本地部署的应用程序进行连接,因为设置数据库实例的人允许了我的 IP 地址;这不适用于应用引擎 flex 部署。
问题:
我有一个基于 golang 1.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: %+v\n", err)
}
dbhost当前是db的ip地址格式。
- 我试过 /cloudsql/project:region:instance
- 我试过 /cloudsql/project:region:instance/.s.pgsql.5432
我正在使用的 app.yaml 中的相关设置:
beta_settings:
cloud_sql_instances: [project:region:instance]
- 我已尝试在上述 dbhost 的所有变体中添加 =tcp:5432
错误:
在云控制台中应用引擎的日志中,连接仅提供以下信息:
sql: 数据库已关闭
据我了解,这意味着无法创建与数据库的连接。
此错误与我从任何机器本地运行代码时遇到的错误相匹配,该机器尚未将其 IP 地址添加为来自 postgreSQL 实例的授权网络。
正式问题:
鉴于上述情况,我需要添加或更改哪些代码、选项、设置等才能成功从应用引擎 flex 部署连接到云 SQL 数据库?
如果我可以访问 postgres Cloud SQL 实例所在的项目,我可以做些什么来确保连接?
谢谢。
【问题讨论】:
-
如果您不知道连接的配置方式以及对其工作方式的更多确认,则不清楚它到底发生了什么并为您提供帮助。我建议您查看官方文档here,以便您获得有关连接如何工作的更多信息。
-
您好 gso_gabriel,这是我用来告知我在原始帖子中列出的不同选项的文档。如您所见,文档中没有列出 Go 的信息,这就是我需要提出问题的原因。
-
您使用的是shared VPC吗?如果不是这种情况,您将无法访问其他项目中的数据库。每个 CloudSQL 实例都与其所在的项目对等,并且对等是不可传递的。
-
你好,bhito,这两个项目都是一个更大的 svpc 的一部分。不幸的是,我对 Cloud SQL 实例设置正确的保证是错误的。感谢您的深思熟虑的评论,因为它触及了问题的核心。
标签: postgresql go google-app-engine google-cloud-platform go-gorm