我正在尝试使用 Prisma 从云功能连接到公共 IP CloudSQL Postgres 数据库。 数据库已强制执行 SSL。我假设我可以使用云身份验证代理,并且它可以在本地运行,但是当我部署时它会出现错误。
我都尝试过:
选项1:
datasource db {
provider = "postgresql"
url = "postgresql://USER:PASSWORD@localhost:3307/DATABASE_NAME?host=CONNECTION_URL"
}
出现错误:
Can't reach database server at `CONNECTION_URL`:`3307`
选项2:
datasource db {
provider = "postgresql"
url = "postgresql://USER:PASSWORD@localhost/DATABASE_NAME?host=CONNECTION_URL"
}
出现错误:
Can't reach database server at `IP_ADDRESS`:`5432`
其中 IP_ADDRESS 是我在控制台中可以看到的数据库的正确公共 IP 地址
CONNECTION_URL 是 /cloudsql/PROJ:REGION:INSTANCE
发现我已对所有流量启用了 vpc 连接器,因此所有流量都尝试通过私有 VPC 而不是公共 IP。禁用它修复了它。
您可以使用类似于以下的连接: DATABASE_URL="postgresql://用户名:pass@localhost/databasename?host=/cloudsql/full-instance-connection-name"
完整实例连接名称 = xxx:us-central1:xxx
完整实例连接名称,可以通过搜索 SQL 在您的 GCP 中找到,您将看到您拥有的所有数据库实例,只需添加您需要连接的数据库实例即可。
这解决了我的问题。
您的应用程序正在尝试连接“CONNECTION_URL”和“3307”。要在 Cloud Functions 上使用公共 IP,您应该通过 unix 套接字连接:https://cloud.google.com/sql/docs/mysql/connect-functions#connect_to
基于此问题,您的网址看起来应该类似于:
postgresql://username@localhost/databasename?host=/cloudsql/CONNECTION_NAME
您的实例连接名称是
PROJ:REGION:INSTANCE
。