Итак, у меня есть код ниже.Когда я запускаю его локально, он работает как положено.Когда я публикую его в lambda, он не может получить мои S3 элементы.Я вижу, что для моего запроса создаются обещания, но return Promise.all(ps)
никогда не возвращается с ожидаемыми значениями.Я пытался изменить это несколькими различными способами, но всегда ничего.Я обновил свой локальный env, чтобы он был таким же, как лямбда (узел 8.10 и aws-sdk 2.290.0), и все же он работает локально, но не при размещении.
Журналы Cloudwatch показывают, что он завершился и не содержит ошибок и заканчивается в ~ 100 мс.
Я призываю получить 20 объектов из s3 размером 8К;Я добавил перерыв, чтобы получить только 1 запись, и то же самое происходит ... ничего.
module.exports = async(messages) => {
try {
for (var rec of messages) {
debug('rec',rec);
let samples = await getRecordingPageSamples(rec.serialNumber,rec.recordingSet,rec.recording,rec.pages);
//NEVER GETS HERE IN LAMBDA
...
}
//NEVER GETS HERE IN LAMBDA
console.log('we are done here.');
} catch (e) {
console.log('unhandled',e);
}
};
function getRecordingPageSamples(serialNumber,recordingSet,recording,pages){
let ps = getObjectGenerator(pages.map(x=>[process.env.s3EeegPageBucket,genRecordingSamplePath(serialNumber,recordingSet,recording,x)]));
ps = ps.map( p=> p.then(obj=>{
console.log('done',obj[1]);
return obj.slice(0,2).concat([obj[1].split(s.FILE_NAME_SEP)[2],obj[2].Body.toString()]);
}));
// here ps is an array of promises ps [ Promise { <pending> } ]
return Promise.all(ps);
}
function getObjectGenerator(list){
let ps = [];
for (let x of list){
//DOES GET HERE IN LAMBDA
console.log('requesting obj',x);
ps.push( getObject(x[0],x[1]));
}
return ps;
}
const getObject = (bucket,key) => {
return s3.getObject({
Bucket: bucket, // Assuming this is an environment variable...
Key: key
})
.promise()
.then(data=>{
//NEVER GETS HERE IN LAMBDA
console.log('got it',key);
return [bucket,key,data];
});
Проблема решена.Над этим модулем была еще одна функция-обертка, которая была асинхронной, но не использовала ключевое слово await.Ошибка новичка!