AWS错误:无法将代理集成配置为转换响应

时间:2017-12-03 23:31:05

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

我是亚马逊Lambda-API实施的初学者。

我只是部署一个非常简单的API:一个非常简单的lambda函数,使用Python 2.7打印" Hello World"我用API网关触发。但是,当我点击“调用网址”链接时,它会告诉我" {"消息":"内部服务器错误"} "

因此,我试图看看这里有什么问题,所以我点击了API本身,我可以看到以下在我的方法执行中是灰色的:" 集成响应:代理集成无法配置为转换回复。"

enter image description here

我测试了很多不同的配置,但我仍然面临同样的错误。我不知道为什么这一步是灰色的。

3 个答案:

答案 0 :(得分:4)

尝试集成API网关和lambda函数时遇到了同样的问题。基本上,花了几个小时后,我发现了。 因此,在创建新资源或方法时,默认情况下会设置使用Lambda代理集成

所以你需要删除它。按照集成请求并取消选中使用Lambda代理集成 enter image description here

您将看到以下图片 enter image description here

然后在资源 Atction 标签中,选择启用CORS enter image description here enter image description here enter image description here

完成此操作后再次部署API并测试功能。 Also, this topic will explain what's happening under the hood.

祝你好运......

答案 1 :(得分:3)

Lambda响应应采用特定格式供API网关处理。您可以在帖子中找到详细信息。 https://aws.amazon.com/premiumsupport/knowledge-center/malformed-502-api-gateway/

exports.handler = (event, context, callback) => {

var responseBody = {
    "key3": "value3",
    "key2": "value2",
    "key1": "value1"
};

var response = {
    "statusCode": 200,
    "headers": {
        "my_header": "my_value"
    },
    "body": JSON.stringify(responseBody),
    "isBase64Encoded": false
};
callback(null, response);

答案 2 :(得分:0)

我开发前端时,我的API在Postman中工作,但不在本地工作。尝试在我的资源上为GET,POST和OPTIONS启用CORS时遇到相同的错误,并且在@aditya答案中进行搜索后,使我走上了正确的轨道,但是我不得不对代码进行些微调整。

我需要添加res.statusCode和两个标头,然后它开始工作。

// GET
// get all myModel
app.get('/models/', (req, res) => {
  const query = 'SELECT * FROM MyTable'
  pool.query(query, (err, results, fields) => {
    //...

    const models = [...results]
    const response = {
      data: models,
      message: 'All models successfully retrieved.',
    }
    //****** needed to add the next 3 lines
    res.statusCode = 200;
    res.setHeader('content-type', 'application/json');
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.send(response)
  })
})