在Cloud Function中使用Cloud SQL(postgres)



我正在尝试使用Cloud Function Python脚本连接到运行PostgreSQL 11的Cloud SQL。理想情况下,我想使用一个简单的pandas.DataFrame.to_sql()连接到数据库,这需要sqlalchemy.create_engine()才能连接。

这是我目前的尝试(我已经尝试过带/不带后缀/.s.PGSQL.5432(:

engine = sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432')
engine.connect()

我还尝试了Google提供的代码示例,该示例直接使用psycopg2但也不起作用

Error: function crashed. Details:
could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/cloudsql/vida-production:us-central1:vida-ops/.s.PGSQL.5432"?

编辑:

感谢@kurtisvg指出这一点。由于云功能正在尝试连接到不同项目上的云 SQL。我必须将云函数的服务帐户添加到云SQL项目的IAM中。

设置 IAM 后,我用来将sqlalchemy引擎连接到 Cloud SQL 的 Python 代码是这样的:

# Don't add the "/.s.PGSQL.5432 suffix" because it will already be added back automatically by the library...
engine = sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME')
engine.connect()

确保检查以下事项:

  • 启用云 SQL 管理员 API
  • 确保函数默认服务账户具有Cloud SQL ClientIAM 角色

如果要在两个项目之间进行连接,请确保启用管理 API 并向运行尝试连接的函数的服务帐户授予权限(针对这两个项目(。

相关内容

  • 没有找到相关文章

最新更新