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确实是角色(而不是策略)。
在 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确实是角色(而不是策略)。