Если вы пытаетесь использовать async / await функцию Node v8.x, тогда вы должны заключить код в try / catch block и использоватьобещание (я имею в виду, что нет необходимости переносить код функции, но вы все равно должны реализовать блок try / catch внутри своего приложения).
Примечание: AWS-SDK уже обещан, означает, что вы наделены не может обещать методы AWS-SDK или использовать обратные вызовы.Просто добавьте .promise () к вашему методу как хвост и добавьте ключевое слово await в качестве префикса к методу, который вы пытаетесь вызвать.
Пример:
До:
s3.getObject(params, (err, data) => {
// callback(null, data.Body.toString('utf-8'))
После:
try
{
const s3Response = await s3.getObject(params).promise();
// if succeed
// handle response here
}
catch (ex)
{
// if failed
// handle response here (obv: ex object)
// you can simply use logging
console.error(ex);
}
Тогда ваш код должен выглядеть так:
// it's really cool to use ES6 syntax to import modules: import * as AWS from 'aws-sdk';
// btw, you don't have to import AWS-SDK inside the handler file
// const AWS = require('aws-sdk')
exports.handler = async (event) => {
const s3options =
{
accessKeyId: process.env.AWS_KEY,
secretAccessKey: process.env.AWS_SECRET,
apiVersion: '2006-03-01',
// do not forget include a region (e.g. { region: 'us-west-1' })
}
const params =
{
Bucket: event.Records[0].s3.bucket.name,
Key: event.Records[0].s3.object.key,
}
const s3 = new AWS.S3(s3options)
try
{
const s3Response = await s3.getObject(params).promise();
// if succeed
// handle response here
}
catch (ex)
{
// if failed
// handle response here (obv: ex object)
// you can simply use logging
console.error(ex);
}
}