缺少用于从 Google App Engine 标准环境连接到 Cloud SQL 的套接字



我正在尝试将标准环境中的Python 3.7 GAE应用程序连接到Cloud SQL Postgres 9.6数据库。本文档中介绍了该过程。

遗憾的是,GAE 实例上不存在通常用于连接数据库的 UNIX 套接字/cloudsql/<DB_CONNECTION_NAME>(文件夹/cloudsql为空(。

有关我尝试的更多信息:

  • GAE 应用和云 SQL 实例在同一个项目和区域中(我在 europe-west1europe-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

相关内容

  • 没有找到相关文章

最新更新