【问题标题】:AWS Error: Proxy integrations cannot be configured to transform responsesAWS 错误:代理集成无法配置为转换响应
【发布时间】:2018-05-17 09:30:04
【问题描述】:

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

我只是部署了一个非常简单的 API:一个非常简单的 lambda 函数,使用 Python 2.7 打印“Hello World”,我使用 API Gateway 触发。但是,当我单击 Invoke URL 链接时,它会告诉我“{"message": "Internal server error"}"。

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

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

【问题讨论】:

  • 在集成请求中,“代理集成”旁边有一个复选框。代理集成不支持响应转换 - 您的 Lambda 函数需要以您想要的方式呈现响应。
  • 换句话说,您不需要为您的 Lambda 代理集成设置集成响应,但您可以使用 API Gateway 特定的响应格式控制您的 Lambda 函数内部的响应。跨度>
  • 没错。

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


【解决方案1】:

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

所以你需要删除它。按照Integration Request并取消勾选Use Lambda Proxy integration

你会看到下面的图片

然后在你的ResourcesAtction标签中,选择Enable CORS

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

祝你好运……

【讨论】:

    【解决方案2】:

    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);
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-10-11
        • 1970-01-01
        • 2019-09-18
        • 2017-04-07
        • 2023-03-05
        • 2019-07-04
        • 2019-03-17
        • 2020-08-28
        • 2019-02-12
        相关资源
        最近更新 更多