[英]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.