Прежде всего, вы должны изменить метод точки входа.Как вы упомянули, прежде чем пытаться использовать среду выполнения узла 8.10, затем следующая часть кода:
exports.handler = (event, context, callback) => {}
Вам нужно изменить на:
export async function <function_name>(event) {}
ref: https://aws.amazon.com/blogs/compute/node-js-8-10-runtime-now-available-in-aws-lambda/
Тогда ваш путь к этой функции должен быть:
<module_name>.<function_name>
Кроме того, вам не нужна следующая часть кода:
function waitForFileLoadBeforeDoingSomething(event, context, callback){
if(!fileData){
console.log('No file available to me as yet, lets sleep for a bit');
setTimeout(function(){
waitForFileLoadBeforeDoingSomething(event, context, callback);
}, 300);
}
}
Тогда избавьтесь от varдекларация.Не связывайтесь с областью.Просто используйте:
const AWS = require('aws-sdk');
Следующим шагом является создание экземпляра S3:
const S3 = new AWS.S3({region: process.env.AWS_REGION, apiVersion: '2006-03-01'});
// with region of your AWS account and current API verstion;
Объявите параметры для вашего метода выборки:
const params =
{
Bucket: 'STRING_VALUE', // a path to your Bucket
Key: 'STRING_VALUE' // a key (literally a path to your file)
}
ref: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property
И вам не нужно структурировать ваше событие, потому что оно уже структурировано:
const s = JSON.stringify(fileData.Body.toString('utf-8'));
И, наконец:
try
{
const result = await S3.getObject(params).promise();
// if successful then:
console.log(`Check the result: ${result}`);
}
catch (ex) // if an error occured
{
console.error(ex);
}
Кроме того, убедитесь, чтовремя выполнения 5 минут (это только для целей отладки после того, как вы можете отрегулировать) и увеличение памяти лямбды (также для целей тестирования).