GCP应用程序引擎实例无法连接到GCP云SQL实例



应用程序引擎配置:

instance_class: F1
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: automatic
min_pending_latency: automatic
max_pending_latency: automatic

NodeJ的应用程序正在运行:(i(Apollo服务器,(ii(Express,(iii(Knex

步骤:

  1. 获取云SQL实例的公共IP地址
  2. 获取云SQL实例的连接名称
  3. app.yaml中设置云SQL实例的连接名称
  4. 在客户端index.ts中设置云SQL实例的公共IP地址

index.ts

// @note Using Knex
const db = await initDatabase({
client: 'pg',
connection: {
host: args['blockchain-db-host'],
port: args['blockchain-db-port'],
database: args['blockchain-db-database'],
user: args['blockchain-db-user'],
password: args['blockchain-db-pass'],
},
})

不适用。同时获取UsernamePassword,并将它们设置在index.ts中,index.ts中的Port用作5432,因为云SQL实例是Postgres数据库。

app.yaml

beta_settings:
cloud_sql_instances: <project>:<region>:<sql-instance>=tcp:5432

不适用。通过gcloud app deploy部署的beta_settings没有反映在Google App Engine的配置文件中。此外,我不熟悉Unix套接字方法,我假设在设置应用程序引擎的云代理连接时,5432也应该用作PORT

我建议按照文档中的说明进行操作:从应用程序引擎(Flex(连接到云SQL。

特别是对于app.yaml,您需要连接172.17.0.1:PORT,其中PORT是您指定的端口(5432(。这是因为Cloud SQL Auth代理正在侦听172.17.0.1,以加密并转发到您的Cloud SQL实例的连接。

即使应用程序是一个灵活的环境,应用程序引擎也可以通过以下方式连接到云SQL:(i(TCP和(ii(Unix套接字

注意:在我的情况下,我建议将Unix SocketConnection Instance结合使用,否则,使用IP地址通常需要白名单和其他配置。

如果您使用的是Cloud SQL实例提供的Connection Instance Name,则应该使用Unix Socket方法来建立连接。

在这种情况下,app.yaml必须具有:

beta_settings:
cloud_sql_instances: <project>:<region>:<sql-instance>=tcp:5432

并且index.ts必须类似:

const db = await initDatabase({
client: 'pg',
connection: {
host: `/cloudsql/${args['blockchain-sql-connection-name']}`,
port: args['blockchain-db-port'],
database: args['blockchain-db-database'],
user: args['blockchain-db-user'],
password: args['blockchain-db-pass'],
},
})

相关内容

  • 没有找到相关文章