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

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

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

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

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

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

这是我的集成响应设置:

这是我的方法响应设置:

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

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

我发现了问题:

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

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

解决方案:我删除了资源并在未单击的情况下重新创建了它 这次在 'Enable CORS' 上,一切正常。

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

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

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

由于'ENABLE CORS'保存了默认的集成响应,这个问题也出现在你的场景中。

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

最佳,

于尔根

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

我有类似的问题,通过添加方法 response 200 解决了它

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

1- 导航到 aws api 网关
2- 找到您的 api 并点击方法(Post、Get、Any 等)
3- 单击方法响应
4- 添加具有 200 个响应的方法。
5- 保存并测试

这是 'check-the-basics' 类型的回答。在我的场景中,CORS 和错误 mentioned above 没有问题。但是,标题中给出的错误消息正是我所看到的,也是导致我进入此线程的原因。

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

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

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

{
  "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。同样在 uri 上 api 招摇的网关集成部分 + api gw 扩展 json.

选中“使用 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

确保您的角色的ARN确实是角色(而不是策略)。