无法在aws-lambda中从aws s3执行getobject

问题描述 投票:0回答:1

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

    });
};

我在这做错了什么?

amazon-web-services amazon-s3 aws-lambda aws-api-gateway
1个回答
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);即可

© www.soinside.com 2019 - 2024. All rights reserved.