将Google Compute Engine与Google App Engine相关联

时间:2017-09-13 21:26:52

标签: laravel google-app-engine google-compute-engine google-cloud-sql app.yaml

我正在尝试使用Laravel将Google Compute Engine实例与MySQL数据库连接到Google App Engine。我实际上已将我的Google App Engine连接到Cloud SQL实例,我对此没有任何问题,但我需要与位于Google Compute Engine上的数据库建立额外的数据库连接。

Google Compute Engine实例位于不同的项目中。这是我的计划:

项目A - >计算引擎 - >实例 - > MySQL数据库

项目B - > App Engine - > Laravel

项目B - > Cloud SQL - >数据库实例 - > 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]"

1 个答案:

答案 0 :(得分:0)

我认为您正在使用带有PHP的Google App Engine Standard环境。 将GAE应用程序连接到Google Compute Engine实例上托管的数据库时,它将被视为与“外部数据库”的连接。因此,您需要将GAE视为GCE实例的外部客户端。

因此,您必须配置VPC firewall以便从外部接受与端口3306的连接,并且必须将外部GCE实例IP地址指定为连接字符串的主机。确保防火墙规则接受来自任何地方的连接(IP掩码:0.0.0.0/0)。

希望这会对你有所帮助。 再见