大数据对象的Node.js AWS Lambda s3.putObject上传不一致

时间:2018-07-20 16:04:02

标签: node.js amazon-web-services amazon-s3 aws-lambda

这是我用来读取表格并将结果上传到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分钟)之内。

感谢,谢谢!

0 个答案:

没有答案