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

Google app engine 缺少用于从Google App Engine标准环境连接到云SQL的套接字,google-app-engine,google-cloud-platform,google-cloud-sql,Google App Engine,Google Cloud Platform,Google Cloud Sql,我正在尝试将标准环境中的Python 3.7 GAE应用程序连接到云SQL Postgres 9.6数据库。 本节介绍了该步骤 不幸的是,GAE实例上不存在通常用于连接数据库的UNIX套接字(文件夹/cloudsql为空) 关于我尝试的更多信息: GAE应用程序和云SQL实例位于同一项目和地区(我在europe-west1和europe-west3中尝试过) 我在app.yamlconfig文件中添加和删除了beta\u设置->cloud\u sql\u实例键,但没有任何效果。据我所知,这应该

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

不幸的是,GAE实例上不存在通常用于连接数据库的UNIX套接字(文件夹
/cloudsql
为空)

关于我尝试的更多信息:

  • GAE应用程序和云SQL实例位于同一项目和地区(我在
    europe-west1
    europe-west3
    中尝试过)
  • 我在
    app.yaml
    config文件中添加和删除了
    beta\u设置->
    cloud\u sql\u实例
    键,但没有任何效果。据我所知,这应该只在灵活的环境中需要
  • 我已经激活了云SQL管理UI
有没有人遇到并解决了这个问题


因此,有关此问题的问题可能是旧的、未回答的,或者在我的环境中无法解决此问题。

我可以通过以下配置使连接正常工作:

PROJECT=[[YOUR-PROJECT-ID]]
REGION=europe-west3
INSTANCE=instance-01
以及:

导入操作系统
从烧瓶进口烧瓶
导入psycopg2
db\u user=os.environ.get('CLOUD\u SQL\u USERNAME')
db\u pass=os.environ.get('CLOUD\u SQL\u PASSWORD')
db\u name=os.environ.get('CLOUD\u SQL\u DATABASE')
db\u conn=os.environ.get('CLOUD\u SQL\u INSTANCE')
app=烧瓶(名称)
@应用程序路径(“/”)
def main():
主机='/cloudsql/{}'。格式(db_conn)
cnx=psycopg2.connect(
dbname=db_name,
user=db_user,
password=db_pass,
主机=主机
)
使用cnx.cursor()作为光标:
execute('SELECT NOW()as NOW;')
结果=cursor.fetchall()
当前时间=结果[0][0]
提交
cnx.close()
返回str(当前_时间)
以及:

并且,用值替换
${VARIABLE}

runtime: python37
env_variables:
  CLOUD_SQL_INSTANCE: "${PROJECT}:${REGION}:${INSTANCE}"
  CLOUD_SQL_USERNAME: ${USERNAME}
  CLOUD_SQL_PASSWORD: ${PASSWORD}
  CLOUD_SQL_DATABASE: ${DATABASE}

基于类似问题,此处详细说明了最可能的根本原因:

根据讨论,其他可能的原因可能是:

  • SQL实例上缺少公共IP
  • 配置设置中的端口规格
以下是一些建议:

  • 在部署到App Engine之前,在本地运行应用程序以确保其正常工作
  • 仔细检查app.yaml文件上的云SQL配置(例如用户名、密码、实例连接名称)
  • 确保Google Cloud SQL API已启用
  • 尝试重新创建云SQL实例
在其他情况下,只需重新创建云SQL实例或数据库就可以了,因为对quickstart默认设置的修改可能很难跟踪


干杯

为什么需要公共IP?我很难理解,如果我们使用文件套接字,为什么需要IP设置?这是一些基本的GCP基础设施设置要求吗?它不能与私有IP一起工作吗?你能在云控制台终端中看到位于
/cloudsql/{instance\u name}
的unix套接字文件吗?同样在你在
app.yaml
中添加Instances之后,你在部署应用之前还需要做些什么吗?
runtime: python37
env_variables:
  CLOUD_SQL_INSTANCE: "${PROJECT}:${REGION}:${INSTANCE}"
  CLOUD_SQL_USERNAME: ${USERNAME}
  CLOUD_SQL_PASSWORD: ${PASSWORD}
  CLOUD_SQL_DATABASE: ${DATABASE}