【问题标题】:AWS API Gateway : Execution failed due to configuration error: No match for output mapping and no default output mapping configuredAWS API Gateway:由于配置错误,执行失败:输出映射不匹配且未配置默认输出映射
【发布时间】:2016-03-11 06:18:16
【问题描述】:

在 AWS API Gateway 中,我有一个调用 lambda 函数的 GET 方法。

当我在 API Gateway 仪表板中测试该方法时,lambda 函数成功执行,但 API Gateway 未将 context.success() 调用映射到 200 结果,尽管默认映射设置为 yes。

相反,我得到了这个错误:

Execution failed due to configuration error: No match for output mapping and no default output mapping configured

这是我的集成响应设置:

这是我的方法响应设置:

基本上,我希望 API 网关能够识别成功的 lambda 执行,然后默认将其映射到 200 响应,但是 这不会发生。

有人知道为什么这不起作用吗?

【问题讨论】:

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


    【解决方案1】:

    我遇到了类似的问题,通过添加方法响应 200 解决了它

    【讨论】:

      【解决方案2】:

      我在使用无服务器框架上传 api 时遇到了同样的问题。您只需按照以下步骤即可解决我的问题。

      1- 导航到 aws api 网关
      2- 找到您的 api 并单击方法(发布、获取、任何等)
      3- 点击方法响应
      4- 添加 200 响应的方法。
      5- 保存并测试

      【讨论】:

      • 使用 OPTIONS 方法对我有用。
      【解决方案3】:

      保存已解决的默认集成响应映射时出现问题。该错误导致对错误保存的 API 方法的请求返回 500 错误,CloudWatch 日志应包含:

      Execution failed due to configuration error: 
      No match for output mapping and no default output mapping configured. 
      

      由于“启用 CORS”保存了默认的集成响应,因此您的场景中也出现了此问题。

      有关更多信息,请参阅 AWS 论坛条目:https://forums.aws.amazon.com/thread.jspa?threadID=221197&tstart=0

      最好的,

      尤尔根

      【讨论】:

      • 这个问题依然存在(论坛里也提到过)如何解决?
      • 问题仍然存在。另外,这里没有解决方案:(
      【解决方案4】:

      这是一个“检查基础”类型的答案。在我的场景中,CORS 和错误mentioned above 没有问题。然而,标题中给出的错误信息正是我所看到的,也是我进入这个帖子的原因。

      相反,(API 网关新手)我未能重新部署部署。一旦我这样做了,一切正常。

      作为奖励,对于 Terraform 0.12 用户,您需要并且应该使用的魔法是您的 aws_api_gateway_deployment 资源的 triggers 参数。当其他相关 APIGW 资源发生变化时,这将自动为您重新部署。详情请见TF documentation

      【讨论】:

      • Terraform:注意到了!还记得使用资源aws_api_gateway_method_responseaws_api_gateway_integration_response。将这些添加到triggers
      【解决方案5】:

      什么对我有用:
      1. 在 Api Gateway Console 中手动创建 OPTIONS 方法
      2. 在创建的 OPTIONS 方法下的 Method Response 部分添加 200 OK
      3. 从菜单中选择选项方法并启用 CORS

      【讨论】:

        【解决方案6】:

        我发现了问题:

        亚马逊在 API-Gateway 资源配置中添加了一个新按钮 标题为“启用 CORS”。我之前点击过这个但是一旦启用 似乎没有办法禁用它

        使用此按钮启用 CORS(而不是手动执行,这是我最终所做的)似乎会导致内部服务器错误,即使在 成功执行 lambda。

        解决方案:我删除了资源并再次创建它而没有单击 这次在“启用 CORS”上一切正常。

        这似乎是具有该功能的 BUG,但也许我只是不这样做 足够了解它。如果您有任何进一步的信息,请发表评论。 谢谢。

        【讨论】:

        • 如果这仍然相关,但删除 CORS 只是删除资源上的 OPTIONS 方法,然后重新部署资源。无需删除整个资源
        【解决方案7】:

        选中“使用 Lambda 代理集成”复选框。

        这对我来说很好。作为参考,我的 lambda 函数如下所示...

        def lambda_handler(event, context:
            # Get params
            param1 = event['queryStringParameters']['param1']
            param2 = event['queryStringParameters']['param2']
        
            # Do some stuff with params to get body
            body = some_fn(param1, param2)
        
            # Return response object
            response_object = {}
            response_object['statusCode'] = 200
            response_object['headers'] = {}
            response_object['headers']['Content-Type']='application/json'
            response_object['body'] = json.dumps(body)
            
            return response_object
        

        【讨论】:

          【解决方案8】:

          我只是把它放在这里,因为我今天遇到了同样的问题,在我的情况下,我们在端点的末尾附加了一个 /。例如,如果这是定义:

          {
            "openapi": "3.0.1",
            "info": {
              "title": "some api",
              "version": "2021-04-23T23:59:37Z"
            },
            "servers": [
              {
                "url": "https://api-gw.domain.com"
              }
            ],
            "paths": {
              "/api/{version}/intelligence/topic": {
                "get": {
                  "parameters": [
                    {
                      "name": "username",
                      "in": "query",
                      "required": true,
                      "schema": {
                        "type": "string"
                      }
                    },
                    {
                      "name": "version",
                      "in": "path",
                      "required": true,
                      "schema": {
                        "type": "string"
                      }
                    },
                    {
                      "name": "x-api-key",
                      "in": "header",
                      "required": true,
                      "schema": {
                        "type": "string"
                      }
                    },
                    {
                      "name": "X-AWS-Cognito-Group-ID",
                      "in": "header",
                      "schema": {
                        "type": "string"
                      }
                    }
                  ],
                  ...
          
          

          删除端点末尾的任何//api/{version}/intelligence/topic。在 swagger + api gw extensions json 的 apigateway-integration 部分的 uri 中也执行相同的操作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-29
            • 2015-01-13
            • 2023-03-05
            • 1970-01-01
            • 2016-03-14
            相关资源
            最近更新 更多