应用程序引擎配置:
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
步骤:
- 获取云SQL实例的公共IP地址
- 获取云SQL实例的连接名称
- 在
app.yaml
中设置云SQL实例的连接名称 - 在客户端
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'],
},
})
不适用。同时获取Username
、Password
,并将它们设置在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 Socket
与Connection 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'],
},
})