Этот код хорошо работает локально.Тем не менее, он не ведет себя странно в среде AMS лямбда.Ошибка не возникает.Однако на самом деле это не работает.(лямбда) События входа и прогресса узла-архиватора не вызываются.В чем проблема?
Я могу отправить свой код в GitHub, если это необходимо.
Окружение
- узел v8.10
- вAws Lambda
- использование без сервера
'use strict';
const axios= require('axios')
const archiver= require('archiver')
const AWS = require('aws-sdk')
const { log } = console
const logging = value => log(value)
const errorHandler = logging
const loggingW = (value, b) => v2 => {
if(b) console.log(value,v2)
}
const stream2 = (Bucket, Key) => {
const stream = require('stream');
const Body = new stream.PassThrough();
s3.upload({
Bucket, Key, Body,
}, errorHandler)
return Body
}
const s3 = new AWS.S3({
accessKeyId: '===', secretAccessKey: '===' // ur key
})
const hello = async (event, context) => {
const res = await axios({
url: 'some image', // some image url
responseType: 'stream'
})
const archive = archiver('zip')
archive
.on('entry', loggingW('a-e', true))
.on('progress', loggingW('a-p', true))
.on('warning', loggingW('a-w', true))
.on('fininsh', loggingW('a-finish', true))
.on('end', loggingW('a-end', true))
.on('close', loggingW('a-close', true))
.on('error', function(err) {
console.log('archie', err)
throw err;
});
const dest = stream2('bucket', 'ttt.zip')
dest
.on('drain', loggingW('a-d', false))
.on('pipe', loggingW('s-p', false))
.on('unpipe', loggingW('s-up', false))
.on('close', loggingW('close', false))
.on('finish', loggingW('s-f', false))
.on('end', loggingW('end'))
.on('error', loggingW('error', true))
archive.pipe(dest)
archive.append(res.data, { name: '/ok/tt.jpg' }).finalize()
return {
statusCode: 200,
body: JSON.stringify({
message: '1',
input: event,
}),
};
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// return { message: 'Go Serverless v1.0! Your function executed successfully!', event };
};
module.exports.hello = hello
// hello()
Результат консоли
a-e { name: 'ok/tt.jpg',
type: 'file',
date: 2019-01-30T11:31:19.255Z,
mode: 420,
prefix: null,
sourcePath: null,
stats: false,
sourceType: 'stream',
linkname: null,
store: false,
comment: '' }
a-p { entries: { total: 1, processed: 1 },
fs: { totalBytes: 0, processedBytes: 0 } }
a-end undefined
null
// lambda
{
"statusCode": 200,
"body": "{\"message\":\"1\",\"input\":\"\"}"
}