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

问题描述 投票:0回答:10

在 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
10个回答
24
投票

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

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


15
投票

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


15
投票

这是“检查基础知识”类型的答案。在我的场景中,CORS 和上面提到的 bug 并不存在问题。然而,标题中给出的错误消息正是我所看到的,也是导致我看到这个帖子的原因。 相反,(API 网关新手)我未能重新部署部署。一旦我这样做了,一切就都成功了。

作为奖励,对于 Terraform 0.12 用户来说,您需要且应该使用的魔法是您的

triggers

资源的

aws_api_gateway_deployment
参数。当其他相关 APIGW 资源发生变化时,这将自动为您重新部署。有关详细信息,请参阅
TF 文档


12
投票

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

最好的,

于尔根


5
投票
1. 在 Api Gateway Console 中手动创建 OPTIONS 方法

2. 在创建的 OPTIONS 方法下的 Method Response 部分添加 200 OK
3. 选择Option方法并从菜单中启用CORS



1
投票

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

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

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

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


1
投票

这对我来说效果很好。作为参考,我的 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



0
投票
/

。例如,如果这是定义:

{
  "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 扩展 json 的 apigateway-integration 部分也执行相同操作。
    
确保您的

角色

0
投票
角色

(而不是策略等)。 我将其添加到我的 Cloudformation 模板中然后成功:


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.