这是我用来读取表格并将结果上传到S3的Lambda代码:
'use strict';
const pg = require('pg');
const aws = require('aws-sdk');
const awsParamStore = require( 'aws-param-store' );
exports.handler = async function (context)
{
function putObjectToS3(bucket, key, data){
var s3 = new aws.S3();
var params = {
Bucket : bucket,
Key : key,
Body : data
}
s3.putObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
}
context.callbackWaitsForEmptyEventLoop = false;
var dbname = 'pg_db';
var milliseconds = (new Date).getTime();
var fileName = 'process_log_' + milliseconds.toString() + '.json';
let parameter = awsParamStore.getParameterSync(process.env.ParameterPath);
var client = new pg.Client(parameter.Value + '/' + dbname);
await client.connect();
const { rows } = await client.query('SELECT * FROM public.mytable LIMIT ' + process.env.LimitRes.toString() + ';');
client.end();
var json = JSON.stringify(rows);
putObjectToS3('mybucket', 'thefile.json', json);
//return JSON.stringify(rows); << verified that there are actually 10,000 rows of data
//return json; << verified that the json is valid.
//return rows.length; << 10,000 count
};
我已验证数据有效,并且结果中确实存在行数。
但是,行为是不一致的。有时上传会发生,但大多数时候不会。我必须运行几次代码才能将其上传,并且行集越大,发生的情况就越少。
想知道查询调用是否不总是及时返回?
Node和JS的新手,所以不确定我是否必须以某种方式等待查询,直到它完全完成为止(不确定如何执行此操作。)
顺便说一句,Lambda内存设置被设置为1664 MB,因此有足够的数据处理能力。此外,代码在运行时绝不会引发错误,始终为绿色。同样在Lambda超时时间(5分钟)之内。
感谢,谢谢!