Это проблема синхронизации.
Ваш код return response
выполняется перед вызовом обратного вызова.
вам нужно будет поместить свой оператор возврата в ваш обратный вызов или использовать async / await
Возврат внутри вашего обратного вызова:
var AWS = require("aws-sdk");
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
var s3 = new AWS.S3();
s3.listBuckets({}, function (err, data) {
if (err) {
console.log(err, err.stack);
return {
statusCode: 500,
message: 'some error'
}
}
return response
});
}
Использование async / await:
var AWS = require("aws-sdk");
exports.handler = async (event) => {
const response = {
statusCode: 200
};
var s3 = new AWS.S3();
await s3.listBuckets().promise();
return response;
}
Я бы пошел с асинхронной / awaitподход, поскольку это намного чище и более читабельно.С обещаниями также легче работать, чем с обратными вызовами.
РЕДАКТИРОВАТЬ : ОП утверждал, что это не сработало.Поэтому я решил проверить это самостоятельно.Вышеприведенный код работает с очень небольшим изменением только для добавления перечисленных сегментов к ответу.Вот окончательный код:
var AWS = require("aws-sdk");
exports.handler = async (event) => {
const response = {
statusCode: 200
};
var s3 = new AWS.S3();
const buckets = await s3.listBuckets().promise();
response.body = JSON.stringify(buckets);
return response;
}
А вот вывод в журналах CloudWatch: