从Google Cloud Run连接到Google Cloud SQL实例的问题



我有一个postgresql Google Cloud SQL实例,我正试图将运行在Google Cloud Run中的FastAPI应用程序连接到它,但我遇到了ConnectionRefusedError: [Errno 111] Connection refused错误。

我的应用程序使用数据库包进行异步数据库连接:

database = databases.Database(sqlalchemy_database_uri)

然后尝试在应用程序启动时通过连接

@app.on_event("startup")
async def startup() -> None:
if not database.is_connected:
await database.connect() <--- this is where the error is raised

通过阅读这里的文档,它建议形成这样的连接字符串:

"postgresql+psycopg2://user:pass@/dbname?unix_sock=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/.s.PGSQL.5432"

我尝试了几种不同的url变体,使用host而不是sqlalchemy文档建议的unix_sock,以及删除最后的.s.PGSQL.5432,正如我看到的其他SO帖子所建议的那样,但都无济于事。

我已经在Cloud Run面板中将Cloud SQL连接添加到实例中,并将Cloud SQL Client角色添加到服务帐户中。

我可以使用Cloud SQL Auth Proxy在本地连接到数据库。

我有点不知所措,不知道如何修复它,甚至不知道如何调试它,因为似乎没有任何简单的方法可以将ssh放入容器并尝试一些东西。如有任何帮助,我们将不胜感激,谢谢!

更新

我可以使用直接连接sqlalchemy

from sqlalchemy import create_engine
engine = create_engine(url)
engine.connect()

其中url是以下任何格式:

"postgresql://user:pass@/db_name?host=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME"
"postgresql+psycopg2://user:pass@/db_name?host=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME"
"postgresql+pg8000://user:pass@/db_name?unix_sock=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/.s.PGSQL.5432"

databases的异步特性是否导致了问题?

发现这是databases包的一个错误。现在应该用https://github.com/encode/databases/pull/423

相关内容

  • 没有找到相关文章

最新更新