无法在AWS Lambda中从AWS S3执行getObject

时间:2019-04-02 20:35:31

标签: amazon-web-services amazon-s3 aws-lambda aws-api-gateway

我是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;
      }

    });
};

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

您应该以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);