簡體   English   中英

將 Node.js 應用程序連接到雲 SQL 數據庫時出現問題

[英]Trouble connecting Node.js app to Cloud SQL Database

我需要部署一個可以與數據庫交互的 node.js 應用程序。 我已經配置了 Cloud SQL 數據庫,為此我已將我的計算機公共 IP 列入白名單。 當我在本地運行我的應用程序時,一切都很好,我可以訪問我的數據。 但是,在使用 Google App Engine 進行部署時,我不知道如何連接到我的數據庫。 到目前為止我所做的:

  • 創建一個app.yaml文件,其中包含runtime: nodejs12
  • 在配置文件中更改數據庫主機。 不確定我是否必須編寫 Cloud SQL 的公共 IP(就像我在本地開發中所做的那樣)、 localhost (因為 GAE 和 Cloud SQL 都托管在同一台服務器上)或完整的INSTANCE_CONNECTION_NAME
  • 根據Cloud SQL Client角色到適當的服務,在 IAM 管理面板上

我閱讀了可能必須使用代理的文檔。 我真的不知道該怎么辦,所以我什么也沒做。 你覺得這是一種值得探索的方式嗎?

先感謝您。

文檔頁面在這里:

https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard

對於公共 IP 連接:

與 Unix sockets 連接

正確配置后,您可以使用以下格式將服務連接到雲 SQL 實例的 unix 域套接字:

/cloudsql/INSTANCE_CONNECTION_NAME

這些連接會自動加密,無需任何額外配置。 下面顯示的代碼示例摘自 GitHub 站點上更完整的示例。 單擊 GitHub 上的查看以查看更多信息。

警告:基於 Linux 的操作系統的最大套接字路徑長度為 107 個字符。 如果路徑的總長度超過此長度,您將無法從 App Engine 連接到套接字。

cloud-sql/mysql/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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM