我在Amazon的API网关中,对Integration Response的Mapping Templates部分的任何更改都会破坏资源/方法(导致Test返回错误)并且无法修复(您必须删除资源/方法和创建一个新的。)
application/json
更改为application/xml
并将'输出直通'更改为'映射模板'。 我输入此作为模板:
#set($inputRoot = $input.path('$'))
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Message>
<Body>
$inputRoot
</Body>
</Message>
</Response>
结果如下:
{
"message": "Internal server error"
}
这是Logs输出的内容(我用[这里的解释]替换了潜在的敏感信息,因为我不确定什么是敏感的):
Execution log for request test-request
Sun Dec 06 17:33:50 UTC 2015 : Starting execution for request: test-invoke-request
Sun Dec 06 17:33:50 UTC 2015 : API Key: test-invoke-api-key
Sun Dec 06 17:33:50 UTC 2015 : Method request path: {}
Sun Dec 06 17:33:50 UTC 2015 : Method request query string: {}
Sun Dec 06 17:33:50 UTC 2015 : Method request headers: {}
Sun Dec 06 17:33:50 UTC 2015 : Method request body before transformations: null
Sun Dec 06 17:33:50 UTC 2015 : Endpoint request URI: [lambda uri here]
Sun Dec 06 17:33:50 UTC 2015 : Endpoint request headers: {Authorization=[lots of * here], X-Amz-Date=20151206T173350Z, X-Amz-Source-Arn=[arn here], Accept=application/json, User-Agent=AmazonAPIGateway_[string here], Host=lambda.us-east-1.amazonaws.com}
Sun Dec 06 17:33:50 UTC 2015 : Endpoint request body after transformations:
Sun Dec 06 17:33:50 UTC 2015 : Endpoint response body before transformations: "hi"
Sun Dec 06 17:33:50 UTC 2015 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=[data here], Connection=keep-alive, Content-Length=12, Date=Sun, 06 Dec 2015 17:33:50 GMT, Content-Type=application/json}
Sun Dec 06 17:33:50 UTC 2015 : Execution failed due to configuration error: No match for output mapping and no default output mapping configured
Sun Dec 06 17:33:50 UTC 2015 : Method completed with status: 500
application/json
更改为application/xml
...这产生了同样的错误。application/json
&amp;集成响应回到application/json
和'输出passthrough'...这产生了同样的错误 - 就像这个API资源/方法现在永久地被破坏了。我还测试了另一个新资源,仅将方法响应中的响应模型的内容类型从'application / json'更改为'application / xml'...这导致测试成功。
我还尝试对集成响应中的映射模板进行了较小的更改...而不是从“输出直通”到“映射模板”的完整切换,我只是将内容类型从application/json
更改为{ {1}} ...这导致了同样的错误。
因此,似乎根本原因是从输出直通更改为映射模板...一旦进行了更改,测试将失败&amp;您将无法将其返回到通过状态 - 您必须完全删除资源/方法&amp;开始一个新的。
另外,要明确的是,在整个过程中都没有部署 - 我严格使用AWS控制台本身,使用Web界面中的“测试”链接。
任何人都知道这里发生了什么? 我也试图在他们的Discussion Forum中得到一个答案,但这些线程通常不像这里那样活跃......
添加了注释
我确实有一个功能部署运行,它使用这个映射模板。该部署来自application/xml
,因此这可能是Amazon API网关中的新错误/更改...
答案 0 :(得分:2)
这一直是API Gateway的临时问题,因为现在问题已经消失。
一个警告:
从不点击“集成响应”页面上的“保存”按钮。这似乎会导致问题,至少截至今天(2015-12-05)。
答案 1 :(得分:1)
保存默认集成响应映射时,API存在问题。该错误导致对您的API方法的请求被错误地保存以返回500错误,CloudWatch日志应该说“由于配置错误导致执行失败:输出映射不匹配且未配置默认输出映射”。
问题现已解决。如果您遇到这种情况,请重新部署您的API配置。
有关详细信息,请参阅此AWS论坛条目:https://forums.aws.amazon.com/thread.jspa?threadID=221197&tstart=0
此致 尔根
答案 2 :(得分:0)
我采访了亚马逊的支持人员及其已知问题。只要你没有按下保存按钮就可以了,但是一旦你这样做就没有回头了。
在更改模板时刷新复选框,然后刷新页面。这似乎对我有用。
答案 3 :(得分:0)
问题现已解决。现在可以安全地保存默认的集成响应。如果部署的API存在问题,则重新部署应解决问题。谢谢你的耐心等待。
赖安