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

Api AWS错误:无法将代理集成配置为转换响应,api,amazon-web-services,lambda,aws-lambda,aws-api-gateway,Api,Amazon Web Services,Lambda,Aws Lambda,Aws Api Gateway,我是Amazon Lambda API实现的初学者 我只是部署了一个非常简单的API:一个非常简单的lambda函数,使用Python 2.7打印“Hello World”,由API网关触发。但是,当我单击InvokeURL链接时,它会告诉我“{”消息“:“内部服务器错误”}” 因此,我试图找出这里的错误,因此我点击API本身,我可以看到在我的方法执行中以下内容是灰色的:“集成响应:代理集成不能配置为转换响应。” 我已经测试了许多不同的配置,但仍然面临相同的错误。我不知道为什么这个步骤是灰色的

我是Amazon Lambda API实现的初学者

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

因此,我试图找出这里的错误,因此我点击API本身,我可以看到在我的方法执行中以下内容是灰色的:“集成响应:代理集成不能配置为转换响应。


我已经测试了许多不同的配置,但仍然面临相同的错误。我不知道为什么这个步骤是灰色的。

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

所以你需要移除这个。遵循集成请求并取消选中使用Lambda代理集成

您将看到下图

然后在您的资源操作选项卡中,选择启用CORS

完成后,再次部署API并测试函数


祝你好运…

Lambda响应应该是API网关要处理的特定格式。你可以在帖子中找到详细信息


当我开发前端时,我的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)
  })
})

在集成请求中,在“代理集成”旁边有一个复选框。代理集成不支持响应转换--您的Lambda函数需要以您希望的方式呈现响应。换句话说,您不需要为Lambda代理集成设置集成响应,但是您可以使用API网关特定的响应格式控制Lambda函数内部的响应。这是正确的。
// 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)
  })
})