通过部署的App Engine应用程序连接到Cloud SQL(不同地区)

时间:2016-07-14 09:03:42

标签: python google-app-engine flask google-cloud-sql

我目前有一个部署的App Engine应用程序(通过Cloud SQL授权)和我的Cloud SQL实例在同一个项目中。我正在使用Python& Flask并按照原始Google代码连接到Cloud SQL。

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
    try:
        return MySQLdb.connect(
             unix_socket='/cloudsql/{}:{}'.format(
                 CLOUDSQL_PROJECT,
                 CLOUDSQL_INSTANCE),
             user='root',
             db='my_db'
             )
    except:
        stacktrace = traceback.format_exc()
        logging.error("%s", stacktrace)
        return False
else:
    try:
        return MySQLdb.connect(host='xxx.xxx.xx.xx', 
                               user='root',
                               db='my_db',
                               passwd='password',
                               port=3306)
    except:
        return False

在本地devserver上运行时一切都很好但是由于部署我无法连接到Cloud SQL。这是我得到的错误:

OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 38")

我已多次检查过两个变量CLOUDSQL_PROJECT& CLOUDSQL_INSTANCE配置正确。 我也尝试过连接而不指定db,有/没有指定密码等等。 一个潜在的问题可能是我们的App Engine实例位于中心(需要更改),而我们的Cloud SQL位于欧洲西部。我想知道这是否可能是问题的根源,因为我没有看到任何其他可能导致此错误或我在其他地方犯了错误。

感谢您的时间和建议 亚历

1 个答案:

答案 0 :(得分:1)

https://cloud.google.com/sql/docs/app-engine-connect,GAE应用程序需要与Cloud SQL实例位于同一区域。