簡體   English   中英

AWS EC2 實例(生產)中的 PostGres 超時錯誤

[英]PostGres Timeout error in AWS EC2 Instance (Production)

我是后端的新手,這是我對 Postgres 的配置

const pool = new Pool({
      user: "username",
      host: "hostname",
      database: "dbname",
      password: "postgres",
      port: 5432,
      max: 10,
      min: 10,
      statement_timeout: 10000,
      idleTimeoutMillis: 30000,
      connectionTimeoutMillis: 2000,
      maxUses: 7500,
    });

    console.log("requesting db");
    pool.connect((err, client, release) => {
      console.error("Error acquiring client", err);
      console.error("Error acquiring client", client);
      console.error("Error acquiring client", release);
      if (err) {
        return console.error("Error acquiring client", err.stack);
      }
    });
    pool.on("connect", () => {
      console.log("connected to the db");
    });
    pool.on("error", function (err, client) {
      console.log(client);
      console.log(err);
    });
    module.exports = pool;

在生產中,我面臨以下錯誤,但它在本地工作我嘗試在我的本地機器上連接我的產品數據庫它工作正常

Error acquiring client Error: Connection terminated due to connection timeout
at Connection.<anonymous> (/home/ubuntu/TapToCookBackEnd/node_modules/pg/lib/client.js:255:9)
at Object.onceWrapper (events.js:421:28)
at Connection.emit (events.js:315:20)
at Socket.<anonymous> (/home/ubuntu/TapToCookBackEnd/node_modules/pg/lib/connection.js:78:10)
at Socket.emit (events.js:315:20)
at emitCloseNT (net.js:1656:8)
at processTicksAndRejections (internal/process/task_queues.js:83:21)
at runNextTicks (internal/process/task_queues.js:66:3)
at listOnTimeout (internal/timers.js:518:9)
at processTimers (internal/timers.js:492:7)
Error acquiring client undefined
Error acquiring client [Function: NOOP]
Error acquiring client Error: Connection terminated due to connection timeout
    at Connection.<anonymous> (/home/ubuntu/TapToCookBackEnd/node_modules/pg/lib/client.js:255:9)
    at Object.onceWrapper (events.js:421:28)
    at Connection.emit (events.js:315:20)
    at Socket.<anonymous> (/home/ubuntu/TapToCookBackEnd/node_modules/pg/lib/connection.js:78:10)
    at Socket.emit (events.js:315:20)
    at emitCloseNT (net.js:1656:8)
    at processTicksAndRejections (internal/process/task_queues.js:83:21)
    at runNextTicks (internal/process/task_queues.js:66:3)
    at listOnTimeout (internal/timers.js:518:9)
    at processTimers (internal/timers.js:492:7)

以下路線在生產中運行良好,但未建立與 postgres 的連接

 app.get("/api/v1/test", function (req, res) {
      res.send("Hello World test!");
    });

我的 EC2 配置

入站規則

在此處輸入圖像描述 出站規則

在此處輸入圖像描述

我的 RDS 配置

入站規則

在此處輸入圖像描述

出站規則

在此處輸入圖像描述

我懷疑 RDS 實例沒有允許來自您的 EC2 實例的連接的安全組。 請參閱此幫助文章: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html

如果您的 RDS 實例具有公共 IP 地址,則域名將解析為該地址。 如果您的 EC2 實例和 RDS 實例都托管在同一個 VPC 中,那么我建議禁用公共 IP 地址。 這可能會使從您的個人計算機連接到數據庫變得更加困難,但在這種情況下,您可以使用 SSH 隧道來完成。

設置 RDS 供公共訪問時,僅打開安全組中的端口是不夠的。

您還需要 select 是的“公共可訪問”,它隱藏在“附加連接配置”部分中(默認情況下關閉,因此很容易忽略)。

確保你所有需要的包在你本地機器的版本中都相同(節點、Npm、Postgres)

暫無
暫無

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

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