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

时间:2015-12-06 16:59:57

标签: amazon-web-services aws-sdk aws-lambda aws-api-gateway

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

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

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

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

这是我的集成响应设置: enter image description here

这是我的方法响应设置: enter image description here

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

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

8 个答案:

答案 0 :(得分:5)

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

iterators

因为' ENABLE CORS'保存默认的集成响应,此问题也出现在您的方案中。

有关详细信息,请参阅AWS论坛条目:https://forums.aws.amazon.com/thread.jspa?threadID=221197&tstart=0

最佳,

尔根

答案 1 :(得分:4)

这是“基本检查”类型的答案。在我的场景中,CORS和错误mentioned above都没有问题。但是,标题中给出的错误消息正是我所看到的,也是导致我进入此线程的原因。

相反,(API网关新手)我未能重新部署部署。一旦完成,一切正常。

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

答案 2 :(得分:3)

我有类似的问题,通过添加方法响应200来解决它

答案 3 :(得分:2)

对我有用的是:
1.在Api Gateway Console中手动创建OPTIONS方法
2.在创建的OPTIONS方法下的Method Response部分中,添加了200 OK
3.选择选项方法并从菜单中启用CORS

答案 4 :(得分:2)

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

1-导航到AWS api网关
2-找到您的API并单击方法(发布,获取,任意等)
3-单击方法响应
4-响应数为200的添加方法。
5-保存并测试

答案 5 :(得分:1)

我发现了问题:

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

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

enter image description here

解决方案:我删除了资源并再次创建它而不点击 这次'启用CORS',一切正常。

这似乎是具有该功能的BUG,但也许我不这样做 理解得很好。如果您有任何进一步的信息,请评论 谢谢。

答案 6 :(得分:0)

我把它放在这里是因为我今天遇到了同样的问题,就我而言,我们在端点的末尾附加了一个 type mismatch; found : Person => play.api.libs.json.Reads[Person] required: Person => play.api.libs.json.Reads[Person] implicit val PersonFormat: OFormat[Person] = Json.format[Person] 。例如,如果这是定义:

/

删除端点末尾的任何 { "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" } } ], ... /。在 swagger + api gw 扩展 json 的 apigateway-integration 部分的 /api/{version}/intelligence/topic 中也做同样的事情。

答案 7 :(得分:0)

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