我是aws-lambda和aws-s3的新手。我正在尝试使用api-gateway,aws s3和aws lambda创建一个微服务。我已经编写了lambda函数来从s3中检索对象,但是它发送了null并且没有抛出任何错误。我不确定出了什么问题。我有设置角色并允许访问s3并将该角色用于lambda
const AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = async (event) => {
var params = {
"Bucket": "bucketname",
"Key": "keyname"
};
s3.getObject(params, function(err, data){
if(err) {
return "error while fetching data";
} else {
return data;
}
});
};
我在这做错了什么?
您应该以API网关代理所需的正确响应格式返回数据,并使用callback参数进行回复,因此将您的函数更改为如下所示:
const AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
var params = {
"Bucket": "bucketname",
"Key": "keyname"
};
s3.getObject(params, function(err, data){
if(err) {
return callback(new Error("error while fetching data"));
} else {
let response = {
statusCode: 200,
headers: {
"x-custom-header" : "my custom header value"
},
body: JSON.stringify(data)
};
return callback(null, response);
}
});
};
如果您没有使用API网关代理Lambda集成,那么您只需将响应更改为return callback(null, data);
即可