我需要部署一个可以与数据库交互的node.js应用程序。我已经配置了云SQL数据库,我已经将我的计算机公共IP列入了白名单。当我在本地运行我的应用程序时,一切都很好,我可以访问我的数据。然而,当涉及到谷歌应用引擎的部署时,我不知道如何连接到我的数据库。到目前为止我所做的:
- 创建包含
runtime: nodejs12
的app.yaml
文件 - 正在更改配置文件中的数据库主机。不确定我是必须编写Cloud SQL的公共IP(就像我在本地开发中所做的那样(、
localhost
(因为GAE和Cloud SQL都托管在同一台服务器上(还是完整的INSTANCE_CONNECTION_NAME
- 根据IAM管理面板上相应服务的
Cloud SQL Client
角色
我在文档中读到我可能必须使用代理。我真的不知道该怎么办,所以我什么都没做。你认为这是一种值得探索的方式吗?
提前谢谢。
文档页面如下:
https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard
用于公共IP连接:
与Unix套接字连接
一旦正确配置,您就可以使用以下格式将服务连接到Cloud SQL实例的unix域套接字:
/cloudsql/INSTANCE_CONNECTION_NAME
这些连接是自动加密的,不需要任何额外的配置。下面显示的代码示例摘自GitHub网站上更完整的示例。点击GitHub上的View查看更多。
警告:基于Linux的操作系统的套接字路径长度最大为107个字符。如果路径的总长度超过此长度,您将无法连接到应用程序引擎的套接字。
cloud-sql/mysql/server.js在GitHub 上查看
const dbSocketPath = process.env.DB_SOCKET_PATH || "/cloudsql"
// Establish a connection to the database
return await mysql.createPool({
user: process.env.DB_USER, // e.g. 'my-db-user'
password: process.env.DB_PASS, // e.g. 'my-db-password'
database: process.env.DB_NAME, // e.g. 'my-database'
// If connecting via unix domain socket, specify the path
socketPath: `${dbSocketPath}/${process.env.INSTANCE_CONNECTION_NAME}`,
// Specify additional properties here.
...config
});
}
如果你连接的是私有IP,忽略所有这些,你可以使用端口3306(对于MySQL(或5432(对于Postgres(的私有IP。