Потому что ваш лямбда-синтаксис вводит в заблуждение. Проблема в том, что вы используете callback
и async
. Для правильного использования asyn c удалите обратный вызов из параметров.
exports.handler = async (event) => {
try {
const srcBucket = event.Records[0].s3.bucket.name;
const srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
const params = {
Bucket: srcBucket,
Key: srcKey
};
console.log(params)
var data = await s3.getObject(params).promise();
console.log(data)
} catch (err) {
console.log(err)
}
};
AWS lambda по-прежнему поддерживает обработчики стиля обратного вызова. Поэтому ваш синтаксис не является неправильным. Но если вы определили обратный вызов, обратный вызов должен быть вызван в конце выполнения функции.
Вы получаете тайм-аут, так как обратный вызов не вызывается в течение настроенного периода времени ожидания для функции (в данном случае 5 минут).
вот версия обратного вызова.
exports.handler = async (event, context, callback) => {
try {
const srcBucket = event.Records[0].s3.bucket.name;
const srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
const params = {
Bucket: srcBucket,
Key: srcKey
};
console.log(params)
var data = await s3.getObject(params).promise();
callback(null, 'completed successfully')
} catch (err) {
console.log(err)
callback(err)
}
};
надеюсь, это поможет.