【问题标题】:BAD_GATEWAY when connecting Google Cloud Endpoints to Cloud SQL将 Google Cloud Endpoints 连接到 Cloud SQL 时出现 BAD_GATEWAY
【发布时间】: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


【解决方案1】:

(这应该是一个评论,但格式确实会恶化阅读,我会在这里更新)

我正在尝试重现您的错误,但我提出了一些问题:

  1. 您如何处理教程中的环境变量?您是对它们进行硬编码还是使用环境变量?它们使用 Cloud Shell 重置(如果您使用的是 Cloud Shell)。
  2. 我不清楚:您是否在 CloudSQL 中看到任何类型的日志文件(没有错误),或者您甚至没有看到日志?
  3. CloudSQL、app.yaml 和 requirements.txt 配置相关。你能提供更多关于这方面的信息吗?如果您更新帖子,请注意不要发布用户名、密码或其他敏感信息。
  4. 两个项目是否在同一个区域/专区?有时这是必需的,但我在文档中没有看到任何指向这一点的内容。

我的直觉指向凭据问题,但如果您在帖子中添加更多信息以更好地了解问题的根源,这将很有用。

【讨论】:

  • 谢谢,鲁本。 1. 环境变量; 2. 除了审计信息,我在 CloudSQL 日志文件中没有看到任何内容。 3. 更新帖子以包含这些内容。
  • 我更新了您的帖子以包含答案。请你也回答第4点好吗?我正在尝试创建与您相同的管道。
  • Rubén,是的,两个项目都在同一个区域。我认为这并不重要,但我应该提到的是,我没有使用 SQLALCHEMY_DATABASE_URI 环境变量连接,而是在 config.py 中使用带有连接字符串的 psycopg2。 (我会更新帖子。)我需要继续前进,所以决定改用在计算引擎中使用端点。计算引擎具有相同的 python 代码,但与端点在同一个项目中。我成功连接到数据库。感谢您的帮助,但我认为我在使用 Compute Engine 方面取得了更大的成功。
猜你喜欢
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多