Это потому, что ваша функция завершается до выполнения обратного вызова, поскольку ваш s3.getObject()
вызов является асинхронным изнутри.
Чтобы получить данные из AWS Lambda, вам придется вернутьсяваше значение примерно так:
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.myHandler = function(event, context, callback) {
// Retrieve the object
s3.getObject({
Bucket: 'XXXXXX',
Key: 'YYYYY'
}, function(err, data) {
if (err) {
console.log(err);
callback(err)
} else {
callback(null, {statusCode: 200, body: JSON.stringify(data) })
}
});
};
Я предлагаю вам использовать Node 8, так что вы можете легко использовать async / await .
Ваш код будет выглядеть так:
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.myHandler = async (event) => {
const data = await s3.getObject({
Bucket: 'XXXXXX',
Key: 'YYYYY'
}).promise();
return {
statusCode: 200,
body: JSON.stringify(data)
}
};
Другая проблема в вашем коде заключается в том, что вы всегда печатаете "data"
вместо data
, поэтому вместо самих данных печатается строка.