无法从 Cloudfunction 中的 Prisma 连接到 Postgres CloudSQL

问题描述 投票:0回答:4

我正在尝试使用 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

postgresql authentication google-cloud-functions google-cloud-sql prisma
4个回答
0
投票

发现我已对所有流量启用了 vpc 连接器,因此所有流量都尝试通过私有 VPC 而不是公共 IP。禁用它修复了它。


0
投票

您可以使用类似于以下的连接: DATABASE_URL="postgresql://用户名:pass@localhost/databasename?host=/cloudsql/full-instance-connection-name"

完整实例连接名称 = xxx:us-central1:xxx

完整实例连接名称,可以通过搜索 SQL 在您的 GCP 中找到,您将看到您拥有的所有数据库实例,只需添加您需要连接的数据库实例即可。

这解决了我的问题。


0
投票

对于仍在寻找答案的人 - 你必须做什么:

拥有公共 IP 并配置完整的网络访问:

0.0.0.0/0
在连接 > 网络下

之后你可以使用这样的字符串:

postgres://USER:PASSWORD@localhost/DB_NAME?host=PUBLIC_IP

确保您的密码仅包含 ASCII 字符,以免破坏 URL。


-1
投票

您的应用程序正在尝试连接“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

© www.soinside.com 2019 - 2024. All rights reserved.