如何允许Google App Engine访问Google Cloud PostgreSQL

时间:2017-12-29 13:57:47

标签: node.js postgresql google-app-engine google-cloud-sql

我在Google App Engine中发现了我的node.js问题,因为它无法连接到Google Cloud PostgreSQL:

Unhandled rejection SequelizeBaseError: connect ETIMEDOUT ***.***.***.***:5432
at (/app/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:111)
at Connection.<anonymous> (/app/node_modules/pg/lib/client.js:176)
at emitOne (events.js:96)
at Connection.emit (events.js:188)
at Socket.<anonymous> (/app/node_modules/pg/lib/connection.js:59)
at emitOne (events.js:96)
at Socket.emit (events.js:188)
at emitErrorNT (net.js:1281)
at _combinedTickCallback (internal/process/next_tick.js:74)
at process._tickCallback (next_tick.js:98)

我不确定如何在下面添加IP地址(可能我错过了在Google Cloud SQL中配置的内容)。

enter image description here

1 个答案:

答案 0 :(得分:1)

how to connect App Engine applications to Cloud SQL instances上有一些非常好的文档。在那里,您可以找到有关如何让您的应用程序访问Cloud SQL实例的详细步骤,以及本地开发和生产环境中支持的每种编程语言和SQL语言。

假设在将应用程序部署到生产环境(即App Engine环境)时发现了连接问题,请在此处总结您必须执行的主要步骤:

  1. 使用命令gcloud sql instances describe [INSTANCE_NAME]获取您的Cloud SQL实例的全名。它应该是<PROJECT_ID>:<REGION>:<INSTANCE_NAME>
  2. 类型
  3. 使用与App Engine应用程序关联的服务帐户授予对App Engine的访问权限。它应该具有 Cloud SQL Client Cloud SQL Editor 角色。
  4. app.yaml文件中为您的SQL实例定义环境变量 beta设置
  5. (将此代码编辑为符合您的参数,添加到app.yaml文件中):

    env_variables:
      SQL_USER: <YOUR_CLOUD_SQL_USER>
      SQL_PASSWORD: <YOUR_CLOUD_SQL_PASSWORD>
      SQL_DATABASE: <YOUR_CLOUD_SQL_DATABASE>
      INSTANCE_CONNECTION_NAME: <INSTANCE_CONNECTION_NAME>   # With format as <PROJECT_ID>:<REGION>:<INSTANCE_NAME>
    
    beta_settings:
      cloud_sql_instances: <INSTANCE_CONNECTION_NAME>   # With same format
    
    1. 使用package.json文件将Node.js PostreSQL客户端库添加到您的应用程序。文档建议使用 Knex.js pg ,但大概你可以使用你选择的那个。
    2. (将此代码添加到package.json文件中):

      "dependencies": {
        "async": "2.5.0",
        "express": "4.15.4",
        "knex": "0.13.0",
        "pg": "7.3.0",
        "prompt": "1.0.0"
      },
      

      为应用程序设置正确的配置后,您可以查看此sample Node.js code。为了在主脚本中找到任何缺失的项目。

      如果您现在部署应用程序,它应该可以作为魅力。

      PS:请记住,由于App Engine和Cloud SQL是Google Cloud Platform系列的两个产品,因此无需在Cloud SQL实例中授权外部网络,因此您也可以忘记该部分。 / p>