首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在aws-lambda中从aws s3执行getobject

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

Stack Overflow用户
提问于 2019-04-03 04:35:31
回答 1查看 184关注 0票数 0

我是aws-lambda和aws-s3的新手。我正在尝试使用api-gateway、aws s3和aws lambda创建一个微服务。我已经编写了lambda函数来从s3中检索对象,但是它发送null并且不会抛出任何错误。我不确定哪里出了问题。我设置了角色,并为s3提供了访问权限,并将该角色用于lambda

代码语言:javascript
复制
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;
      }

    });
};

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-04-03 05:02:24

您应该以API网关代理所需的正确响应格式返回数据,并使用回调参数进行回复,因此请更改您的函数,如下所示:

代码语言:javascript
复制
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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55483171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档