我正在尝试将标准环境中的Python 3.7 GAE应用程序连接到Cloud SQL Postgres 9.6数据库。本文档中介绍了该过程。
遗憾的是,GAE 实例上不存在通常用于连接数据库的 UNIX 套接字/cloudsql/<DB_CONNECTION_NAME>
(文件夹/cloudsql
为空(。
有关我尝试的更多信息:
- GAE 应用和云 SQL 实例在同一个项目和区域中(我在
europe-west1
和europe-west3
中尝试过( - 我已经在
app.yaml
配置文件中添加并删除了一个beta_settings
->cloud_sql_instances
键,但无济于事。据我了解,无论如何,这应该只在灵活的环境中需要 - 我已激活云 SQL 管理员 UI
有没有人遇到并解决了这个问题?
关于此问题的 SO 问题要么是旧的、未回答的,要么不能解决我环境中的问题。
我能够使用以下配置获得连接:
PROJECT=[[YOUR-PROJECT-ID]]
REGION=europe-west3
INSTANCE=instance-01
和:
import os
from flask import Flask
import psycopg2
db_user = os.environ.get('CLOUD_SQL_USERNAME')
db_pass = os.environ.get('CLOUD_SQL_PASSWORD')
db_name = os.environ.get('CLOUD_SQL_DATABASE')
db_conn = os.environ.get('CLOUD_SQL_INSTANCE')
app = Flask(__name__)
@app.route('/')
def main():
host = '/cloudsql/{}'.format(db_conn)
cnx = psycopg2.connect(
dbname=db_name,
user=db_user,
password=db_pass,
host=host
)
with cnx.cursor() as cursor:
cursor.execute('SELECT NOW() as now;')
result = cursor.fetchall()
current_time = result[0][0]
cnx.commit()
cnx.close()
return str(current_time)
和:
flask==1.0.2
psycopg2==2.8
并且,将${VARIABLE}
替换为值:
runtime: python37
env_variables:
CLOUD_SQL_INSTANCE: "${PROJECT}:${REGION}:${INSTANCE}"
CLOUD_SQL_USERNAME: ${USERNAME}
CLOUD_SQL_PASSWORD: ${PASSWORD}
CLOUD_SQL_DATABASE: ${DATABASE}
基于类似的问题,最可能的根本原因详述如下:https://issuetracker.google.com/117804657#comment16
根据讨论,其他可能的原因可能是:
- SQL 实例上缺少公共 IP
- 配置设置中的端口规范
以下是一些建议:
- 在
- 部署到 App Engine 之前,在本地运行应用程序以确保其正常工作。
- 仔细检查 app.yaml 文件上的云 SQL 配置(例如用户名、密码、实例连接名称(。
- 确保已启用 Google Cloud SQL API。
- 尝试重新创建云 SQL 实例。
在其他情况下,只需重新创建 Cloud SQL 实例或数据库即可,因为对快速入门默认设置的修改可能难以跟踪。
干杯
我通过启用Cloud SQL Admin API来解决此问题。
见 https://cloud.google.com/sql/docs/postgres/debugging-connectivity