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_response
和aws_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 错误