簡體   English   中英

AWS Lambda 為 postgreSQL 運行 NodeJs - 超時錯誤

[英]AWS Lambda functions NodeJs for postgreSQL - timeout error

我是 AWS 的新手。 我正在嘗試使用 Lambda 函數連接到 AWS RDS postgreSQL 實例。 我遵循了aws 文檔 但它使用 python 來實現 Lambda 功能。 下面是我的代碼。

 'use strict'; var pg = require('pg'); exports.handler = function (event, context) { var dbConfig = { username: '<username>', password: '<password>', database: '<database>', host: '<db-endpoint>', }; var client = new pg.Client(dbConfig); try { client.connect(); context.callbackWaitsForEmptyEventLoop = false; client.end(); } catch (err) { console.log(err); client.end(); } };

我收到如下超時錯誤

START RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847 Version: $LATEST
2020-06-15T16:28:18.911Z    368e619e-ed9d-4241-93a5-764ee01aa847    INFO    connected
END RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847
REPORT RequestId: 368e619e-ed9d-4241-93a5-764ee01aa847  Duration: 20020.16 ms   Billed Duration: 20000 ms   Memory Size: 128 MB Max Memory Used: 70 MB  Init Duration: 150.01 ms    
2020-06-15T16:28:38.901Z 368e619e-ed9d-4241-93a5-764ee01aa847 Task timed out after 20.02 seconds

錯誤請指教。

我幾乎沒有其他問題可以確保我的代碼是否正確

  • 我為數據庫端點提供了數據庫實例端點 url。 是對的嗎? 或者如果不是我應該在那里使用什么?

  • 對於像我這樣的初學者,是否有任何適當的文檔可用,關於 Lambda 函數與 nodejs 連接 RDS 上的 postgres?

您不會從 lambda 返回任何東西。 因此,請求一直掛起而沒有響應,直到超時。

使用提供給處理程序的第三個參數callback來響應或返回Promise

'use strict';
var pg = require('pg');
exports.handler = function (event, context,callback) {
    var dbConfig = {
        username: '<username>',
        password: '<password>',
        database: '<database>',
        host: '<db-endpoint>',
    };
    var client = new pg.Client(dbConfig);
    try {
        client.connect();
        context.callbackWaitsForEmptyEventLoop = false;
        client.end();

        //send the response
        callback(null,"Some Response")
    }
    catch (err) {
        console.log(err);
        client.end();
        callback(err)
    }
};

AWS 示例: AWS Lambda NodeJS 連接到 RDS Postgres 數據庫

您可以在此處閱讀包含所有方法和屬性的官方 js 文檔: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RDS.html

希望這可以幫助 !

這是異步/等待語法的答案

const { Client } = require("pg");

exports.handler = async (event, context, callback) => {
  const dbConfig = {
    host: process.env.RDS_HOSTNAME,
    user: process.env.RDS_USERNAME,
    password: process.env.RDS_PASSWORD,
    port: process.env.RDS_PORT,
    database: process.env.RDS_DATABASE,
  };
  const client = new Client(dbConfig);

  try {
    await client.connect();
    const res = await client.query("SELECT * FROM your_table");
    await client.end();
    callback(null, res.rows);
  } catch (err) {
    await client.end();
    callback(err)
  }
};

暫無
暫無

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

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