在 Cloud Function 中使用 Cloud SQL (Postgres)
Using Cloud SQL (Postgres) in Cloud Function
我正在尝试使用 Cloud Function Python 脚本连接到 Cloud SQL 运行 PostgreSQL 11。理想情况下,我想使用需要 sqlalchemy.create_engine()
才能连接的简单 pandas.DataFrame.to_sql()
连接到数据库。
这是我目前的尝试(with/without /.s.PGSQL.5432
后缀我都试过了):
engine = sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432')
engine.connect()
我也尝试了 code sample provided by 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"?
编辑:
感谢 指出这一点。由于 Cloud Function 正在尝试连接到不同项目上的 Cloud SQL。我必须将 Cloud Function 的服务帐户添加到 Cloud 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
- 确保 Functions 默认服务帐户具有
Cloud SQL Client
IAM 角色
如果您在两个项目之间进行连接,请确保启用管理员 API 并授予服务帐户权限(对于两个项目),即 运行 您尝试连接的功能从。
我正在尝试使用 Cloud Function Python 脚本连接到 Cloud SQL 运行 PostgreSQL 11。理想情况下,我想使用需要 sqlalchemy.create_engine()
才能连接的简单 pandas.DataFrame.to_sql()
连接到数据库。
这是我目前的尝试(with/without /.s.PGSQL.5432
后缀我都试过了):
engine = sqlalchemy.create_engine('postgresql+psycopg2://USERNAME:PASSWORD@/DB_NAME?host=/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432')
engine.connect()
我也尝试了 code sample provided by 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"?
编辑:
感谢
设置 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
- 确保 Functions 默认服务帐户具有
Cloud SQL Client
IAM 角色
如果您在两个项目之间进行连接,请确保启用管理员 API 并授予服务帐户权限(对于两个项目),即 运行 您尝试连接的功能从。