Вызов s3.getObject
является асинхронным вызовом.Выполнение кода продолжается, пока выполняется код s3
.Вам необходимо явно await
, чтобы обещание вызова разрешилось.
Вот как вы это сделаете (обратите внимание на изменение в вызове s3.getObject
):
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event) => {
var params = {
Bucket: <bucket>,
Key: <key>,
};
const data = await s3.getObject(params).promise();
const response = {
statusCode: 200,
body: JSON.stringify(data),
};
return response;
};
Вы можетеиспользуйте блок try/catch
для обработки ошибок.
Здесь важно понять время выполнения.Основной код в вашей функции вызывается последовательно, когда вызывается лямбда.Функция обратного вызова, которую вы передаете в вызов s3.getObject
, вызывается, когда приходит ответ от S3, спустя долгое время после того, как ваша лямбда закончила свое выполнение.
Ваш вызов return
выполняется до выполнения обратного вызова, и поэтому вы видите результат JSON.strigify(responseMsg)
, где responseMsg
содержит начальное значение, которое вы ему дали, то есть пустую строку ''
.