AWS API Gateway:由于配置错误,执行失败:输出映射不匹配且未配置默认输出映射

Posted

技术标签:

【中文标题】AWS API Gateway:由于配置错误,执行失败:输出映射不匹配且未配置默认输出映射【英文标题】:AWS API Gateway : Execution failed due to configuration error: No match for output mapping and no default output mapping configured 【发布时间】: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 响应,但是 这不会发生。

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

【问题讨论】:

【参考方案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 中也执行相同的操作。

【讨论】:

以上是关于AWS API Gateway:由于配置错误,执行失败:输出映射不匹配且未配置默认输出映射的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda,API Gateway 返回 Malformed Lambda 代理响应,502 错误

使用代理通过 AWS API Gateway 的 Lambda 错误

AWS API Gateway OPTIONS 请求返回 500 错误

AWS API Gateway - Lambda - 内部服务器错误

AWS API Gateway 中的 CORS 配置

AWS API Gateway Websocket UnknownError