Google Cloud Platform SQL 与 python 应用程序的实例连接
Google Cloud Platform SQL instance connection to python app
我正在部署基于 Flask on Google Cloud Platform.
的 python3.8 应用程序
我设法创建并 SQL 连接到它的实例,并与这样的实例交互(允许我的本地 IP 入站连接到实例)直接从我的本地机器启动应用程序(在 this guide) 初始化数据库后:
flask db init
flask db migrate
flask db upgrade
允许我将本地计算机连接到 SQL 实例的配置字符串是(在 config.py
中):
SQLALCHEMY_DATABASE_URI = f"mysql+mysqldb://root:{PASSWORD}@{PUBLIC_IP_ADDRESS}/{DBNAME}?unix_socket=/cloudsql/{PROJECT_ID}:{INSTANCE_NAME}"
现在,如果我在 config.py
中使用此行部署应用程序并尝试从我的 GCP 应用程序页面与数据库交互,它无法连接到数据库。看起来它试图作为外部应用程序连接(就像我的本地机器一样)并被拒绝(因为我从未允许应用程序引擎实例的入站连接,因为它没有静态 IP)。
我想 SQL 实例已经以某种方式连接到我的应用程序,我可以通过一些本地 link 访问它,有人知道如何吗?
你是对的。作为 App Engine 一个无服务器平台,尝试将与每个单独实例关联的每个不同 IP 列入白名单没有多大意义 运行 您的代码或将所有 IP address ranges 对应于 App Engine 服务的白名单。
如果您使用灵活或标准,具体情况可能会有所不同。我相信您使用的是 App Engine Standard,并且使用 Unix Socket 和 Cloud SQL 的连接名称可能足以完成这样的连接。找到相关的代码片段 here.
SQLALCHEMY 的以下连接字符串应该可以工作:
mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=<socket_path>/<cloud_sql_instance_name>
请注意,它使用与您不同的驱动程序,并且不包括实例的 Public IP 地址。
如果问题仍然存在,请尝试添加 requirements.txt
文件并指定您使用的是 App Engine Flex 还是 Standard。
我正在部署基于 Flask on Google Cloud Platform.
的 python3.8 应用程序我设法创建并 SQL 连接到它的实例,并与这样的实例交互(允许我的本地 IP 入站连接到实例)直接从我的本地机器启动应用程序(在 this guide) 初始化数据库后:
flask db init
flask db migrate
flask db upgrade
允许我将本地计算机连接到 SQL 实例的配置字符串是(在 config.py
中):
SQLALCHEMY_DATABASE_URI = f"mysql+mysqldb://root:{PASSWORD}@{PUBLIC_IP_ADDRESS}/{DBNAME}?unix_socket=/cloudsql/{PROJECT_ID}:{INSTANCE_NAME}"
现在,如果我在 config.py
中使用此行部署应用程序并尝试从我的 GCP 应用程序页面与数据库交互,它无法连接到数据库。看起来它试图作为外部应用程序连接(就像我的本地机器一样)并被拒绝(因为我从未允许应用程序引擎实例的入站连接,因为它没有静态 IP)。
我想 SQL 实例已经以某种方式连接到我的应用程序,我可以通过一些本地 link 访问它,有人知道如何吗?
你是对的。作为 App Engine 一个无服务器平台,尝试将与每个单独实例关联的每个不同 IP 列入白名单没有多大意义 运行 您的代码或将所有 IP address ranges 对应于 App Engine 服务的白名单。
如果您使用灵活或标准,具体情况可能会有所不同。我相信您使用的是 App Engine Standard,并且使用 Unix Socket 和 Cloud SQL 的连接名称可能足以完成这样的连接。找到相关的代码片段 here.
SQLALCHEMY 的以下连接字符串应该可以工作:
mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=<socket_path>/<cloud_sql_instance_name>
请注意,它使用与您不同的驱动程序,并且不包括实例的 Public IP 地址。
如果问题仍然存在,请尝试添加 requirements.txt
文件并指定您使用的是 App Engine Flex 还是 Standard。