mik*_*ssy 3 postgresql google-cloud-sql google-cloud-platform postgrest google-cloud-run
这是我的场景。我已经设置了一个在 Google SQL 云中运行的 Postgres DB 实例。它已启动并正在运行,如果我将本地 IP 列入白名单,我可以毫无问题地直接连接。
然后我部署了一个 docker 容器 (postGrest),它是一个连接到 postgres 数据库的 Web 服务器。当我在 Google Cloud Run 上配置它时,它确实有一个下拉选项,我可以在其中指定数据库连接,它说,在幕后,它为此连接配置 Cloud SQL 代理。
容器允许传入环境变量以指定哪个服务器等。一个必需的参数是 postgred 实例的 DB_URI。在本地运行时,它看起来像这样:
postgres://authenticator:mysecretpassword@localhost:5432/testdb
当我尝试在云版本上配置它时,我尝试使用 IP 127.0.0.1(谷歌云 SQL 代理文档说这是通过代理连接的方式)。这没有用。
然后我尝试使用分配给 postgres 数据库的公共 IP ......这也不起作用。
有谁知道如何使用这种 DB_URI 格式指定正确的连接字符串?
我只是将其添加为答案而不是评论,因为它更易于阅读并且可能会帮助其他用户。请不要鼓励更改已接受的答案。
通过遵循OP 提供的文档,URI 的最终模式变为:
# Breaking lines for improved readability
POSTGRESS_URI=postgresql:///dbname
?host=/cloudsql/myprojectid:region:myinstanceid
&user=username
&password=password
&sslmode=disable
Run Code Online (Sandbox Code Playgroud)
* 不要忘记在 unix 套接字路径前加上前缀 /cloudsql/
任何参数都可以正常使用,如示例中所示sslmode。
另外,请注意Cloud SQL 文档中提到了两件重要的事情:
- 注意:PostgreSQL 标准要求套接字路径中有 .s.PGSQL.5432 后缀。某些库会自动应用此后缀,但其他库要求您指定套接字路径,如下所示:/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432。
就我而言,我使用的程序已经添加为 suffix .s.PGSQL.5432,因此我不需要将其添加到我的 URI 中。
- 警告:基于 Linux 的操作系统的最大套接字路径长度为 107 个字符。如果路径的总长度超过此长度,您将无法连接来自 Cloud Run(全代管式)的套接字。
Cloud Run 不支持使用 IP 地址连接到 Cloud SQL。这意味着127.0.0.1行不通。Cloud Run 使用 Unix 套接字。您必须使用连接字符串。
Cloud SQL 代理连接字符串如下所示:
myprojectid:region:myinstanceid
instanceid您可以从控制台中的 Cloud SQL 实例详细信息页面获取。
您还需要向 Cloud Run 服务帐号添加权限以访问 Cloud SQL。你至少需要Cloud SQL Client.
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |