【问题标题】:How do I connect to a GCP PostgreSQL 11 DB in Project A from a go1.12 Flex Instance in Project B using gorm如何使用 gorm 从项目 B 中的 go1.12 Flex 实例连接到项目 A 中的 GCP PostgreSQL 11 DB
【发布时间】: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


【解决方案1】:

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

周末我解决了这个问题。经过仔细检查后,发现 Cloud SQL 实例没有设置私有 IP 地址(因此,我对实例设置正确的保证以及我自己在问题中的保证都是错误的)。

必须创建一个新的 Cloud SQL 实例并为其分配一个私有 IP 地址,因为文档非常明确地指出,现有 Cloud SQL 实例一旦创建就不能分配一个私有 IP 地址。

App Engine Flex 部署能够使用私有 IP 地址进行连接,而不会发生意外。

再次抱歉!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2020-03-17
    • 2020-08-21
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多