【发布时间】:2018-06-14 15:29:27
【问题描述】:
我正在尝试从 GCP 端点连接到另一个项目中的 Cloud SQL (PostgreSQL) 数据库。我的端点后端是使用 Python 的灵活环境中的应用引擎。
端点 API 在本地运行时适用于非数据库请求和数据库请求。但是当需要访问数据库时,部署的 API 会产生这个结果:
{
"code": 13,
"message": "BAD_GATEWAY",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"stackEntries": [],
"detail": "application"
}
]
}
我通过此链接 (https://cloud.google.com/endpoints/docs/openapi/get-started-app-engine) 创建了端点项目,并通过此链接 (https://cloud.google.com/appengine/docs/flexible/python/using-cloud-sql-postgres) 从另一个项目链接到 Cloud SQL。
一个区别是我不使用 SQLALCHEMY_DATABASE_URI 环境变量进行连接,而是从配置文件中获取连接字符串以与 psycopg2 SQL 字符串一起使用。此代码适用于同一项目中的 CE 服务器。
还仔细检查了具有 PostgreSQL 数据库的项目是否已授予 Cloud SQL 编辑器访问 Endpoints 项目的服务帐号的权限。而且,如果应用引擎与 Cloud SQL db 位于同一项目中(不是来自端点项目),则 db 连接字符串可以正常工作。
不知道还有什么可以尝试的。如何获得有关 BAD_GATEWAY 的更多详细信息?这就是端点日志文件中的全部内容,而 Cloud SQL 日志文件中没有任何内容。
非常感谢—— 丹
这是我的 app.yaml:
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3
env_variables:
SQLALCHEMY_DATABASE_URI: >-
postgresql+psycopg2://postgres:password@/postgres?host=/cloudsql/cloudsql-project-id:us-east1:instance-id
beta_settings:
cloud_sql_instances: cloudsql-project-id:us-east1:instance-id
endpoints_api_service:
name: api-project-id.appspot.com
rollout_strategy: managed
还有 requirements.txt:
Flask==0.12.2
Flask-SQLAlchemy==2.3.2
flask-cors==3.0.3
gunicorn==19.7.1
six==1.11.0
pyyaml==3.12
requests==2.18.4
google-auth==1.4.1
google-auth-oauthlib==0.2.0
psycopg2==2.7.4
【问题讨论】:
-
我应该补充一点,API 在不访问数据库时工作正常。因此,例如,教程中的 ECHO 是有效的。
-
我支持 GCP。我们已尝试以多种方式重现您的问题,并且我们发现文档中存在一些缺陷,但我们无法重现它。你能打开一个支持案例来更深入地了解它吗?我们将提供更多工具来帮助您。在您打开案例时提及此帖子。
标签: google-cloud-endpoints app-engine-flexible