我正在尝试将Google Compute Engine实例与MySQL数据库连接到使用Laravel的Google App Engine。实际上,我已经将Google App Engine连接到Cloud SQL实例,我对此没有问题,但是我需要与位于Google Compute Engine上的数据库进行附加的数据库连接。
Google Compute Engine实例在另一个项目上。这是我的计划:
项目A->计算引擎 ->实例 -> MySQL数据库
项目B->应用程序引擎 -> Laravel
项目B->云SQL-> db -instance-> mySQL数据库
这是我的app.yaml文件:
runtime: php
env: flex
runtime_config:
document_root: public
# Ensure we skip ".env", which is only for local development
skip_files:
- .env
env_variables:
# Put production environment variables here.
APP_LOG: "errorlog"
APP_KEY: "[KEY]"
STORAGE_DIR: "/tmp"
CACHE_DRIVER: "database"
SESSION_DRIVER: "database"
APP_DEBUG: "true"
#CLOUD SQL database connection
DB_CONNECTION: "[DATABASE_1_NAME]"
DB_HOST: "[CLOUD_SQL_INSTANCE_NAME]"
DB_DATABASE: "[DATABASE_1_NAME]"
DB_USERNAME: "root"
DB_PASSWORD: "[PASSWORD]"
DB_SOCKET: "/cloudsql/[PROJECTB]:[REGION]:[CLOUD_SQL_INSTANCE_NAME]"
# COMPUTE ENGINE database connection
DB_HOST_2: "[COMPUTE_ENGINE_INSTANCE_NAME]"
DB_DATABASE_2: "[DATABASE_2_NAME]"
DB_USERNAME_2: "root"
DB_PASSWORD_2: "[PASSWORD]"
beta_settings:
cloud_sql_instances: "[PROJECTB]:[REGION]:[CLOUD_SQL_INSTANCE_NAME]"
我认为您使用的是带有PHP的Google App Engine Standard环境。当您将GAE应用程序连接到在Google Compute Engine实例上托管的DB时,它被视为与"外部DB"的连接。因此,您需要将GAE视为GCE实例的外部客户端。
因此,您必须配置VPC防火墙,以便从外部接受连接到端口3306,并且必须将外部GCE实例IP地址指定为连接字符串的主机。确保您的防火墙规则接受无处不在的连接(IP掩码:0.0.0.0/0)。
希望这对您有所帮助。再见