postgresql - 将 hasura 与 Google Cloud Run 和 Google Cloud SQL 结合使用
问题描述
文档描述了 hasura 需要带有 HASURA_GRAPHQL_DATABASE_URL
env var 的 postgres 连接字符串。
例子:
docker run -d -p 8080:8080 \
-e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@hostname:port/dbname \
hasura/graphql-engine:latest
看起来我的问题是谷歌云 sql 的服务器实例连接名称看起来PROJECT_ID:REGION:INSTANCE_ID
不是 TCP
从云运行文档(https://cloud.google.com/sql/docs/postgres/connect-run)我得到了这个例子:
postgres://<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql/<cloud_sql_instance_name>/.s.PGSQL.5432
但它似乎不起作用。想法?
我目前正在将cloud_sql_proxy
作为解决方法添加到容器中,以便我可以连接到 TCP 127.0.0.1:5432,但我正在寻找与 google-cloud-sql 的直接连接。
// 编辑感谢您的评论,beta8 主要是成功的,但我也错过了set-cloudsql-instances
参数:https ://cloud.google.com/sdk/gcloud/reference/beta/run/deploy#--set-cloudsql-instances
我的完整云运行命令:
gcloud beta run deploy \
--image gcr.io/<PROJECT_ID>/graphql-server:latest \
--region <CLOUD_RUN_REGION> \
--platform managed \
--set-env-vars HASURA_GRAPHQL_DATABASE_URL="postgres://<DB_USER>:<DB_PASS>@/<DB_NAME>?host=/cloudsql/<PROJECT_ID>:<CLOUD_SQL_REGION>:<INSTANCE_ID>" \
--timeout 900 \
--set-cloudsql-instances <PROJECT_ID>:<CLOUD_SQL_REGION>:<INSTANCE_ID>
解决方案
根据v1.0.0-beta.8,它对 Postgres 连接字符串参数有更好的支持,我已经设法使从 Cloud Run 到 Cloud SQL 的 unix 连接正常工作,而无需将代理嵌入到容器中。
连接应如下所示:
postgres://<user>:<password>@/<database>?host=/cloudsql/<instance_name>
请注意,客户端将为/.s.PGSQL.5432
您添加后缀。
确保您还添加了 Cloud SQL 客户端权限。
推荐阅读
- sqlalchemy - SQLAlchemy - SQL Server TCP 提供程序的 Microsoft ODBC 驱动程序 17:错误代码 0x68 (104) (SQLExecDirectW)
- nativescript - 在“@nativescript/core”中找不到“fileSystemModule”
- excel - 从公式VBA复制值,得到零
- paypal - 卖家的Paypal Onboard,生成的注册链接的奇怪行为
- java - 使用 Heroku Scheduler 运行一个简单的 Java HelloWorld
- wordpress - 在 wodfpress 的 RSS 提要中显示修改日期
- batch-file - 批处理文件:同时启动两个进程,然后在进程 2 完成后终止进程 1
- javascript - 时间流分页不适用于nodejs
- cakephp - 如何将普通查询转换为 cakephp 标准
- google-apps-script - 从另一个单元格中减去一个单元格中的值的脚本