Мое лучшее предположение состоит в том, что у меня есть проблема с обещанием в моем коде, но я думаю, что это может быть и проблема с ssh2-sftp-client в моем коде.
Я написал это 10 различными способами. Думайте об этом как о коде Доказательства Концепции, а не письмах 12-летнего. В последней итерации я перешел к следующему этапу.
Пакетное задание.
* Захватывает файлы из S3 * Идет один за другим (по крайней мере, в этой итерации) и отправляет их SFTP поставщику * Удаляет файл в формате S3
Если я не обращаюсь к обратному вызову, время ожидания составляет 10 секунд, но все работает. Файлы перемещаются вверх менее чем за 4 секунды. Если я добавлю обратный вызов, будут обработаны только первые два. Мои выводы говорят, что третий файл был обработан, но это не так.
function processSingleFile(obj, fn, context)
{
return new Promise(async function(resolve, reject)
{
//process.nextTick(async function () {
try{
console.log(obj);
let pathVariables = obj.Key.split('/');
let filename = pathVariables[2];
let srcKeyString = pathVariables[1];
console.log("Beginning to process: " + filename);
/*
let buffer = s3.getObject({
Bucket: bucket_name,
Key: obj.Key
}).createReadStream();
*/
let buffer = await getS3File(bucket_name, obj.Key);
console.log("Got file info " + obj.Key );
let Client = require('ssh2-sftp-client');
let sftp = new Client();
let remoteFilePath = '/Import/30Automations/' + filename;
sftp.connect({
host: hostTargetName,
port: '22',
username: userName,
password: password
}).then(() => {
sftp.put(buffer, remoteFilePath);
}).then(() => {
sftp.end;
sftp.close;
//sftp.end(); //nothing works when I use this
}).then(() => {
Client.end; //not needed
}).then(() => {
deleteEncryptedlFile(obj.Key); //this part of code not shown
}).then(() => {
console.log("Successfully processed: " + filename);
resolve();
}).catch(err => {
console.error("ALERT in transfer for " + filename + ": " + err.message);
resolve();
});
}catch(err){
console.log("ALERT: processing single file: " + obj + "err: " + err);
resolve();
}
});
}
exports.handler = function(event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;
async function moveFiles(){
try{
var params = {
Bucket: bucketname,
Delimiter: '',
Prefix: 'outgoing'
}
let index = 0;
s3.listObjects(params, async function (err, data) {
if(err)throw err;
let rows = data.Contents.length;
while (index < rows){
var reply = await processSingleFile(data.Contents[index]);
index++;
if (index === rows){
console.log("JOB COMPLETED");
callback(null, JSON.stringify("success")); //if I comment out, all files are moved successfully but I time out.
}
}
});
}catch(err){
console.error("ALERT Error processing job. See logs " + err.message);
callback(JSON.stringify("Error"), null);
}
}
moveFiles();
};
Вот вывод
2020-01-17T01:04:44.790Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Beginning to process: 20200115_Ta11_file3.txt.pgp
2020-01-17T01:04:44.923Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Got file info outgoing/professional/20200115_Ta11_file3.txt.pgp
2020-01-17T01:04:46.015Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO file deleted outgoing/professional/20200115_Ta11_file3.txt.pgp
2020-01-17T01:04:46.018Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Successfully processed: 20200115_Ta11_file3.txt.pgp
2020-01-17T01:04:46.019Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Beginning to process: 20200116_Ta11_file1.txt.pgp
2020-01-17T01:04:46.179Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Got file info outgoing/professional/20200116_Ta11_file1.txt.pgp
2020-01-17T01:04:47.091Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO file deleted outgoing/professional/20200116_Ta11_file1.txt.pgp
2020-01-17T01:04:47.093Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Successfully processed: 20200116_Ta11_file1.txt.pgp
2020-01-17T01:04:47.093Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Beginning to process: 20200116_Ta11_file2.txt.pgp
2020-01-17T01:04:47.252Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Got file info outgoing/professional/20200116_Ta11_file2.txt.pgp
2020-01-17T01:04:48.197Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO file deleted outgoing/professional/20200116_Ta11_file2.txt.pgp
2020-01-17T01:04:48.199Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO Successfully processed: 20200116_Ta11_file2.txt.pgp
2020-01-17T01:04:48.199Z 6630b8b7-764d-4940-87f8-d6ada6b6eb84 INFO JOB COMPLETED
END RequestId: 6630b8b7-764d-4940-87f8-d6ada6b6eb84
REPORT RequestId: 6630b8b7-764d-4940-87f8-d6ada6b6eb84 Duration: 3775.81 ms Billed Duration: 3800 ms Memory Size: 1536 MB Max Memory Used: 105 MB Init Duration: 541.10 ms