在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
基本上我希望API网关识别成功的lambda执行,然后默认将它映射到200响应但是 那不会发生。
有谁知道为什么这不起作用?
答案 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执行。
解决方案:我删除了资源并再次创建它而不点击 这次'启用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